New Upstream Snapshot - libjs-tv4

Ready changes

Summary

Merged new upstream version: 1.2.7+git20180215.2.e24bd1d (was: 1.2.7+git20180215.1.e24bd1d).

Resulting package

Built on 2022-12-17T05:00 (took 4m48s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots libjs-tv4

Diff

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 9c7423d..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-node_modules
-npm-debug.log
-
-/test/tmp
-/tmp
-
-/.idea
-.DS_Store
-
-/*.tgz
-
-/*.js.map
-
-build
-components
-
diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644
index 2abf8bf..0000000
--- a/.jshintrc
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-	"curly": true,
-	"immed": true,
-	"latedef": true,
-	"newcap": true,
-	"noarg": true,
-	"sub": true,
-	"undef": true,
-	"unused": true,
-	"boss": true,
-	"eqnull": true,
-	"node": true,
-	"smarttabs": true,
-	"browser": true,
-	"laxbreak": true,
-	"eqeqeq": true,
-	"globals": {
-		"describe": true,
-		"it": true,
-		"before": true,
-		"beforeEach": true,
-		"after": true,
-		"afterEach": true,
-		"helper": true,
-		"tv4": true,
-		"assert": true,
-		"define": true,
-		"require": true
-	}
-}
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 6cc8c97..0000000
--- a/.npmignore
+++ /dev/null
@@ -1,23 +0,0 @@
-.npmignore
-.gitignore
-.gitmodules
-.travis.yml
-.jshintrc
-bower.json
-component.json
-Gruntfile.js
-
-/source
-/.idea
-/node_modules
-/tests
-/test
-/build
-/*.tgz
-/*.php
-/*.min.js
-/*.js.map
-/*.html
-/*.htm
-/try
-/doc
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 6e5919d..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-language: node_js
-node_js:
-  - "0.10"
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 7c53117..0000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,179 +0,0 @@
-module.exports = function (grunt) {
-	'use strict';
-
-	var path = require('path');
-	var util = require('util');
-
-	require('source-map-support').install();
-
-	grunt.loadNpmTasks('grunt-contrib-clean');
-	grunt.loadNpmTasks('grunt-contrib-copy');
-	grunt.loadNpmTasks('grunt-contrib-jshint');
-	grunt.loadNpmTasks('grunt-contrib-uglify');
-	grunt.loadNpmTasks('grunt-concat-sourcemap');
-	grunt.loadNpmTasks('grunt-mocha-test');
-	grunt.loadNpmTasks('grunt-markdown');
-	grunt.loadNpmTasks('grunt-mocha');
-	grunt.loadNpmTasks('grunt-component-io');
-	grunt.loadNpmTasks('grunt-push-release');
-	grunt.loadNpmTasks('grunt-regex-replace');
-
-	grunt.initConfig({
-		pkg: grunt.file.readJSON('package.json'),
-		push: {
-			options: {
-				updateConfigs: ['pkg'],
-				files: ['package.json', 'component.json', 'bower.json'],
-				add: false,
-				addFiles: [],
-				commit: false,
-				commitMessage: 'Release v%VERSION%',
-				commitFiles: ['-a'],
-				createTag: false,
-				tagName: 'v%VERSION%',
-				tagMessage: 'Version %VERSION%',
-				push: false,
-				pushTo: 'origin',
-				npm: false,
-				npmTag: 'Release v%VERSION%',
-				gitDescribeOptions: '--tags --always --abbrev=1 --dirty=-d' // options to use with '$ git describe'
-			}
-		},
-		copy: {
-			test_deps: {
-				expand: true,
-				flatten: true,
-				src: ['node_modules/mocha/mocha.js', 'node_modules/mocha/mocha.css', 'node_modules/proclaim/proclaim.js'],
-				dest: 'test/deps'
-			}
-		},
-		clean: {
-			tests: ['tmp', 'test/all_concat.js'],
-			maps: ['*.js.map'],
-			build: ['tv4.js', 'tv4.min.js', '*.js.map', 'test/all_concat.js', 'test/all_concat.js.map']
-		},
-		jshint: {
-			//lint for mistakes
-			options:{
-				reporter: './node_modules/jshint-path-reporter',
-				jshintrc: '.jshintrc'
-			},
-			tests: ['test/tests/**/*.js', 'test/all_*.js'],
-			output: ['./tv4.js']
-		},
-		'regex-replace': {
-			unmap: {
-				src: ['tv4.js', 'tv4.min.js'],
-				actions: [
-					{
-						name: 'map',
-						search: '\r?\n?\\\/\\\/[@#] sourceMappingURL=.*',
-						replace: '',
-						flags: 'g'
-					}
-				]
-			}
-		},
-		concat_sourcemap: {
-			options: {
-				separator: '\n'
-			},
-			source: {
-				expand: true,
-				cwd: 'source',
-				rename: function (dest, src) {
-					return dest;
-				},
-				src: [
-					'../LICENSE.txt',
-					'_header.js',
-					'_polyfill.js',
-					'uri-template-fill.js',
-					'validate.js',
-					'basic.js',
-					'numeric.js',
-					'string.js',
-					'array.js',
-					'object.js',
-					'combinations.js',
-					'hypermedia.js',
-					'resolve-uri.js',
-					'normalise-schema.js',
-					'error-reporter.js',
-					'api.js',
-					'_footer.js'
-				],
-				dest: 'tv4.js'
-			},
-			tests: {
-				src: ['test/_header.js', 'test/tests/**/*.js'],
-				dest: 'test/all_concat.js'
-			}
-		},
-		component: {
-			options: {
-				out: 'build/'
-			},
-			main: ['tv4.js', 'lang/**/*.js']
-		},
-		uglify: {
-			tv4: {
-				options: {
-					report: 'min',
-					sourceMapIn: 'tv4.js.map',
-					sourceMap: 'tv4.min.js.map'
-				},
-				files: {
-					'tv4.min.js': ['tv4.js']
-				}
-			}
-		},
-		mochaTest: {
-			//node-side
-			any: {
-				src: ['test/all_concat.js'],
-				options: {
-					reporter: 'mocha-unfunk-reporter',
-					bail: false
-				}
-			}
-		},
-		mocha: {
-			//browser-side
-			any: {
-				src: ['test/index*.html'],
-				options: {
-					reporter: 'Dot',
-					log: true,
-					run: true
-				}
-			}
-		},
-		markdown: {
-			index: {
-				options: {
-					template: 'doc/_template.html',
-					markdownOptions: {
-						gfm: true,
-						highlight: false
-					}
-				},
-				src: 'README.md',
-				dest: 'index.html'
-			}
-		}
-	});
-
-	// main cli commands
-	grunt.registerTask('default', ['test']);
-	grunt.registerTask('prepublish', ['cleanup']);
-
-	grunt.registerTask('products', ['uglify:tv4', 'component', 'markdown']);
-	grunt.registerTask('core', ['clean', 'concat_sourcemap', 'jshint', 'products', 'copy:test_deps']);
-
-	grunt.registerTask('build', ['core', 'cleanup']);
-	grunt.registerTask('test', ['core', 'mochaTest', 'mocha', 'cleanup']);
-	grunt.registerTask('cleanup', ['regex-replace:unmap', 'clean:maps']);
-
-	grunt.registerTask('dev', ['clean', 'concat_sourcemap', 'jshint', 'mochaTest']);
-};
diff --git a/README.md b/README.md
index 3ffa761..ea4bcef 100644
--- a/README.md
+++ b/README.md
@@ -80,7 +80,7 @@ Usage:
 tv4.validate(data, schema, function (isValid, validationError) { ... });
 ```
 
-`validationFailure` is simply taken from `tv4.error`.
+`validationError` is simply taken from `tv4.error`.
 
 ## Cyclical JavaScript objects
 
diff --git a/bower.json b/bower.json
deleted file mode 100644
index 2630891..0000000
--- a/bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "tv4",
-  "version": "1.2.7",
-  "description": "A public domain JSON Schema validator for JavaScript",
-  "keywords": [
-    "json-schema",
-    "schema",
-    "validator",
-    "tv4"
-  ],
-  "homepage": "https://github.com/geraintluff/tv4#tiny-validator-for-v4-json-schema",
-  "license": [
-    {
-      "type": "Public Domain",
-      "url": "http://geraintluff.github.io/tv4/LICENSE.txt"
-    },
-    {
-      "type": "MIT",
-      "url": "http://jsonary.com/LICENSE.txt"
-    }
-  ],
-  "main": "tv4.js",
-  "ignore": [
-    "*.html",
-    "*.txt",
-    "*.min.js",
-    "*.js.map",
-    "*.md",
-    "Gruntfile.js",
-    "package.json",
-    "component.json",
-    "bower.json",
-    "node_modules",
-    "test",
-    "try",
-    "build",
-    "dist",
-    "doc",
-    "source",
-    ".*"
-  ]
-}
diff --git a/component.json b/component.json
deleted file mode 100644
index 888ef44..0000000
--- a/component.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "name": "tv4",
-  "repo": "geraintluff/tv4",
-  "version": "1.2.7",
-  "description": "A public domain JSON Schema v4 validator for JavaScript",
-  "keywords": [
-    "json-schema",
-    "schema",
-    "validator",
-    "tv4"
-  ],
-  "dependencies": {},
-  "development": {},
-  "license": "MIT",
-  "main": "tv4.js",
-  "scripts": [
-    "tv4.js",
-    "lang/de.js",
-    "lang/fr.js",
-    "lang/nb.js",
-    "lang/pl-PL.js",
-    "lang/pt-PT.js",
-    "lang/sv-SE.js",
-    "lang/zh-CN.js"
-  ],
-  "styles": [],
-  "files": []
-}
\ No newline at end of file
diff --git a/debian/changelog b/debian/changelog
index 9cbc924..4f4b877 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-libjs-tv4 (1.2.7+dfsg1-3) UNRELEASED; urgency=medium
+libjs-tv4 (1.2.7+git20180215.2.e24bd1d-1) UNRELEASED; urgency=medium
 
   * Use secure copyright file specification URI.
   * Bump debhelper from old 9 to 12.
@@ -9,8 +9,10 @@ libjs-tv4 (1.2.7+dfsg1-3) UNRELEASED; urgency=medium
   * Update Vcs-* headers to use salsa repository.
   * Apply multi-arch hints.
     + libjs-tv4: Add Multi-Arch: foreign.
+  * New upstream snapshot.
+  * New upstream snapshot.
 
- -- Debian Janitor <janitor@jelmer.uk>  Sat, 22 Feb 2020 14:03:00 +0000
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 17 Dec 2022 04:57:51 -0000
 
 libjs-tv4 (1.2.7+dfsg1-2) unstable; urgency=medium
 
diff --git a/doc/_template.html b/doc/_template.html
deleted file mode 100644
index abc0291..0000000
--- a/doc/_template.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<html>
-<head>
-    <title>Tiny Validator for v4 JSON Schema</title>
-    <style>
-        body {
-            background-color: #F0F0E0;
-            font-family: sans-serif;
-        }
-
-        a {
-            color: #04D;
-            text-decoration: none;
-        }
-
-        a:hover {
-            color: #08F;
-            text-decoration: underline;
-        }
-
-        #main {
-            width: 780px;
-            margin-left: auto;
-            margin-right: auto;
-            border: 1px solid #888;
-            border-radius: 3px;
-            background-color: #FFF;
-        }
-
-        h1 {
-            text-align: center;
-            font-size: 1.4em;
-            font-weight: bold;
-            border-bottom: 1px solid black;
-            margin: 0;
-            padding: 0.3em;
-            padding-left: 1em;
-            background-color: #F8F8F0;
-            border-top-left-radius: 3px;
-            border-top-right-radius: 3px;
-        }
-
-        h2 {
-            border-bottom: 1px solid #BBB;
-        }
-
-        h2, h3, h4{
-            padding-left: .8em;
-            padding-right: .8em;
-        }
-        h5, p, pre, ul, ol, .content {
-            padding-left: 1em;
-            padding-right: 1em;
-        }
-        li {
-            margin-left: 1em;
-            margin-right: 1em;
-        }
-        code, .code {
-            background-color: #F8F8F8;
-            border: 1px solid #DDD;
-            border-radius: 3px;
-            padding:.1em .2em;
-        }
-        pre code {
-            display:block;
-            margin:5px;
-            padding:.5em;
-        }
-    </style>
-</head>
-<body onload="enableDemos();">
-<script src="tv4.js"></script>
-<script>
-    function enableDemos() {
-        if (!document.querySelectorAll) {
-            return;
-        }
-        var demos = document.querySelectorAll(".inline-demo");
-        if (!demos || demos.length === 0) {
-            return;
-        }
-        for (var i = 0, ii = demos.length; i < ii; i++) {
-            linkDemo(demos[i]);
-        }
-    }
-    function linkDemo(demo) {
-        var id = demo.dataset['demo'];
-        var a = document.createElement('a');
-        a.appendChild(document.createTextNode('run demo'));
-        a.href = "javascript:runDemo('" + id + "');";
-        demo.insertBefore(a, demo.firstChild);
-    }
-
-    function getDeepNodeValue(element) {
-        var text = "";
-        for (var i = 0, ii = element.childNodes.length; i < ii; i++) {
-            var child = element.childNodes[i];
-            if (child.nodeType === 3) {
-                text += child.nodeValue;
-            }
-            else if (child.nodeType === 1){
-                text += getDeepNodeValue(child);
-            }
-        }
-        return text;
-    }
-
-    function runDemo(elementId) {
-        var element = document.getElementById(elementId);
-        eval(getDeepNodeValue(element));
-    }
-</script>
-<div id="main">
-<%=content%>
-</div>
-</body>
-</html>
diff --git a/index.html b/index.html
deleted file mode 100644
index 2977ca3..0000000
--- a/index.html
+++ /dev/null
@@ -1,415 +0,0 @@
-<html>
-<head>
-    <title>Tiny Validator for v4 JSON Schema</title>
-    <style>
-        body {
-            background-color: #F0F0E0;
-            font-family: sans-serif;
-        }
-
-        a {
-            color: #04D;
-            text-decoration: none;
-        }
-
-        a:hover {
-            color: #08F;
-            text-decoration: underline;
-        }
-
-        #main {
-            width: 780px;
-            margin-left: auto;
-            margin-right: auto;
-            border: 1px solid #888;
-            border-radius: 3px;
-            background-color: #FFF;
-        }
-
-        h1 {
-            text-align: center;
-            font-size: 1.4em;
-            font-weight: bold;
-            border-bottom: 1px solid black;
-            margin: 0;
-            padding: 0.3em;
-            padding-left: 1em;
-            background-color: #F8F8F0;
-            border-top-left-radius: 3px;
-            border-top-right-radius: 3px;
-        }
-
-        h2 {
-            border-bottom: 1px solid #BBB;
-        }
-
-        h2, h3, h4{
-            padding-left: .8em;
-            padding-right: .8em;
-        }
-        h5, p, pre, ul, ol, .content {
-            padding-left: 1em;
-            padding-right: 1em;
-        }
-        li {
-            margin-left: 1em;
-            margin-right: 1em;
-        }
-        code, .code {
-            background-color: #F8F8F8;
-            border: 1px solid #DDD;
-            border-radius: 3px;
-            padding:.1em .2em;
-        }
-        pre code {
-            display:block;
-            margin:5px;
-            padding:.5em;
-        }
-    </style>
-</head>
-<body onload="enableDemos();">
-<script src="tv4.js"></script>
-<script>
-    function enableDemos() {
-        if (!document.querySelectorAll) {
-            return;
-        }
-        var demos = document.querySelectorAll(".inline-demo");
-        if (!demos || demos.length === 0) {
-            return;
-        }
-        for (var i = 0, ii = demos.length; i < ii; i++) {
-            linkDemo(demos[i]);
-        }
-    }
-    function linkDemo(demo) {
-        var id = demo.dataset['demo'];
-        var a = document.createElement('a');
-        a.appendChild(document.createTextNode('run demo'));
-        a.href = "javascript:runDemo('" + id + "');";
-        demo.insertBefore(a, demo.firstChild);
-    }
-
-    function getDeepNodeValue(element) {
-        var text = "";
-        for (var i = 0, ii = element.childNodes.length; i < ii; i++) {
-            var child = element.childNodes[i];
-            if (child.nodeType === 3) {
-                text += child.nodeValue;
-            }
-            else if (child.nodeType === 1){
-                text += getDeepNodeValue(child);
-            }
-        }
-        return text;
-    }
-
-    function runDemo(elementId) {
-        var element = document.getElementById(elementId);
-        eval(getDeepNodeValue(element));
-    }
-</script>
-<div id="main">
-<h1 id="tiny-validator-for-v4-json-schema-">Tiny Validator (for v4 JSON Schema)</h1>
-<p><a href="http://travis-ci.org/geraintluff/tv4"><img src="https://secure.travis-ci.org/geraintluff/tv4.svg?branch=master" alt="Build Status"></a> <a href="https://gemnasium.com/geraintluff/tv4"><img src="https://gemnasium.com/geraintluff/tv4.svg" alt="Dependency Status"></a> <a href="http://badge.fury.io/js/tv4"><img src="https://badge.fury.io/js/tv4.svg" alt="NPM version"></a></p>
-<p>Use <a href="http://json-schema.org/">json-schema</a> <a href="http://json-schema.org/latest/json-schema-core.html">draft v4</a> to validate simple values and complex objects using a rich <a href="http://json-schema.org/latest/json-schema-validation.html">validation vocabulary</a> (<a href="http://json-schema.org/examples.html">examples</a>).</p>
-<p>There is support for <code>$ref</code> with JSON Pointer fragment paths (<code>other-schema.json#/properties/myKey</code>).</p>
-<h2 id="usage-1-simple-validation">Usage 1: Simple validation</h2>
-<pre><code class="lang-javascript">var valid = tv4.validate(data, schema);</code></pre>
-<p>If validation returns <code>false</code>, then an explanation of why validation failed can be found in <code>tv4.error</code>.</p>
-<p>The error object will look something like:</p>
-<pre><code class="lang-json">{
-    &quot;code&quot;: 0,
-    &quot;message&quot;: &quot;Invalid type: string&quot;,
-    &quot;dataPath&quot;: &quot;/intKey&quot;,
-    &quot;schemaPath&quot;: &quot;/properties/intKey/type&quot;
-}</code></pre>
-<p>The <code>&quot;code&quot;</code> property will refer to one of the values in <code>tv4.errorCodes</code> - in this case, <code>tv4.errorCodes.INVALID_TYPE</code>.</p>
-<p>To enable external schema to be referenced, you use:</p>
-<pre><code class="lang-javascript">tv4.addSchema(url, schema);</code></pre>
-<p>If schemas are referenced (<code>$ref</code>) but not known, then validation will return <code>true</code> and the missing schema(s) will be listed in <code>tv4.missing</code>. For more info see the API documentation below.</p>
-<h2 id="usage-2-multi-threaded-validation">Usage 2: Multi-threaded validation</h2>
-<p>Storing the error and missing schemas does not work well in multi-threaded environments, so there is an alternative syntax:</p>
-<pre><code class="lang-javascript">var result = tv4.validateResult(data, schema);</code></pre>
-<p>The result will look something like:</p>
-<pre><code class="lang-json">{
-    &quot;valid&quot;: false,
-    &quot;error&quot;: {...},
-    &quot;missing&quot;: [...]
-}</code></pre>
-<h2 id="usage-3-multiple-errors">Usage 3: Multiple errors</h2>
-<p>Normally, <code>tv4</code> stops when it encounters the first validation error.  However, you can collect an array of validation errors using:</p>
-<pre><code class="lang-javascript">var result = tv4.validateMultiple(data, schema);</code></pre>
-<p>The result will look something like:</p>
-<pre><code class="lang-json">{
-    &quot;valid&quot;: false,
-    &quot;errors&quot;: [
-        {...},
-        ...
-    ],
-    &quot;missing&quot;: [...]
-}</code></pre>
-<h2 id="asynchronous-validation">Asynchronous validation</h2>
-<p>Support for asynchronous validation (where missing schemas are fetched) can be added by including an extra JavaScript file.  Currently, the only version requires jQuery (<code>tv4.async-jquery.js</code>), but the code is very short and should be fairly easy to modify for other libraries (such as MooTools).</p>
-<p>Usage:</p>
-<pre><code class="lang-javascript">tv4.validate(data, schema, function (isValid, validationError) { ... });</code></pre>
-<p><code>validationFailure</code> is simply taken from <code>tv4.error</code>.</p>
-<h2 id="cyclical-javascript-objects">Cyclical JavaScript objects</h2>
-<p>While they don&#39;t occur in proper JSON, JavaScript does support self-referencing objects. Any of the above calls support an optional third argument: <code>checkRecursive</code>. If true, tv4 will handle self-referencing objects properly - this slows down validation slightly, but that&#39;s better than a hanging script.</p>
-<p>Consider this data, notice how both <code>a</code> and <code>b</code> refer to each other:</p>
-<pre><code class="lang-javascript">var a = {};
-var b = { a: a };
-a.b = b;
-var aSchema = { properties: { b: { $ref: &#39;bSchema&#39; }}};
-var bSchema = { properties: { a: { $ref: &#39;aSchema&#39; }}};
-tv4.addSchema(&#39;aSchema&#39;, aSchema);
-tv4.addSchema(&#39;bSchema&#39;, bSchema);</code></pre>
-<p>If the <code>checkRecursive</code> argument were missing, this would throw a &quot;too much recursion&quot; error.</p>
-<p>To enable support for this, pass <code>true</code> as additional argument to any of the regular validation methods:</p>
-<pre><code class="lang-javascript">tv4.validate(a, aSchema, true);
-tv4.validateResult(data, aSchema, true);
-tv4.validateMultiple(data, aSchema, true);</code></pre>
-<h2 id="the-banunknownproperties-flag">The <code>banUnknownProperties</code> flag</h2>
-<p>Sometimes, it is desirable to flag all unknown properties as an error.  This is especially useful during development, to catch typos and the like, even when extra custom-defined properties are allowed.</p>
-<p>As such, tv4 implements <a href="https://github.com/json-schema/json-schema/wiki/ban-unknown-properties-mode-\(v5-proposal\">&quot;ban unknown properties&quot; mode</a>), enabled by a fourth-argument flag:</p>
-<pre><code class="lang-javascript">tv4.validate(data, schema, checkRecursive, true);
-tv4.validateResult(data, schema, checkRecursive, true);
-tv4.validateMultiple(data, schema, checkRecursive, true);</code></pre>
-<h2 id="api">API</h2>
-<p>There are additional api commands available for more complex use-cases:</p>
-<h5 id="addschema-uri-schema-">addSchema(uri, schema)</h5>
-<p>Pre-register a schema for reference by other schema and synchronous validation.</p>
-<pre><code class="lang-js">tv4.addSchema(&#39;http://example.com/schema&#39;, { ... });</code></pre>
-<ul>
-<li><code>uri</code> the uri to identify this schema.</li>
-<li><code>schema</code> the schema object.</li>
-</ul>
-<p>Schemas that have their <code>id</code> property set can be added directly.</p>
-<pre><code class="lang-js">tv4.addSchema({ ... });</code></pre>
-<h5 id="getschema-uri-">getSchema(uri)</h5>
-<p>Return a schema from the cache.</p>
-<ul>
-<li><code>uri</code> the uri of the schema (may contain a <code>#</code> fragment)</li>
-</ul>
-<pre><code class="lang-js">var schema = tv4.getSchema(&#39;http://example.com/schema&#39;);</code></pre>
-<h5 id="getschemamap-">getSchemaMap()</h5>
-<p>Return a shallow copy of the schema cache, mapping schema document URIs to schema objects.</p>
-<pre><code>var map = tv4.getSchemaMap();
-
-var schema = map[uri];</code></pre>
-<h5 id="getschemauris-filter-">getSchemaUris(filter)</h5>
-<p>Return an Array with known schema document URIs.</p>
-<ul>
-<li><code>filter</code> optional RegExp to filter URIs</li>
-</ul>
-<pre><code>var arr = tv4.getSchemaUris();
-
-// optional filter using a RegExp
-var arr = tv4.getSchemaUris(/^https?://example.com/);</code></pre>
-<h5 id="getmissinguris-filter-">getMissingUris(filter)</h5>
-<p>Return an Array with schema document URIs that are used as <code>$ref</code> in known schemas but which currently have no associated schema data.</p>
-<p>Use this in combination with <code>tv4.addSchema(uri, schema)</code> to preload the cache for complete synchronous validation with.</p>
-<ul>
-<li><code>filter</code> optional RegExp to filter URIs</li>
-</ul>
-<pre><code>var arr = tv4.getMissingUris();
-
-// optional filter using a RegExp
-var arr = tv4.getMissingUris(/^https?://example.com/);</code></pre>
-<h5 id="dropschemas-">dropSchemas()</h5>
-<p>Drop all known schema document URIs from the cache.</p>
-<pre><code>tv4.dropSchemas();</code></pre>
-<h5 id="freshapi-">freshApi()</h5>
-<p>Return a new tv4 instance with no shared state.</p>
-<pre><code>var otherTV4 = tv4.freshApi();</code></pre>
-<h5 id="reset-">reset()</h5>
-<p>Manually reset validation status from the simple <code>tv4.validate(data, schema)</code>. Although tv4 will self reset on each validation there are some implementation scenarios where this is useful.</p>
-<pre><code>tv4.reset();</code></pre>
-<h5 id="seterrorreporter-reporter-">setErrorReporter(reporter)</h5>
-<p>Sets a custom error reporter.  This is a function that accepts three arguments, and returns an error message (string):</p>
-<pre><code>tv4.setErrorReporter(function (error, data, schema) {
-    return &quot;Error code: &quot; + error.code;
-});</code></pre>
-<p>The <code>error</code> object already has everything aside from the <code>.message</code> property filled in (so you can use <code>error.params</code>, <code>error.dataPath</code>, <code>error.schemaPath</code> etc.).</p>
-<p>If nothing is returned (or the empty string), then it falls back to the default error reporter.  To remove a custom error reporter, call <code>tv4.setErrorReporter(null)</code>.</p>
-<h5 id="language-code-">language(code)</h5>
-<p>Sets the language used by the default error reporter.</p>
-<ul>
-<li><code>code</code> is a language code, like <code>&#39;en&#39;</code> or <code>&#39;en-gb&#39;</code></li>
-</ul>
-<pre><code>tv4.language(&#39;en-gb&#39;);</code></pre>
-<p>If you specify a multi-level language code (e.g. <code>fr-CH</code>), then it will fall back to the generic version (<code>fr</code>) if needed.</p>
-<h5 id="addlanguage-code-map-">addLanguage(code, map)</h5>
-<p>Add a new template-based language map for the default error reporter (used by <code>tv4.language(code)</code>)</p>
-<ul>
-<li><code>code</code> is new language code</li>
-<li><code>map</code> is an object mapping error IDs or constant names (e.g. <code>103</code> or <code>&quot;NUMBER_MAXIMUM&quot;</code>) to language strings.</li>
-</ul>
-<pre><code>tv4.addLanguage(&#39;fr&#39;, { ... });
-
-// select for use
-tv4.language(&#39;fr&#39;)</code></pre>
-<p>If you register a multi-level language code (e.g. <code>fr-FR</code>), then it will also be registered for plain <code>fr</code> if that does not already exist.</p>
-<h5 id="addformat-format-validationfunction-">addFormat(format, validationFunction)</h5>
-<p>Add a custom format validator. (There are no built-in format validators. Several common ones can be found <a href="https://github.com/ikr/tv4-formats">here</a> though)</p>
-<ul>
-<li><code>format</code> is a string, corresponding to the <code>&quot;format&quot;</code> value in schemas.</li>
-<li><code>validationFunction</code> is a function that either returns:<ul>
-<li><code>null</code> (meaning no error)</li>
-<li>an error string (explaining the reason for failure)</li>
-</ul>
-</li>
-</ul>
-<pre><code>tv4.addFormat(&#39;decimal-digits&#39;, function (data, schema) {
-    if (typeof data === &#39;string&#39; &amp;&amp; !/^[0-9]+$/.test(data)) {
-        return null;
-    }
-    return &quot;must be string of decimal digits&quot;;
-});</code></pre>
-<p>Alternatively, multiple formats can be added at the same time using an object:</p>
-<pre><code>tv4.addFormat({
-    &#39;my-format&#39;: function () {...},
-    &#39;other-format&#39;: function () {...}
-});</code></pre>
-<h5 id="definekeyword-keyword-validationfunction-">defineKeyword(keyword, validationFunction)</h5>
-<p>Add a custom keyword validator.</p>
-<ul>
-<li><code>keyword</code> is a string, corresponding to a schema keyword</li>
-<li><code>validationFunction</code> is a function that either returns:<ul>
-<li><code>null</code> (meaning no error)</li>
-<li>an error string (explaining the reason for failure)</li>
-<li>an error object (containing some of: <code>code</code>/<code>message</code>/<code>dataPath</code>/<code>schemaPath</code>)</li>
-</ul>
-</li>
-</ul>
-<pre><code>tv4.defineKeyword(&#39;my-custom-keyword&#39;, function (data, value, schema) {
-    if (simpleFailure()) {
-        return &quot;Failure&quot;;
-    } else if (detailedFailure()) {
-        return {code: tv4.errorCodes.MY_CUSTOM_CODE, message: {param1: &#39;a&#39;, param2: &#39;b&#39;}};
-    } else {
-        return null;
-    }
-});</code></pre>
-<p><code>schema</code> is the schema upon which the keyword is defined.  In the above example, <code>value === schema[&#39;my-custom-keyword&#39;]</code>.</p>
-<p>If an object is returned from the custom validator, and its <code>message</code> is a string, then that is used as the message result.  If <code>message</code> is an object, then that is used to populate the (localisable) error template.</p>
-<h5 id="defineerror-codename-codenumber-defaultmessage-">defineError(codeName, codeNumber, defaultMessage)</h5>
-<p>Defines a custom error code.</p>
-<ul>
-<li><code>codeName</code> is a string, all-caps underscore separated, e.g. <code>&quot;MY_CUSTOM_ERROR&quot;</code></li>
-<li><code>codeNumber</code> is an integer &gt; 10000, which will be stored in <code>tv4.errorCodes</code> (e.g. <code>tv4.errorCodes.MY_CUSTOM_ERROR</code>)</li>
-<li><code>defaultMessage</code> is an error message template to use (assuming translations have not been provided for this code)</li>
-</ul>
-<p>An example of <code>defaultMessage</code> might be: <code>&quot;Incorrect moon (expected {expected}, got {actual}&quot;</code>).  This is filled out if a custom keyword returns a object <code>message</code> (see above).  Translations will be used, if associated with the correct code name/number.</p>
-<h2 id="demos">Demos</h2>
-<h3 id="basic-usage">Basic usage</h3>
-<div class="content inline-demo" markdown="1" data-demo="demo1">
-<pre class="code" id="demo1">
-var schema = {
-    &quot;items&quot;: {
-        &quot;type&quot;: &quot;boolean&quot;
-    }
-};
-var data1 = [true, false];
-var data2 = [true, 123];
-
-alert(&quot;data 1: &quot; + tv4.validate(data1, schema)); // true
-alert(&quot;data 2: &quot; + tv4.validate(data2, schema)); // false
-alert(&quot;data 2 error: &quot; + JSON.stringify(tv4.error, null, 4));
-</pre>
-</div>
-
-<h3 id="use-of-code-ref-code-">Use of <code>$ref</code></h3>
-<div class="content inline-demo" markdown="1" data-demo="demo2">
-<pre class="code" id="demo2">
-var schema = {
-    &quot;type&quot;: &quot;array&quot;,
-    &quot;items&quot;: {&quot;$ref&quot;: &quot;#&quot;}
-};
-var data1 = [[], [[]]];
-var data2 = [[], [true, []]];
-
-alert(&quot;data 1: &quot; + tv4.validate(data1, schema)); // true
-alert(&quot;data 2: &quot; + tv4.validate(data2, schema)); // false
-</pre>
-</div>
-
-<h3 id="missing-schema">Missing schema</h3>
-<div class="content inline-demo" markdown="1" data-demo="demo3">
-<pre class="code" id="demo3">
-var schema = {
-    &quot;type&quot;: &quot;array&quot;,
-    &quot;items&quot;: {&quot;$ref&quot;: &quot;<a href="http://example.com/schema">http://example.com/schema</a>&quot; }
-};
-var data = [1, 2, 3];
-
-alert(&quot;Valid: &quot; + tv4.validate(data, schema)); // true
-alert(&quot;Missing schemas: &quot; + JSON.stringify(tv4.missing));
-</pre>
-</div>
-
-<h3 id="referencing-remote-schema">Referencing remote schema</h3>
-<div class="content inline-demo" markdown="1" data-demo="demo4">
-<pre class="code" id="demo4">
-tv4.addSchema(&quot;<a href="http://example.com/schema">http://example.com/schema</a>&quot;, {
-    &quot;definitions&quot;: {
-        &quot;arrayItem&quot;: {&quot;type&quot;: &quot;boolean&quot;}
-    }
-});
-var schema = {
-    &quot;type&quot;: &quot;array&quot;,
-    &quot;items&quot;: {&quot;$ref&quot;: &quot;<a href="http://example.com/schema#/definitions/arrayItem">http://example.com/schema#/definitions/arrayItem</a>&quot; }
-};
-var data1 = [true, false, true];
-var data2 = [1, 2, 3];
-
-alert(&quot;data 1: &quot; + tv4.validate(data1, schema)); // true
-alert(&quot;data 2: &quot; + tv4.validate(data2, schema)); // false
-</pre>
-</div>
-
-<h2 id="supported-platforms">Supported platforms</h2>
-<ul>
-<li>Node.js</li>
-<li>All modern browsers</li>
-<li>IE &gt;= 7</li>
-</ul>
-<h2 id="installation">Installation</h2>
-<p>You can manually download <a href="https://raw.github.com/geraintluff/tv4/master/tv4.js"><code>tv4.js</code></a> or the minified <a href="https://raw.github.com/geraintluff/tv4/master/tv4.min.js"><code>tv4.min.js</code></a> and include it in your html to create the global <code>tv4</code> variable.</p>
-<p>Alternately use it as a CommonJS module:</p>
-<pre><code class="lang-js">var tv4 = require(&#39;tv4&#39;);</code></pre>
-<p>or as an AMD module (e.g. with requirejs):</p>
-<pre><code class="lang-js">require(&#39;tv4&#39;, function(tv4){
-  //use tv4 here
-});</code></pre>
-<h4 id="npm">npm</h4>
-<pre><code>$ npm install tv4</code></pre>
-<h4 id="bower">bower</h4>
-<pre><code>$ bower install tv4</code></pre>
-<h4 id="component-io">component.io</h4>
-<pre><code>$ component install geraintluff/tv4</code></pre>
-<h2 id="build-and-test">Build and test</h2>
-<p>You can rebuild and run the node and browser tests using node.js and <a href="http://http://gruntjs.com/">grunt</a>:</p>
-<p>Make sure you have the global grunt cli command:</p>
-<pre><code>$ npm install grunt-cli -g</code></pre>
-<p>Clone the git repos, open a shell in the root folder and install the development dependencies:</p>
-<pre><code>$ npm install</code></pre>
-<p>Rebuild and run the tests:</p>
-<pre><code>$ grunt</code></pre>
-<p>It will run a build and display one Spec-style report for the node.js and two Dot-style reports for both the plain and minified browser tests (via phantomJS). You can also use your own browser to manually run the suites by opening <a href="http://geraintluff.github.io/tv4/test/index.html"><code>test/index.html</code></a> and <a href="http://geraintluff.github.io/tv4/test/index-min.html"><code>test/index-min.html</code></a>.</p>
-<h2 id="contributing">Contributing</h2>
-<p>Pull-requests for fixes and expansions are welcome. Edit the partial files in <code>/source</code> and add your tests in a suitable suite or folder under <code>/test/tests</code> and run <code>grunt</code> to rebuild and run the test suite. Try to maintain an idiomatic coding style and add tests for any new features. It is recommend to discuss big changes in an Issue.</p>
-<p>Do you speak another language? <code>tv4</code> needs internationalisation - please contribute language files to <code>/lang</code>!</p>
-<h2 id="packages-using-tv4">Packages using tv4</h2>
-<ul>
-<li><a href="http://chaijs.com/plugins/chai-json-schema">chai-json-schema</a> is a <a href="http://chaijs.com">Chai Assertion Library</a> plugin to assert values against json-schema.</li>
-<li><a href="http://www.github.com/Bartvds/grunt-tv4">grunt-tv4</a> is a plugin for <a href="http://http://gruntjs.com/">Grunt</a> that uses tv4 to bulk validate json files.</li>
-</ul>
-<h2 id="license">License</h2>
-<p>The code is available as &quot;public domain&quot;, meaning that it is completely free to use, without any restrictions at all.  Read the full license <a href="http://geraintluff.github.com/tv4/LICENSE.txt">here</a>.</p>
-<p>It&#39;s also available under an <a href="http://jsonary.com/LICENSE.txt">MIT license</a>.</p>
-
-</div>
-</body>
-</html>
diff --git a/lang/es.js b/lang/es.js
new file mode 100644
index 0000000..fe936aa
--- /dev/null
+++ b/lang/es.js
@@ -0,0 +1,55 @@
+(function (global) {
+	var lang = {
+		INVALID_TYPE: "Tipo inválido: {type} (se esperaba {expected})",
+		ENUM_MISMATCH: "No hay enum que corresponda con: {value}",
+		ANY_OF_MISSING: "Los datos no corresponden con ningún esquema de \"anyOf\"",
+		ONE_OF_MISSING: "Los datos no corresponden con ningún esquema de \"oneOf\"",
+		ONE_OF_MULTIPLE: "Los datos son válidos contra más de un esquema de \"oneOf\": índices {index1} y {index2}",
+		NOT_PASSED: "Los datos se corresponden con el esquema de \"not\"",
+		// Errores numéricos
+		NUMBER_MULTIPLE_OF: "El valor {value} no es múltiplo de {multipleOf}",
+		NUMBER_MINIMUM: "El {value} es inferior al mínimo {minimum}",
+		NUMBER_MINIMUM_EXCLUSIVE: "El valor {value} es igual que el mínimo exclusivo {minimum}",
+		NUMBER_MAXIMUM: "El valor {value} es mayor que el máximo {maximum}",
+		NUMBER_MAXIMUM_EXCLUSIVE: "El valor {value} es igual que el máximo exclusivo {maximum}",
+		NUMBER_NOT_A_NUMBER: "El valor {value} no es un número válido",
+		// Errores de cadena
+		STRING_LENGTH_SHORT: "La cadena es demasiado corta ({length} chars), mínimo {minimum}",
+		STRING_LENGTH_LONG: "La cadena es demasiado larga ({length} chars), máximo {maximum}",
+		STRING_PATTERN: "La cadena no se corresponde con el patrón: {pattern}",
+		// Errores de objeto
+		OBJECT_PROPERTIES_MINIMUM: "No se han definido suficientes propiedades ({propertyCount}), mínimo {minimum}",
+		OBJECT_PROPERTIES_MAXIMUM: "Se han definido demasiadas propiedades ({propertyCount}), máximo {maximum}",
+		OBJECT_REQUIRED: "Falta la propiedad requerida: {key}",
+		OBJECT_ADDITIONAL_PROPERTIES: "No se permiten propiedades adicionales",
+		OBJECT_DEPENDENCY_KEY: "Dependencia fallida - debe existir la clave: {missing} (debido a la clave: {key})",
+		// Errores de array
+		ARRAY_LENGTH_SHORT: "Array demasiado corto ({length}), mínimo {minimum}",
+		ARRAY_LENGTH_LONG: "Array demasiado largo ({length}), máximo {maximum}",
+		ARRAY_UNIQUE: "Elementos de array no únicos (índices {match1} y {match2})",
+		ARRAY_ADDITIONAL_ITEMS: "Elementos adicionales no permitidos",
+		// Errores de formato
+		FORMAT_CUSTOM: "Fallo en la validación del formato ({message})",
+		KEYWORD_CUSTOM: "Fallo en la palabra clave: {key} ({message})",
+		// Estructura de esquema
+		CIRCULAR_REFERENCE: "Referencias $refs circulares: {urls}",
+		// Opciones de validación no estándar
+		UNKNOWN_PROPERTY: "Propiedad desconocida (no existe en el esquema)"
+	};
+
+	if (typeof define === 'function' && define.amd) {
+		// AMD. Register as an anonymous module.
+		define(['../tv4'], function(tv4) {
+			tv4.addLanguage('es', lang);
+			return tv4;
+		});
+	} else if (typeof module !== 'undefined' && module.exports){
+		// CommonJS. Define export.
+		var tv4 = require('../tv4');
+		tv4.addLanguage('es', lang);
+		module.exports = tv4;
+	} else {
+		// Browser globals
+		global.tv4.addLanguage('es', lang);
+	}
+})(this);
diff --git a/lang/zh-TW.js b/lang/zh-TW.js
new file mode 100644
index 0000000..cf03c4f
--- /dev/null
+++ b/lang/zh-TW.js
@@ -0,0 +1,55 @@
+(function (global) {
+  var lang = {
+    INVALID_TYPE: "無效類型:{type} (須為 {expected})",
+    ENUM_MISMATCH: "{value} 並非可用值之一",
+    ANY_OF_MISSING: "資料不符合任何 \"anyOf\" 模式",
+    ONE_OF_MISSING: "資料不符合任何 \"oneOf\" 模式",
+    ONE_OF_MULTIPLE: "資料同時符合第 {index1} 和第 {index2} 個 \"oneOf\" 模式",
+    NOT_PASSED: "資料不應符合 \"not\" 模式",
+    // Numeric errors
+    NUMBER_MULTIPLE_OF: "數值 {value} 並非 {multipleOf} 的倍數",
+    NUMBER_MINIMUM: "數值 {value} 必須是 {minimum} 或以上",
+    NUMBER_MINIMUM_EXCLUSIVE: "數值 {value} 必須是 {minimum} 以上",
+    NUMBER_MAXIMUM: "數值 {value} 必須是 {maximum} 或以下",
+    NUMBER_MAXIMUM_EXCLUSIVE: "數值 {value} 必須是 {maximum} 以下",
+    NUMBER_NOT_A_NUMBER: "{value} 並非數字",
+    // String errors
+    STRING_LENGTH_SHORT: "字串過短 ({length} 字), 最少 {minimum} 字",
+    STRING_LENGTH_LONG: "字串過長 ({length} 字), 最多 {maximum} 字",
+    STRING_PATTERN: "字串不符合表達式 {pattern}",
+    // Object errors
+    OBJECT_PROPERTIES_MINIMUM: "屬性不足 {minimum} 個 (現在 {propertyCount} 個)",
+    OBJECT_PROPERTIES_MAXIMUM: "屬性超過 {maximum} 個 (現在 {propertyCount} 個)",
+    OBJECT_REQUIRED: "缺少必要屬性: {key}",
+    OBJECT_ADDITIONAL_PROPERTIES: "禁止額外屬性",
+    OBJECT_DEPENDENCY_KEY: "{key} 須要屬性 {missing}",
+    // Array errors
+    ARRAY_LENGTH_SHORT: "陣列長度 {length} 不足 {minimum}",
+    ARRAY_LENGTH_LONG: "陣列長度 {length} 超過 {maximum}",
+    ARRAY_UNIQUE: "陣列元素 {match1} 和 {match2} 不能重複",
+    ARRAY_ADDITIONAL_ITEMS: "禁止額外陣列元素",
+    // Format errors
+    FORMAT_CUSTOM: "自訂格式無效 ({message})",
+    KEYWORD_CUSTOM: "自訂關鍵字 {key} 無效 ({message})",
+    // Schema structure
+    CIRCULAR_REFERENCE: "循環引用 ($refs): {urls}",
+    // Non-standard validation options
+    UNKNOWN_PROPERTY: "不明屬性 (不在 schema 中)"
+  };
+
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module.
+    define(['../tv4'], function(tv4) {
+      tv4.addLanguage('zh-TW', lang);
+      return tv4;
+    });
+  } else if (typeof module !== 'undefined' && module.exports){
+    // CommonJS. Define export.
+    var tv4 = require('../tv4');
+    tv4.addLanguage('zh-TW', lang);
+    module.exports = tv4;
+  } else {
+    // Browser globals
+    global.tv4.addLanguage('zh-TW', lang);
+  }
+})(this);
diff --git a/package.json b/package.json
index f308d29..9014e49 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
     "type": "git",
     "url": "https://github.com/geraintluff/tv4.git"
   },
-  "license:": [
+  "license": [
     {
       "type": "Public Domain",
       "url": "http://geraintluff.github.io/tv4/LICENSE.txt"
diff --git a/source/_footer.js b/source/_footer.js
deleted file mode 100644
index 57d3e48..0000000
--- a/source/_footer.js
+++ /dev/null
@@ -1 +0,0 @@
-}));
\ No newline at end of file
diff --git a/source/_header.js b/source/_header.js
deleted file mode 100644
index b809bb1..0000000
--- a/source/_header.js
+++ /dev/null
@@ -1,12 +0,0 @@
-(function (global, factory) {
-  if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module.
-    define([], factory);
-  } else if (typeof module !== 'undefined' && module.exports){
-    // CommonJS. Define export.
-    module.exports = factory();
-  } else {
-    // Browser globals
-    global.tv4 = factory();
-  }
-}(this, function () {
diff --git a/source/_polyfill.js b/source/_polyfill.js
deleted file mode 100644
index 47af982..0000000
--- a/source/_polyfill.js
+++ /dev/null
@@ -1,110 +0,0 @@
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2Fkeys
-if (!Object.keys) {
-	Object.keys = (function () {
-		var hasOwnProperty = Object.prototype.hasOwnProperty,
-			hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
-			dontEnums = [
-				'toString',
-				'toLocaleString',
-				'valueOf',
-				'hasOwnProperty',
-				'isPrototypeOf',
-				'propertyIsEnumerable',
-				'constructor'
-			],
-			dontEnumsLength = dontEnums.length;
-
-		return function (obj) {
-			if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) {
-				throw new TypeError('Object.keys called on non-object');
-			}
-
-			var result = [];
-
-			for (var prop in obj) {
-				if (hasOwnProperty.call(obj, prop)) {
-					result.push(prop);
-				}
-			}
-
-			if (hasDontEnumBug) {
-				for (var i=0; i < dontEnumsLength; i++) {
-					if (hasOwnProperty.call(obj, dontEnums[i])) {
-						result.push(dontEnums[i]);
-					}
-				}
-			}
-			return result;
-		};
-	})();
-}
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
-if (!Object.create) {
-	Object.create = (function(){
-		function F(){}
-
-		return function(o){
-			if (arguments.length !== 1) {
-				throw new Error('Object.create implementation only accepts one parameter.');
-			}
-			F.prototype = o;
-			return new F();
-		};
-	})();
-}
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2FisArray
-if(!Array.isArray) {
-	Array.isArray = function (vArg) {
-		return Object.prototype.toString.call(vArg) === "[object Array]";
-	};
-}
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2FindexOf
-if (!Array.prototype.indexOf) {
-	Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
-		if (this === null) {
-			throw new TypeError();
-		}
-		var t = Object(this);
-		var len = t.length >>> 0;
-
-		if (len === 0) {
-			return -1;
-		}
-		var n = 0;
-		if (arguments.length > 1) {
-			n = Number(arguments[1]);
-			if (n !== n) { // shortcut for verifying if it's NaN
-				n = 0;
-			} else if (n !== 0 && n !== Infinity && n !== -Infinity) {
-				n = (n > 0 || -1) * Math.floor(Math.abs(n));
-			}
-		}
-		if (n >= len) {
-			return -1;
-		}
-		var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
-		for (; k < len; k++) {
-			if (k in t && t[k] === searchElement) {
-				return k;
-			}
-		}
-		return -1;
-	};
-}
-
-// Grungey Object.isFrozen hack
-if (!Object.isFrozen) {
-	Object.isFrozen = function (obj) {
-		var key = "tv4_test_frozen_key";
-		while (obj.hasOwnProperty(key)) {
-			key += Math.random();
-		}
-		try {
-			obj[key] = true;
-			delete obj[key];
-			return false;
-		} catch (e) {
-			return true;
-		}
-	};
-}
\ No newline at end of file
diff --git a/source/api.js b/source/api.js
deleted file mode 100644
index 3fff284..0000000
--- a/source/api.js
+++ /dev/null
@@ -1,306 +0,0 @@
-var ErrorCodes = {
-	INVALID_TYPE: 0,
-	ENUM_MISMATCH: 1,
-	ANY_OF_MISSING: 10,
-	ONE_OF_MISSING: 11,
-	ONE_OF_MULTIPLE: 12,
-	NOT_PASSED: 13,
-	// Numeric errors
-	NUMBER_MULTIPLE_OF: 100,
-	NUMBER_MINIMUM: 101,
-	NUMBER_MINIMUM_EXCLUSIVE: 102,
-	NUMBER_MAXIMUM: 103,
-	NUMBER_MAXIMUM_EXCLUSIVE: 104,
-	NUMBER_NOT_A_NUMBER: 105,
-	// String errors
-	STRING_LENGTH_SHORT: 200,
-	STRING_LENGTH_LONG: 201,
-	STRING_PATTERN: 202,
-	// Object errors
-	OBJECT_PROPERTIES_MINIMUM: 300,
-	OBJECT_PROPERTIES_MAXIMUM: 301,
-	OBJECT_REQUIRED: 302,
-	OBJECT_ADDITIONAL_PROPERTIES: 303,
-	OBJECT_DEPENDENCY_KEY: 304,
-	// Array errors
-	ARRAY_LENGTH_SHORT: 400,
-	ARRAY_LENGTH_LONG: 401,
-	ARRAY_UNIQUE: 402,
-	ARRAY_ADDITIONAL_ITEMS: 403,
-	// Custom/user-defined errors
-	FORMAT_CUSTOM: 500,
-	KEYWORD_CUSTOM: 501,
-	// Schema structure
-	CIRCULAR_REFERENCE: 600,
-	// Non-standard validation options
-	UNKNOWN_PROPERTY: 1000
-};
-var ErrorCodeLookup = {};
-for (var key in ErrorCodes) {
-	ErrorCodeLookup[ErrorCodes[key]] = key;
-}
-var ErrorMessagesDefault = {
-	INVALID_TYPE: "Invalid type: {type} (expected {expected})",
-	ENUM_MISMATCH: "No enum match for: {value}",
-	ANY_OF_MISSING: "Data does not match any schemas from \"anyOf\"",
-	ONE_OF_MISSING: "Data does not match any schemas from \"oneOf\"",
-	ONE_OF_MULTIPLE: "Data is valid against more than one schema from \"oneOf\": indices {index1} and {index2}",
-	NOT_PASSED: "Data matches schema from \"not\"",
-	// Numeric errors
-	NUMBER_MULTIPLE_OF: "Value {value} is not a multiple of {multipleOf}",
-	NUMBER_MINIMUM: "Value {value} is less than minimum {minimum}",
-	NUMBER_MINIMUM_EXCLUSIVE: "Value {value} is equal to exclusive minimum {minimum}",
-	NUMBER_MAXIMUM: "Value {value} is greater than maximum {maximum}",
-	NUMBER_MAXIMUM_EXCLUSIVE: "Value {value} is equal to exclusive maximum {maximum}",
-	NUMBER_NOT_A_NUMBER: "Value {value} is not a valid number",
-	// String errors
-	STRING_LENGTH_SHORT: "String is too short ({length} chars), minimum {minimum}",
-	STRING_LENGTH_LONG: "String is too long ({length} chars), maximum {maximum}",
-	STRING_PATTERN: "String does not match pattern: {pattern}",
-	// Object errors
-	OBJECT_PROPERTIES_MINIMUM: "Too few properties defined ({propertyCount}), minimum {minimum}",
-	OBJECT_PROPERTIES_MAXIMUM: "Too many properties defined ({propertyCount}), maximum {maximum}",
-	OBJECT_REQUIRED: "Missing required property: {key}",
-	OBJECT_ADDITIONAL_PROPERTIES: "Additional properties not allowed",
-	OBJECT_DEPENDENCY_KEY: "Dependency failed - key must exist: {missing} (due to key: {key})",
-	// Array errors
-	ARRAY_LENGTH_SHORT: "Array is too short ({length}), minimum {minimum}",
-	ARRAY_LENGTH_LONG: "Array is too long ({length}), maximum {maximum}",
-	ARRAY_UNIQUE: "Array items are not unique (indices {match1} and {match2})",
-	ARRAY_ADDITIONAL_ITEMS: "Additional items not allowed",
-	// Format errors
-	FORMAT_CUSTOM: "Format validation failed ({message})",
-	KEYWORD_CUSTOM: "Keyword failed: {key} ({message})",
-	// Schema structure
-	CIRCULAR_REFERENCE: "Circular $refs: {urls}",
-	// Non-standard validation options
-	UNKNOWN_PROPERTY: "Unknown property (not in schema)"
-};
-
-function ValidationError(code, params, dataPath, schemaPath, subErrors) {
-	Error.call(this);
-	if (code === undefined) {
-		throw new Error ("No error code supplied: " + schemaPath);
-	}
-	this.message = '';
-	this.params = params;
-	this.code = code;
-	this.dataPath = dataPath || "";
-	this.schemaPath = schemaPath || "";
-	this.subErrors = subErrors || null;
-
-	var err = new Error(this.message);
-	this.stack = err.stack || err.stacktrace;
-	if (!this.stack) {
-		try {
-			throw err;
-		}
-		catch(err) {
-			this.stack = err.stack || err.stacktrace;
-		}
-	}
-}
-ValidationError.prototype = Object.create(Error.prototype);
-ValidationError.prototype.constructor = ValidationError;
-ValidationError.prototype.name = 'ValidationError';
-
-ValidationError.prototype.prefixWith = function (dataPrefix, schemaPrefix) {
-	if (dataPrefix !== null) {
-		dataPrefix = dataPrefix.replace(/~/g, "~0").replace(/\//g, "~1");
-		this.dataPath = "/" + dataPrefix + this.dataPath;
-	}
-	if (schemaPrefix !== null) {
-		schemaPrefix = schemaPrefix.replace(/~/g, "~0").replace(/\//g, "~1");
-		this.schemaPath = "/" + schemaPrefix + this.schemaPath;
-	}
-	if (this.subErrors !== null) {
-		for (var i = 0; i < this.subErrors.length; i++) {
-			this.subErrors[i].prefixWith(dataPrefix, schemaPrefix);
-		}
-	}
-	return this;
-};
-
-function isTrustedUrl(baseUrl, testUrl) {
-	if(testUrl.substring(0, baseUrl.length) === baseUrl){
-		var remainder = testUrl.substring(baseUrl.length);
-		if ((testUrl.length > 0 && testUrl.charAt(baseUrl.length - 1) === "/")
-			|| remainder.charAt(0) === "#"
-			|| remainder.charAt(0) === "?") {
-			return true;
-		}
-	}
-	return false;
-}
-
-var languages = {};
-function createApi(language) {
-	var globalContext = new ValidatorContext();
-	var currentLanguage;
-	var customErrorReporter;
-	var api = {
-		setErrorReporter: function (reporter) {
-			if (typeof reporter === 'string') {
-				return this.language(reporter);
-			}
-			customErrorReporter = reporter;
-			return true;
-		},
-		addFormat: function () {
-			globalContext.addFormat.apply(globalContext, arguments);
-		},
-		language: function (code) {
-			if (!code) {
-				return currentLanguage;
-			}
-			if (!languages[code]) {
-				code = code.split('-')[0]; // fall back to base language
-			}
-			if (languages[code]) {
-				currentLanguage = code;
-				return code; // so you can tell if fall-back has happened
-			}
-			return false;
-		},
-		addLanguage: function (code, messageMap) {
-			var key;
-			for (key in ErrorCodes) {
-				if (messageMap[key] && !messageMap[ErrorCodes[key]]) {
-					messageMap[ErrorCodes[key]] = messageMap[key];
-				}
-			}
-			var rootCode = code.split('-')[0];
-			if (!languages[rootCode]) { // use for base language if not yet defined
-				languages[code] = messageMap;
-				languages[rootCode] = messageMap;
-			} else {
-				languages[code] = Object.create(languages[rootCode]);
-				for (key in messageMap) {
-					if (typeof languages[rootCode][key] === 'undefined') {
-						languages[rootCode][key] = messageMap[key];
-					}
-					languages[code][key] = messageMap[key];
-				}
-			}
-			return this;
-		},
-		freshApi: function (language) {
-			var result = createApi();
-			if (language) {
-				result.language(language);
-			}
-			return result;
-		},
-		validate: function (data, schema, checkRecursive, banUnknownProperties) {
-			var def = defaultErrorReporter(currentLanguage);
-			var errorReporter = customErrorReporter ? function (error, data, schema) {
-				return customErrorReporter(error, data, schema) || def(error, data, schema);
-			} : def;
-			var context = new ValidatorContext(globalContext, false, errorReporter, checkRecursive, banUnknownProperties);
-			if (typeof schema === "string") {
-				schema = {"$ref": schema};
-			}
-			context.addSchema("", schema);
-			var error = context.validateAll(data, schema, null, null, "");
-			if (!error && banUnknownProperties) {
-				error = context.banUnknownProperties(data, schema);
-			}
-			this.error = error;
-			this.missing = context.missing;
-			this.valid = (error === null);
-			return this.valid;
-		},
-		validateResult: function () {
-			var result = {};
-			this.validate.apply(result, arguments);
-			return result;
-		},
-		validateMultiple: function (data, schema, checkRecursive, banUnknownProperties) {
-			var def = defaultErrorReporter(currentLanguage);
-			var errorReporter = customErrorReporter ? function (error, data, schema) {
-				return customErrorReporter(error, data, schema) || def(error, data, schema);
-			} : def;
-			var context = new ValidatorContext(globalContext, true, errorReporter, checkRecursive, banUnknownProperties);
-			if (typeof schema === "string") {
-				schema = {"$ref": schema};
-			}
-			context.addSchema("", schema);
-			context.validateAll(data, schema, null, null, "");
-			if (banUnknownProperties) {
-				context.banUnknownProperties(data, schema);
-			}
-			var result = {};
-			result.errors = context.errors;
-			result.missing = context.missing;
-			result.valid = (result.errors.length === 0);
-			return result;
-		},
-		addSchema: function () {
-			return globalContext.addSchema.apply(globalContext, arguments);
-		},
-		getSchema: function () {
-			return globalContext.getSchema.apply(globalContext, arguments);
-		},
-		getSchemaMap: function () {
-			return globalContext.getSchemaMap.apply(globalContext, arguments);
-		},
-		getSchemaUris: function () {
-			return globalContext.getSchemaUris.apply(globalContext, arguments);
-		},
-		getMissingUris: function () {
-			return globalContext.getMissingUris.apply(globalContext, arguments);
-		},
-		dropSchemas: function () {
-			globalContext.dropSchemas.apply(globalContext, arguments);
-		},
-		defineKeyword: function () {
-			globalContext.defineKeyword.apply(globalContext, arguments);
-		},
-		defineError: function (codeName, codeNumber, defaultMessage) {
-			if (typeof codeName !== 'string' || !/^[A-Z]+(_[A-Z]+)*$/.test(codeName)) {
-				throw new Error('Code name must be a string in UPPER_CASE_WITH_UNDERSCORES');
-			}
-			if (typeof codeNumber !== 'number' || codeNumber%1 !== 0 || codeNumber < 10000) {
-				throw new Error('Code number must be an integer > 10000');
-			}
-			if (typeof ErrorCodes[codeName] !== 'undefined') {
-				throw new Error('Error already defined: ' + codeName + ' as ' + ErrorCodes[codeName]);
-			}
-			if (typeof ErrorCodeLookup[codeNumber] !== 'undefined') {
-				throw new Error('Error code already used: ' + ErrorCodeLookup[codeNumber] + ' as ' + codeNumber);
-			}
-			ErrorCodes[codeName] = codeNumber;
-			ErrorCodeLookup[codeNumber] = codeName;
-			ErrorMessagesDefault[codeName] = ErrorMessagesDefault[codeNumber] = defaultMessage;
-			for (var langCode in languages) {
-				var language = languages[langCode];
-				if (language[codeName]) {
-					language[codeNumber] = language[codeNumber] || language[codeName];
-				}
-			}
-		},
-		reset: function () {
-			globalContext.reset();
-			this.error = null;
-			this.missing = [];
-			this.valid = true;
-		},
-		missing: [],
-		error: null,
-		valid: true,
-		normSchema: normSchema,
-		resolveUrl: resolveUrl,
-		getDocumentUri: getDocumentUri,
-		errorCodes: ErrorCodes
-	};
-	api.language(language || 'en');
-	return api;
-}
-
-var tv4 = createApi();
-tv4.addLanguage('en-gb', ErrorMessagesDefault);
-
-//legacy property
-tv4.tv4 = tv4;
-
-return tv4; // used by _header.js to globalise.
diff --git a/source/array.js b/source/array.js
deleted file mode 100644
index 9d9c073..0000000
--- a/source/array.js
+++ /dev/null
@@ -1,80 +0,0 @@
-ValidatorContext.prototype.validateArray = function validateArray(data, schema, dataPointerPath) {
-	if (!Array.isArray(data)) {
-		return null;
-	}
-	return this.validateArrayLength(data, schema, dataPointerPath)
-		|| this.validateArrayUniqueItems(data, schema, dataPointerPath)
-		|| this.validateArrayItems(data, schema, dataPointerPath)
-		|| null;
-};
-
-ValidatorContext.prototype.validateArrayLength = function validateArrayLength(data, schema) {
-	var error;
-	if (schema.minItems !== undefined) {
-		if (data.length < schema.minItems) {
-			error = this.createError(ErrorCodes.ARRAY_LENGTH_SHORT, {length: data.length, minimum: schema.minItems}, '', '/minItems', null, data, schema);
-			if (this.handleError(error)) {
-				return error;
-			}
-		}
-	}
-	if (schema.maxItems !== undefined) {
-		if (data.length > schema.maxItems) {
-			error = this.createError(ErrorCodes.ARRAY_LENGTH_LONG, {length: data.length, maximum: schema.maxItems}, '', '/maxItems', null, data, schema);
-			if (this.handleError(error)) {
-				return error;
-			}
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateArrayUniqueItems = function validateArrayUniqueItems(data, schema) {
-	if (schema.uniqueItems) {
-		for (var i = 0; i < data.length; i++) {
-			for (var j = i + 1; j < data.length; j++) {
-				if (recursiveCompare(data[i], data[j])) {
-					var error = this.createError(ErrorCodes.ARRAY_UNIQUE, {match1: i, match2: j}, '', '/uniqueItems', null, data, schema);
-					if (this.handleError(error)) {
-						return error;
-					}
-				}
-			}
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateArrayItems = function validateArrayItems(data, schema, dataPointerPath) {
-	if (schema.items === undefined) {
-		return null;
-	}
-	var error, i;
-	if (Array.isArray(schema.items)) {
-		for (i = 0; i < data.length; i++) {
-			if (i < schema.items.length) {
-				if (error = this.validateAll(data[i], schema.items[i], [i], ["items", i], dataPointerPath + "/" + i)) {
-					return error;
-				}
-			} else if (schema.additionalItems !== undefined) {
-				if (typeof schema.additionalItems === "boolean") {
-					if (!schema.additionalItems) {
-						error = (this.createError(ErrorCodes.ARRAY_ADDITIONAL_ITEMS, {}, '/' + i, '/additionalItems', null, data, schema));
-						if (this.handleError(error)) {
-							return error;
-						}
-					}
-				} else if (error = this.validateAll(data[i], schema.additionalItems, [i], ["additionalItems"], dataPointerPath + "/" + i)) {
-					return error;
-				}
-			}
-		}
-	} else {
-		for (i = 0; i < data.length; i++) {
-			if (error = this.validateAll(data[i], schema.items, [i], ["items"], dataPointerPath + "/" + i)) {
-				return error;
-			}
-		}
-	}
-	return null;
-};
diff --git a/source/basic.js b/source/basic.js
deleted file mode 100644
index a13b46e..0000000
--- a/source/basic.js
+++ /dev/null
@@ -1,47 +0,0 @@
-ValidatorContext.prototype.validateBasic = function validateBasic(data, schema, dataPointerPath) {
-	var error;
-	if (error = this.validateType(data, schema, dataPointerPath)) {
-		return error.prefixWith(null, "type");
-	}
-	if (error = this.validateEnum(data, schema, dataPointerPath)) {
-		return error.prefixWith(null, "type");
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateType = function validateType(data, schema) {
-	if (schema.type === undefined) {
-		return null;
-	}
-	var dataType = typeof data;
-	if (data === null) {
-		dataType = "null";
-	} else if (Array.isArray(data)) {
-		dataType = "array";
-	}
-	var allowedTypes = schema.type;
-	if (!Array.isArray(allowedTypes)) {
-		allowedTypes = [allowedTypes];
-	}
-
-	for (var i = 0; i < allowedTypes.length; i++) {
-		var type = allowedTypes[i];
-		if (type === dataType || (type === "integer" && dataType === "number" && (data % 1 === 0))) {
-			return null;
-		}
-	}
-	return this.createError(ErrorCodes.INVALID_TYPE, {type: dataType, expected: allowedTypes.join("/")}, '', '', null, data, schema);
-};
-
-ValidatorContext.prototype.validateEnum = function validateEnum(data, schema) {
-	if (schema["enum"] === undefined) {
-		return null;
-	}
-	for (var i = 0; i < schema["enum"].length; i++) {
-		var enumVal = schema["enum"][i];
-		if (recursiveCompare(data, enumVal)) {
-			return null;
-		}
-	}
-	return this.createError(ErrorCodes.ENUM_MISMATCH, {value: (typeof JSON !== 'undefined') ? JSON.stringify(data) : data}, '', '', null, data, schema);
-};
diff --git a/source/combinations.js b/source/combinations.js
deleted file mode 100644
index d29de4d..0000000
--- a/source/combinations.js
+++ /dev/null
@@ -1,161 +0,0 @@
-ValidatorContext.prototype.validateCombinations = function validateCombinations(data, schema, dataPointerPath) {
-	return this.validateAllOf(data, schema, dataPointerPath)
-		|| this.validateAnyOf(data, schema, dataPointerPath)
-		|| this.validateOneOf(data, schema, dataPointerPath)
-		|| this.validateNot(data, schema, dataPointerPath)
-		|| null;
-};
-
-ValidatorContext.prototype.validateAllOf = function validateAllOf(data, schema, dataPointerPath) {
-	if (schema.allOf === undefined) {
-		return null;
-	}
-	var error;
-	for (var i = 0; i < schema.allOf.length; i++) {
-		var subSchema = schema.allOf[i];
-		if (error = this.validateAll(data, subSchema, [], ["allOf", i], dataPointerPath)) {
-			return error;
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateAnyOf = function validateAnyOf(data, schema, dataPointerPath) {
-	if (schema.anyOf === undefined) {
-		return null;
-	}
-	var errors = [];
-	var startErrorCount = this.errors.length;
-	var oldUnknownPropertyPaths, oldKnownPropertyPaths;
-	if (this.trackUnknownProperties) {
-		oldUnknownPropertyPaths = this.unknownPropertyPaths;
-		oldKnownPropertyPaths = this.knownPropertyPaths;
-	}
-	var errorAtEnd = true;
-	for (var i = 0; i < schema.anyOf.length; i++) {
-		if (this.trackUnknownProperties) {
-			this.unknownPropertyPaths = {};
-			this.knownPropertyPaths = {};
-		}
-		var subSchema = schema.anyOf[i];
-
-		var errorCount = this.errors.length;
-		var error = this.validateAll(data, subSchema, [], ["anyOf", i], dataPointerPath);
-
-		if (error === null && errorCount === this.errors.length) {
-			this.errors = this.errors.slice(0, startErrorCount);
-
-			if (this.trackUnknownProperties) {
-				for (var knownKey in this.knownPropertyPaths) {
-					oldKnownPropertyPaths[knownKey] = true;
-					delete oldUnknownPropertyPaths[knownKey];
-				}
-				for (var unknownKey in this.unknownPropertyPaths) {
-					if (!oldKnownPropertyPaths[unknownKey]) {
-						oldUnknownPropertyPaths[unknownKey] = true;
-					}
-				}
-				// We need to continue looping so we catch all the property definitions, but we don't want to return an error
-				errorAtEnd = false;
-				continue;
-			}
-
-			return null;
-		}
-		if (error) {
-			errors.push(error.prefixWith(null, "" + i).prefixWith(null, "anyOf"));
-		}
-	}
-	if (this.trackUnknownProperties) {
-		this.unknownPropertyPaths = oldUnknownPropertyPaths;
-		this.knownPropertyPaths = oldKnownPropertyPaths;
-	}
-	if (errorAtEnd) {
-		errors = errors.concat(this.errors.slice(startErrorCount));
-		this.errors = this.errors.slice(0, startErrorCount);
-		return this.createError(ErrorCodes.ANY_OF_MISSING, {}, "", "/anyOf", errors, data, schema);
-	}
-};
-
-ValidatorContext.prototype.validateOneOf = function validateOneOf(data, schema, dataPointerPath) {
-	if (schema.oneOf === undefined) {
-		return null;
-	}
-	var validIndex = null;
-	var errors = [];
-	var startErrorCount = this.errors.length;
-	var oldUnknownPropertyPaths, oldKnownPropertyPaths;
-	if (this.trackUnknownProperties) {
-		oldUnknownPropertyPaths = this.unknownPropertyPaths;
-		oldKnownPropertyPaths = this.knownPropertyPaths;
-	}
-	for (var i = 0; i < schema.oneOf.length; i++) {
-		if (this.trackUnknownProperties) {
-			this.unknownPropertyPaths = {};
-			this.knownPropertyPaths = {};
-		}
-		var subSchema = schema.oneOf[i];
-
-		var errorCount = this.errors.length;
-		var error = this.validateAll(data, subSchema, [], ["oneOf", i], dataPointerPath);
-
-		if (error === null && errorCount === this.errors.length) {
-			if (validIndex === null) {
-				validIndex = i;
-			} else {
-				this.errors = this.errors.slice(0, startErrorCount);
-				return this.createError(ErrorCodes.ONE_OF_MULTIPLE, {index1: validIndex, index2: i}, "", "/oneOf", null, data, schema);
-			}
-			if (this.trackUnknownProperties) {
-				for (var knownKey in this.knownPropertyPaths) {
-					oldKnownPropertyPaths[knownKey] = true;
-					delete oldUnknownPropertyPaths[knownKey];
-				}
-				for (var unknownKey in this.unknownPropertyPaths) {
-					if (!oldKnownPropertyPaths[unknownKey]) {
-						oldUnknownPropertyPaths[unknownKey] = true;
-					}
-				}
-			}
-		} else if (error) {
-			errors.push(error);
-		}
-	}
-	if (this.trackUnknownProperties) {
-		this.unknownPropertyPaths = oldUnknownPropertyPaths;
-		this.knownPropertyPaths = oldKnownPropertyPaths;
-	}
-	if (validIndex === null) {
-		errors = errors.concat(this.errors.slice(startErrorCount));
-		this.errors = this.errors.slice(0, startErrorCount);
-		return this.createError(ErrorCodes.ONE_OF_MISSING, {}, "", "/oneOf", errors, data, schema);
-	} else {
-		this.errors = this.errors.slice(0, startErrorCount);
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateNot = function validateNot(data, schema, dataPointerPath) {
-	if (schema.not === undefined) {
-		return null;
-	}
-	var oldErrorCount = this.errors.length;
-	var oldUnknownPropertyPaths, oldKnownPropertyPaths;
-	if (this.trackUnknownProperties) {
-		oldUnknownPropertyPaths = this.unknownPropertyPaths;
-		oldKnownPropertyPaths = this.knownPropertyPaths;
-		this.unknownPropertyPaths = {};
-		this.knownPropertyPaths = {};
-	}
-	var error = this.validateAll(data, schema.not, null, null, dataPointerPath);
-	var notErrors = this.errors.slice(oldErrorCount);
-	this.errors = this.errors.slice(0, oldErrorCount);
-	if (this.trackUnknownProperties) {
-		this.unknownPropertyPaths = oldUnknownPropertyPaths;
-		this.knownPropertyPaths = oldKnownPropertyPaths;
-	}
-	if (error === null && notErrors.length === 0) {
-		return this.createError(ErrorCodes.NOT_PASSED, {}, "", "/not", null, data, schema);
-	}
-	return null;
-};
diff --git a/source/error-reporter.js b/source/error-reporter.js
deleted file mode 100644
index 782012f..0000000
--- a/source/error-reporter.js
+++ /dev/null
@@ -1,18 +0,0 @@
-function defaultErrorReporter(language) {
-	language = language || 'en';
-
-	var errorMessages = languages[language];
-
-	return function (error) {
-		var messageTemplate = errorMessages[error.code] || ErrorMessagesDefault[error.code];
-		if (typeof messageTemplate !== 'string') {
-			return "Unknown error code " + error.code + ": " + JSON.stringify(error.messageParams);
-		}
-		var messageParams = error.params;
-		// Adapted from Crockford's supplant()
-		return messageTemplate.replace(/\{([^{}]*)\}/g, function (whole, varName) {
-			var subValue = messageParams[varName];
-			return typeof subValue === 'string' || typeof subValue === 'number' ? subValue : whole;
-		});
-	};
-}
diff --git a/source/hypermedia.js b/source/hypermedia.js
deleted file mode 100644
index 920ab43..0000000
--- a/source/hypermedia.js
+++ /dev/null
@@ -1,26 +0,0 @@
-ValidatorContext.prototype.validateHypermedia = function validateCombinations(data, schema, dataPointerPath) {
-	if (!schema.links) {
-		return null;
-	}
-	var error;
-	for (var i = 0; i < schema.links.length; i++) {
-		var ldo = schema.links[i];
-		if (ldo.rel === "describedby") {
-			var template = new UriTemplate(ldo.href);
-			var allPresent = true;
-			for (var j = 0; j < template.varNames.length; j++) {
-				if (!(template.varNames[j] in data)) {
-					allPresent = false;
-					break;
-				}
-			}
-			if (allPresent) {
-				var schemaUrl = template.fillFromObject(data);
-				var subSchema = {"$ref": schemaUrl};
-				if (error = this.validateAll(data, subSchema, [], ["links", i], dataPointerPath)) {
-					return error;
-				}
-			}
-		}
-	}
-};
diff --git a/source/normalise-schema.js b/source/normalise-schema.js
deleted file mode 100644
index 452b718..0000000
--- a/source/normalise-schema.js
+++ /dev/null
@@ -1,24 +0,0 @@
-function normSchema(schema, baseUri) {
-	if (schema && typeof schema === "object") {
-		if (baseUri === undefined) {
-			baseUri = schema.id;
-		} else if (typeof schema.id === "string") {
-			baseUri = resolveUrl(baseUri, schema.id);
-			schema.id = baseUri;
-		}
-		if (Array.isArray(schema)) {
-			for (var i = 0; i < schema.length; i++) {
-				normSchema(schema[i], baseUri);
-			}
-		} else {
-			if (typeof schema['$ref'] === "string") {
-				schema['$ref'] = resolveUrl(baseUri, schema['$ref']);
-			}
-			for (var key in schema) {
-				if (key !== "enum") {
-					normSchema(schema[key], baseUri);
-				}
-			}
-		}
-	}
-}
diff --git a/source/numeric.js b/source/numeric.js
deleted file mode 100644
index a6ef38a..0000000
--- a/source/numeric.js
+++ /dev/null
@@ -1,55 +0,0 @@
-ValidatorContext.prototype.validateNumeric = function validateNumeric(data, schema, dataPointerPath) {
-	return this.validateMultipleOf(data, schema, dataPointerPath)
-		|| this.validateMinMax(data, schema, dataPointerPath)
-		|| this.validateNaN(data, schema, dataPointerPath)
-		|| null;
-};
-
-var CLOSE_ENOUGH_LOW = Math.pow(2, -51);
-var CLOSE_ENOUGH_HIGH = 1 - CLOSE_ENOUGH_LOW;
-ValidatorContext.prototype.validateMultipleOf = function validateMultipleOf(data, schema) {
-	var multipleOf = schema.multipleOf || schema.divisibleBy;
-	if (multipleOf === undefined) {
-		return null;
-	}
-	if (typeof data === "number") {
-		var remainder = (data/multipleOf)%1;
-		if (remainder >= CLOSE_ENOUGH_LOW && remainder < CLOSE_ENOUGH_HIGH) {
-			return this.createError(ErrorCodes.NUMBER_MULTIPLE_OF, {value: data, multipleOf: multipleOf}, '', '', null, data, schema);
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateMinMax = function validateMinMax(data, schema) {
-	if (typeof data !== "number") {
-		return null;
-	}
-	if (schema.minimum !== undefined) {
-		if (data < schema.minimum) {
-			return this.createError(ErrorCodes.NUMBER_MINIMUM, {value: data, minimum: schema.minimum}, '', '/minimum', null, data, schema);
-		}
-		if (schema.exclusiveMinimum && data === schema.minimum) {
-			return this.createError(ErrorCodes.NUMBER_MINIMUM_EXCLUSIVE, {value: data, minimum: schema.minimum}, '', '/exclusiveMinimum', null, data, schema);
-		}
-	}
-	if (schema.maximum !== undefined) {
-		if (data > schema.maximum) {
-			return this.createError(ErrorCodes.NUMBER_MAXIMUM, {value: data, maximum: schema.maximum}, '', '/maximum', null, data, schema);
-		}
-		if (schema.exclusiveMaximum && data === schema.maximum) {
-			return this.createError(ErrorCodes.NUMBER_MAXIMUM_EXCLUSIVE, {value: data, maximum: schema.maximum}, '', '/exclusiveMaximum', null, data, schema);
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateNaN = function validateNaN(data, schema) {
-	if (typeof data !== "number") {
-		return null;
-	}
-	if (isNaN(data) === true || data === Infinity || data === -Infinity) {
-		return this.createError(ErrorCodes.NUMBER_NOT_A_NUMBER, {value: data}, '', '/type', null, data, schema);
-	}
-	return null;
-};
diff --git a/source/object.js b/source/object.js
deleted file mode 100644
index ebc74f6..0000000
--- a/source/object.js
+++ /dev/null
@@ -1,132 +0,0 @@
-ValidatorContext.prototype.validateObject = function validateObject(data, schema, dataPointerPath) {
-	if (typeof data !== "object" || data === null || Array.isArray(data)) {
-		return null;
-	}
-	return this.validateObjectMinMaxProperties(data, schema, dataPointerPath)
-		|| this.validateObjectRequiredProperties(data, schema, dataPointerPath)
-		|| this.validateObjectProperties(data, schema, dataPointerPath)
-		|| this.validateObjectDependencies(data, schema, dataPointerPath)
-		|| null;
-};
-
-ValidatorContext.prototype.validateObjectMinMaxProperties = function validateObjectMinMaxProperties(data, schema) {
-	var keys = Object.keys(data);
-	var error;
-	if (schema.minProperties !== undefined) {
-		if (keys.length < schema.minProperties) {
-			error = this.createError(ErrorCodes.OBJECT_PROPERTIES_MINIMUM, {propertyCount: keys.length, minimum: schema.minProperties}, '', '/minProperties', null, data, schema);
-			if (this.handleError(error)) {
-				return error;
-			}
-		}
-	}
-	if (schema.maxProperties !== undefined) {
-		if (keys.length > schema.maxProperties) {
-			error = this.createError(ErrorCodes.OBJECT_PROPERTIES_MAXIMUM, {propertyCount: keys.length, maximum: schema.maxProperties}, '', '/maxProperties', null, data, schema);
-			if (this.handleError(error)) {
-				return error;
-			}
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateObjectRequiredProperties = function validateObjectRequiredProperties(data, schema) {
-	if (schema.required !== undefined) {
-		for (var i = 0; i < schema.required.length; i++) {
-			var key = schema.required[i];
-			if (data[key] === undefined) {
-				var error = this.createError(ErrorCodes.OBJECT_REQUIRED, {key: key}, '', '/required/' + i, null, data, schema);
-				if (this.handleError(error)) {
-					return error;
-				}
-			}
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateObjectProperties = function validateObjectProperties(data, schema, dataPointerPath) {
-	var error;
-	for (var key in data) {
-		var keyPointerPath = dataPointerPath + "/" + key.replace(/~/g, '~0').replace(/\//g, '~1');
-		var foundMatch = false;
-		if (schema.properties !== undefined && schema.properties[key] !== undefined) {
-			foundMatch = true;
-			if (error = this.validateAll(data[key], schema.properties[key], [key], ["properties", key], keyPointerPath)) {
-				return error;
-			}
-		}
-		if (schema.patternProperties !== undefined) {
-			for (var patternKey in schema.patternProperties) {
-				var regexp = new RegExp(patternKey);
-				if (regexp.test(key)) {
-					foundMatch = true;
-					if (error = this.validateAll(data[key], schema.patternProperties[patternKey], [key], ["patternProperties", patternKey], keyPointerPath)) {
-						return error;
-					}
-				}
-			}
-		}
-		if (!foundMatch) {
-			if (schema.additionalProperties !== undefined) {
-				if (this.trackUnknownProperties) {
-					this.knownPropertyPaths[keyPointerPath] = true;
-					delete this.unknownPropertyPaths[keyPointerPath];
-				}
-				if (typeof schema.additionalProperties === "boolean") {
-					if (!schema.additionalProperties) {
-						error = this.createError(ErrorCodes.OBJECT_ADDITIONAL_PROPERTIES, {key: key}, '', '/additionalProperties', null, data, schema).prefixWith(key, null);
-						if (this.handleError(error)) {
-							return error;
-						}
-					}
-				} else {
-					if (error = this.validateAll(data[key], schema.additionalProperties, [key], ["additionalProperties"], keyPointerPath)) {
-						return error;
-					}
-				}
-			} else if (this.trackUnknownProperties && !this.knownPropertyPaths[keyPointerPath]) {
-				this.unknownPropertyPaths[keyPointerPath] = true;
-			}
-		} else if (this.trackUnknownProperties) {
-			this.knownPropertyPaths[keyPointerPath] = true;
-			delete this.unknownPropertyPaths[keyPointerPath];
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateObjectDependencies = function validateObjectDependencies(data, schema, dataPointerPath) {
-	var error;
-	if (schema.dependencies !== undefined) {
-		for (var depKey in schema.dependencies) {
-			if (data[depKey] !== undefined) {
-				var dep = schema.dependencies[depKey];
-				if (typeof dep === "string") {
-					if (data[dep] === undefined) {
-						error = this.createError(ErrorCodes.OBJECT_DEPENDENCY_KEY, {key: depKey, missing: dep}, '', '', null, data, schema).prefixWith(null, depKey).prefixWith(null, "dependencies");
-						if (this.handleError(error)) {
-							return error;
-						}
-					}
-				} else if (Array.isArray(dep)) {
-					for (var i = 0; i < dep.length; i++) {
-						var requiredKey = dep[i];
-						if (data[requiredKey] === undefined) {
-							error = this.createError(ErrorCodes.OBJECT_DEPENDENCY_KEY, {key: depKey, missing: requiredKey}, '', '/' + i, null, data, schema).prefixWith(null, depKey).prefixWith(null, "dependencies");
-							if (this.handleError(error)) {
-								return error;
-							}
-						}
-					}
-				} else {
-					if (error = this.validateAll(data, dep, [], ["dependencies", depKey], dataPointerPath)) {
-						return error;
-					}
-				}
-			}
-		}
-	}
-	return null;
-};
diff --git a/source/resolve-uri.js b/source/resolve-uri.js
deleted file mode 100644
index 37688b8..0000000
--- a/source/resolve-uri.js
+++ /dev/null
@@ -1,49 +0,0 @@
-// parseURI() and resolveUrl() are from https://gist.github.com/1088850
-//   -  released as public domain by author ("Yaffle") - see comments on gist
-
-function parseURI(url) {
-	var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);
-	// authority = '//' + user + ':' + pass '@' + hostname + ':' port
-	return (m ? {
-		href     : m[0] || '',
-		protocol : m[1] || '',
-		authority: m[2] || '',
-		host     : m[3] || '',
-		hostname : m[4] || '',
-		port     : m[5] || '',
-		pathname : m[6] || '',
-		search   : m[7] || '',
-		hash     : m[8] || ''
-	} : null);
-}
-
-function resolveUrl(base, href) {// RFC 3986
-
-	function removeDotSegments(input) {
-		var output = [];
-		input.replace(/^(\.\.?(\/|$))+/, '')
-			.replace(/\/(\.(\/|$))+/g, '/')
-			.replace(/\/\.\.$/, '/../')
-			.replace(/\/?[^\/]*/g, function (p) {
-				if (p === '/..') {
-					output.pop();
-				} else {
-					output.push(p);
-				}
-		});
-		return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : '');
-	}
-
-	href = parseURI(href || '');
-	base = parseURI(base || '');
-
-	return !href || !base ? null : (href.protocol || base.protocol) +
-		(href.protocol || href.authority ? href.authority : base.authority) +
-		removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) +
-		(href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +
-		href.hash;
-}
-
-function getDocumentUri(uri) {
-	return uri.split('#')[0];
-}
\ No newline at end of file
diff --git a/source/string.js b/source/string.js
deleted file mode 100644
index 01cee5b..0000000
--- a/source/string.js
+++ /dev/null
@@ -1,50 +0,0 @@
-ValidatorContext.prototype.validateString = function validateString(data, schema, dataPointerPath) {
-	return this.validateStringLength(data, schema, dataPointerPath)
-		|| this.validateStringPattern(data, schema, dataPointerPath)
-		|| null;
-};
-
-ValidatorContext.prototype.validateStringLength = function validateStringLength(data, schema) {
-	if (typeof data !== "string") {
-		return null;
-	}
-	if (schema.minLength !== undefined) {
-		if (data.length < schema.minLength) {
-			return this.createError(ErrorCodes.STRING_LENGTH_SHORT, {length: data.length, minimum: schema.minLength}, '', '/minLength', null, data, schema);
-		}
-	}
-	if (schema.maxLength !== undefined) {
-		if (data.length > schema.maxLength) {
-			return this.createError(ErrorCodes.STRING_LENGTH_LONG, {length: data.length, maximum: schema.maxLength}, '', '/maxLength', null, data, schema);
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.validateStringPattern = function validateStringPattern(data, schema) {
-	if (typeof data !== "string" || (typeof schema.pattern !== "string" && !(schema.pattern instanceof RegExp))) {
-		return null;
-	}
-	var regexp;
-	if (schema.pattern instanceof RegExp) {
-	  regexp = schema.pattern;
-	}
-	else {
-	  var body, flags = '';
-	  // Check for regular expression literals
-	  // @see http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.5
-	  var literal = schema.pattern.match(/^\/(.+)\/([img]*)$/);
-	  if (literal) {
-	    body = literal[1];
-	    flags = literal[2];
-	  }
-	  else {
-	    body = schema.pattern;
-	  }
-	  regexp = new RegExp(body, flags);
-	}
-	if (!regexp.test(data)) {
-		return this.createError(ErrorCodes.STRING_PATTERN, {pattern: schema.pattern}, '', '/pattern', null, data, schema);
-	}
-	return null;
-};
diff --git a/source/uri-template-fill.js b/source/uri-template-fill.js
deleted file mode 100644
index 68bc97a..0000000
--- a/source/uri-template-fill.js
+++ /dev/null
@@ -1,189 +0,0 @@
-// Based on: https://github.com/geraintluff/uri-templates, but with all the de-substitution stuff removed
-
-var uriTemplateGlobalModifiers = {
-	"+": true,
-	"#": true,
-	".": true,
-	"/": true,
-	";": true,
-	"?": true,
-	"&": true
-};
-var uriTemplateSuffices = {
-	"*": true
-};
-
-function notReallyPercentEncode(string) {
-	return encodeURI(string).replace(/%25[0-9][0-9]/g, function (doubleEncoded) {
-		return "%" + doubleEncoded.substring(3);
-	});
-}
-
-function uriTemplateSubstitution(spec) {
-	var modifier = "";
-	if (uriTemplateGlobalModifiers[spec.charAt(0)]) {
-		modifier = spec.charAt(0);
-		spec = spec.substring(1);
-	}
-	var separator = "";
-	var prefix = "";
-	var shouldEscape = true;
-	var showVariables = false;
-	var trimEmptyString = false;
-	if (modifier === '+') {
-		shouldEscape = false;
-	} else if (modifier === ".") {
-		prefix = ".";
-		separator = ".";
-	} else if (modifier === "/") {
-		prefix = "/";
-		separator = "/";
-	} else if (modifier === '#') {
-		prefix = "#";
-		shouldEscape = false;
-	} else if (modifier === ';') {
-		prefix = ";";
-		separator = ";";
-		showVariables = true;
-		trimEmptyString = true;
-	} else if (modifier === '?') {
-		prefix = "?";
-		separator = "&";
-		showVariables = true;
-	} else if (modifier === '&') {
-		prefix = "&";
-		separator = "&";
-		showVariables = true;
-	}
-
-	var varNames = [];
-	var varList = spec.split(",");
-	var varSpecs = [];
-	var varSpecMap = {};
-	for (var i = 0; i < varList.length; i++) {
-		var varName = varList[i];
-		var truncate = null;
-		if (varName.indexOf(":") !== -1) {
-			var parts = varName.split(":");
-			varName = parts[0];
-			truncate = parseInt(parts[1], 10);
-		}
-		var suffices = {};
-		while (uriTemplateSuffices[varName.charAt(varName.length - 1)]) {
-			suffices[varName.charAt(varName.length - 1)] = true;
-			varName = varName.substring(0, varName.length - 1);
-		}
-		var varSpec = {
-			truncate: truncate,
-			name: varName,
-			suffices: suffices
-		};
-		varSpecs.push(varSpec);
-		varSpecMap[varName] = varSpec;
-		varNames.push(varName);
-	}
-	var subFunction = function (valueFunction) {
-		var result = "";
-		var startIndex = 0;
-		for (var i = 0; i < varSpecs.length; i++) {
-			var varSpec = varSpecs[i];
-			var value = valueFunction(varSpec.name);
-			if (value === null || value === undefined || (Array.isArray(value) && value.length === 0) || (typeof value === 'object' && Object.keys(value).length === 0)) {
-				startIndex++;
-				continue;
-			}
-			if (i === startIndex) {
-				result += prefix;
-			} else {
-				result += (separator || ",");
-			}
-			if (Array.isArray(value)) {
-				if (showVariables) {
-					result += varSpec.name + "=";
-				}
-				for (var j = 0; j < value.length; j++) {
-					if (j > 0) {
-						result += varSpec.suffices['*'] ? (separator || ",") : ",";
-						if (varSpec.suffices['*'] && showVariables) {
-							result += varSpec.name + "=";
-						}
-					}
-					result += shouldEscape ? encodeURIComponent(value[j]).replace(/!/g, "%21") : notReallyPercentEncode(value[j]);
-				}
-			} else if (typeof value === "object") {
-				if (showVariables && !varSpec.suffices['*']) {
-					result += varSpec.name + "=";
-				}
-				var first = true;
-				for (var key in value) {
-					if (!first) {
-						result += varSpec.suffices['*'] ? (separator || ",") : ",";
-					}
-					first = false;
-					result += shouldEscape ? encodeURIComponent(key).replace(/!/g, "%21") : notReallyPercentEncode(key);
-					result += varSpec.suffices['*'] ? '=' : ",";
-					result += shouldEscape ? encodeURIComponent(value[key]).replace(/!/g, "%21") : notReallyPercentEncode(value[key]);
-				}
-			} else {
-				if (showVariables) {
-					result += varSpec.name;
-					if (!trimEmptyString || value !== "") {
-						result += "=";
-					}
-				}
-				if (varSpec.truncate != null) {
-					value = value.substring(0, varSpec.truncate);
-				}
-				result += shouldEscape ? encodeURIComponent(value).replace(/!/g, "%21"): notReallyPercentEncode(value);
-			}
-		}
-		return result;
-	};
-	subFunction.varNames = varNames;
-	return {
-		prefix: prefix,
-		substitution: subFunction
-	};
-}
-
-function UriTemplate(template) {
-	if (!(this instanceof UriTemplate)) {
-		return new UriTemplate(template);
-	}
-	var parts = template.split("{");
-	var textParts = [parts.shift()];
-	var prefixes = [];
-	var substitutions = [];
-	var varNames = [];
-	while (parts.length > 0) {
-		var part = parts.shift();
-		var spec = part.split("}")[0];
-		var remainder = part.substring(spec.length + 1);
-		var funcs = uriTemplateSubstitution(spec);
-		substitutions.push(funcs.substitution);
-		prefixes.push(funcs.prefix);
-		textParts.push(remainder);
-		varNames = varNames.concat(funcs.substitution.varNames);
-	}
-	this.fill = function (valueFunction) {
-		var result = textParts[0];
-		for (var i = 0; i < substitutions.length; i++) {
-			var substitution = substitutions[i];
-			result += substitution(valueFunction);
-			result += textParts[i + 1];
-		}
-		return result;
-	};
-	this.varNames = varNames;
-	this.template = template;
-}
-UriTemplate.prototype = {
-	toString: function () {
-		return this.template;
-	},
-	fillFromObject: function (obj) {
-		return this.fill(function (varName) {
-			return obj[varName];
-		});
-	}
-};
\ No newline at end of file
diff --git a/source/validate.js b/source/validate.js
deleted file mode 100644
index 50b1683..0000000
--- a/source/validate.js
+++ /dev/null
@@ -1,397 +0,0 @@
-var ValidatorContext = function ValidatorContext(parent, collectMultiple, errorReporter, checkRecursive, trackUnknownProperties) {
-	this.missing = [];
-	this.missingMap = {};
-	this.formatValidators = parent ? Object.create(parent.formatValidators) : {};
-	this.schemas = parent ? Object.create(parent.schemas) : {};
-	this.collectMultiple = collectMultiple;
-	this.errors = [];
-	this.handleError = collectMultiple ? this.collectError : this.returnError;
-	if (checkRecursive) {
-		this.checkRecursive = true;
-		this.scanned = [];
-		this.scannedFrozen = [];
-		this.scannedFrozenSchemas = [];
-		this.scannedFrozenValidationErrors = [];
-		this.validatedSchemasKey = 'tv4_validation_id';
-		this.validationErrorsKey = 'tv4_validation_errors_id';
-	}
-	if (trackUnknownProperties) {
-		this.trackUnknownProperties = true;
-		this.knownPropertyPaths = {};
-		this.unknownPropertyPaths = {};
-	}
-	this.errorReporter = errorReporter || defaultErrorReporter('en');
-	if (typeof this.errorReporter === 'string') {
-		throw new Error('debug');
-	}
-	this.definedKeywords = {};
-	if (parent) {
-		for (var key in parent.definedKeywords) {
-			this.definedKeywords[key] = parent.definedKeywords[key].slice(0);
-		}
-	}
-};
-ValidatorContext.prototype.defineKeyword = function (keyword, keywordFunction) {
-	this.definedKeywords[keyword] = this.definedKeywords[keyword] || [];
-	this.definedKeywords[keyword].push(keywordFunction);
-};
-ValidatorContext.prototype.createError = function (code, messageParams, dataPath, schemaPath, subErrors, data, schema) {
-	var error = new ValidationError(code, messageParams, dataPath, schemaPath, subErrors);
-	error.message = this.errorReporter(error, data, schema);
-	return error;
-};
-ValidatorContext.prototype.returnError = function (error) {
-	return error;
-};
-ValidatorContext.prototype.collectError = function (error) {
-	if (error) {
-		this.errors.push(error);
-	}
-	return null;
-};
-ValidatorContext.prototype.prefixErrors = function (startIndex, dataPath, schemaPath) {
-	for (var i = startIndex; i < this.errors.length; i++) {
-		this.errors[i] = this.errors[i].prefixWith(dataPath, schemaPath);
-	}
-	return this;
-};
-ValidatorContext.prototype.banUnknownProperties = function (data, schema) {
-	for (var unknownPath in this.unknownPropertyPaths) {
-		var error = this.createError(ErrorCodes.UNKNOWN_PROPERTY, {path: unknownPath}, unknownPath, "", null, data, schema);
-		var result = this.handleError(error);
-		if (result) {
-			return result;
-		}
-	}
-	return null;
-};
-
-ValidatorContext.prototype.addFormat = function (format, validator) {
-	if (typeof format === 'object') {
-		for (var key in format) {
-			this.addFormat(key, format[key]);
-		}
-		return this;
-	}
-	this.formatValidators[format] = validator;
-};
-ValidatorContext.prototype.resolveRefs = function (schema, urlHistory) {
-	if (schema['$ref'] !== undefined) {
-		urlHistory = urlHistory || {};
-		if (urlHistory[schema['$ref']]) {
-			return this.createError(ErrorCodes.CIRCULAR_REFERENCE, {urls: Object.keys(urlHistory).join(', ')}, '', '', null, undefined, schema);
-		}
-		urlHistory[schema['$ref']] = true;
-		schema = this.getSchema(schema['$ref'], urlHistory);
-	}
-	return schema;
-};
-ValidatorContext.prototype.getSchema = function (url, urlHistory) {
-	var schema;
-	if (this.schemas[url] !== undefined) {
-		schema = this.schemas[url];
-		return this.resolveRefs(schema, urlHistory);
-	}
-	var baseUrl = url;
-	var fragment = "";
-	if (url.indexOf('#') !== -1) {
-		fragment = url.substring(url.indexOf("#") + 1);
-		baseUrl = url.substring(0, url.indexOf("#"));
-	}
-	if (typeof this.schemas[baseUrl] === 'object') {
-		schema = this.schemas[baseUrl];
-		var pointerPath = decodeURIComponent(fragment);
-		if (pointerPath === "") {
-			return this.resolveRefs(schema, urlHistory);
-		} else if (pointerPath.charAt(0) !== "/") {
-			return undefined;
-		}
-		var parts = pointerPath.split("/").slice(1);
-		for (var i = 0; i < parts.length; i++) {
-			var component = parts[i].replace(/~1/g, "/").replace(/~0/g, "~");
-			if (schema[component] === undefined) {
-				schema = undefined;
-				break;
-			}
-			schema = schema[component];
-		}
-		if (schema !== undefined) {
-			return this.resolveRefs(schema, urlHistory);
-		}
-	}
-	if (this.missing[baseUrl] === undefined) {
-		this.missing.push(baseUrl);
-		this.missing[baseUrl] = baseUrl;
-		this.missingMap[baseUrl] = baseUrl;
-	}
-};
-ValidatorContext.prototype.searchSchemas = function (schema, url) {
-	if (Array.isArray(schema)) {
-		for (var i = 0; i < schema.length; i++) {
-			this.searchSchemas(schema[i], url);
-		}
-	} else if (schema && typeof schema === "object") {
-		if (typeof schema.id === "string") {
-			if (isTrustedUrl(url, schema.id)) {
-				if (this.schemas[schema.id] === undefined) {
-					this.schemas[schema.id] = schema;
-				}
-			}
-		}
-		for (var key in schema) {
-			if (key !== "enum") {
-				if (typeof schema[key] === "object") {
-					this.searchSchemas(schema[key], url);
-				} else if (key === "$ref") {
-					var uri = getDocumentUri(schema[key]);
-					if (uri && this.schemas[uri] === undefined && this.missingMap[uri] === undefined) {
-						this.missingMap[uri] = uri;
-					}
-				}
-			}
-		}
-	}
-};
-ValidatorContext.prototype.addSchema = function (url, schema) {
-	//overload
-	if (typeof url !== 'string' || typeof schema === 'undefined') {
-		if (typeof url === 'object' && typeof url.id === 'string') {
-			schema = url;
-			url = schema.id;
-		}
-		else {
-			return;
-		}
-	}
-	if (url === getDocumentUri(url) + "#") {
-		// Remove empty fragment
-		url = getDocumentUri(url);
-	}
-	this.schemas[url] = schema;
-	delete this.missingMap[url];
-	normSchema(schema, url);
-	this.searchSchemas(schema, url);
-};
-
-ValidatorContext.prototype.getSchemaMap = function () {
-	var map = {};
-	for (var key in this.schemas) {
-		map[key] = this.schemas[key];
-	}
-	return map;
-};
-
-ValidatorContext.prototype.getSchemaUris = function (filterRegExp) {
-	var list = [];
-	for (var key in this.schemas) {
-		if (!filterRegExp || filterRegExp.test(key)) {
-			list.push(key);
-		}
-	}
-	return list;
-};
-
-ValidatorContext.prototype.getMissingUris = function (filterRegExp) {
-	var list = [];
-	for (var key in this.missingMap) {
-		if (!filterRegExp || filterRegExp.test(key)) {
-			list.push(key);
-		}
-	}
-	return list;
-};
-
-ValidatorContext.prototype.dropSchemas = function () {
-	this.schemas = {};
-	this.reset();
-};
-ValidatorContext.prototype.reset = function () {
-	this.missing = [];
-	this.missingMap = {};
-	this.errors = [];
-};
-
-ValidatorContext.prototype.validateAll = function (data, schema, dataPathParts, schemaPathParts, dataPointerPath) {
-	var topLevel;
-	schema = this.resolveRefs(schema);
-	if (!schema) {
-		return null;
-	} else if (schema instanceof ValidationError) {
-		this.errors.push(schema);
-		return schema;
-	}
-
-	var startErrorCount = this.errors.length;
-	var frozenIndex, scannedFrozenSchemaIndex = null, scannedSchemasIndex = null;
-	if (this.checkRecursive && data && typeof data === 'object') {
-		topLevel = !this.scanned.length;
-		if (data[this.validatedSchemasKey]) {
-			var schemaIndex = data[this.validatedSchemasKey].indexOf(schema);
-			if (schemaIndex !== -1) {
-				this.errors = this.errors.concat(data[this.validationErrorsKey][schemaIndex]);
-				return null;
-			}
-		}
-		if (Object.isFrozen(data)) {
-			frozenIndex = this.scannedFrozen.indexOf(data);
-			if (frozenIndex !== -1) {
-				var frozenSchemaIndex = this.scannedFrozenSchemas[frozenIndex].indexOf(schema);
-				if (frozenSchemaIndex !== -1) {
-					this.errors = this.errors.concat(this.scannedFrozenValidationErrors[frozenIndex][frozenSchemaIndex]);
-					return null;
-				}
-			}
-		}
-		this.scanned.push(data);
-		if (Object.isFrozen(data)) {
-			if (frozenIndex === -1) {
-				frozenIndex = this.scannedFrozen.length;
-				this.scannedFrozen.push(data);
-				this.scannedFrozenSchemas.push([]);
-			}
-			scannedFrozenSchemaIndex = this.scannedFrozenSchemas[frozenIndex].length;
-			this.scannedFrozenSchemas[frozenIndex][scannedFrozenSchemaIndex] = schema;
-			this.scannedFrozenValidationErrors[frozenIndex][scannedFrozenSchemaIndex] = [];
-		} else {
-			if (!data[this.validatedSchemasKey]) {
-				try {
-					Object.defineProperty(data, this.validatedSchemasKey, {
-						value: [],
-						configurable: true
-					});
-					Object.defineProperty(data, this.validationErrorsKey, {
-						value: [],
-						configurable: true
-					});
-				} catch (e) {
-					//IE 7/8 workaround
-					data[this.validatedSchemasKey] = [];
-					data[this.validationErrorsKey] = [];
-				}
-			}
-			scannedSchemasIndex = data[this.validatedSchemasKey].length;
-			data[this.validatedSchemasKey][scannedSchemasIndex] = schema;
-			data[this.validationErrorsKey][scannedSchemasIndex] = [];
-		}
-	}
-
-	var errorCount = this.errors.length;
-	var error = this.validateBasic(data, schema, dataPointerPath)
-		|| this.validateNumeric(data, schema, dataPointerPath)
-		|| this.validateString(data, schema, dataPointerPath)
-		|| this.validateArray(data, schema, dataPointerPath)
-		|| this.validateObject(data, schema, dataPointerPath)
-		|| this.validateCombinations(data, schema, dataPointerPath)
-		|| this.validateHypermedia(data, schema, dataPointerPath)
-		|| this.validateFormat(data, schema, dataPointerPath)
-		|| this.validateDefinedKeywords(data, schema, dataPointerPath)
-		|| null;
-
-	if (topLevel) {
-		while (this.scanned.length) {
-			var item = this.scanned.pop();
-			delete item[this.validatedSchemasKey];
-		}
-		this.scannedFrozen = [];
-		this.scannedFrozenSchemas = [];
-	}
-
-	if (error || errorCount !== this.errors.length) {
-		while ((dataPathParts && dataPathParts.length) || (schemaPathParts && schemaPathParts.length)) {
-			var dataPart = (dataPathParts && dataPathParts.length) ? "" + dataPathParts.pop() : null;
-			var schemaPart = (schemaPathParts && schemaPathParts.length) ? "" + schemaPathParts.pop() : null;
-			if (error) {
-				error = error.prefixWith(dataPart, schemaPart);
-			}
-			this.prefixErrors(errorCount, dataPart, schemaPart);
-		}
-	}
-
-	if (scannedFrozenSchemaIndex !== null) {
-		this.scannedFrozenValidationErrors[frozenIndex][scannedFrozenSchemaIndex] = this.errors.slice(startErrorCount);
-	} else if (scannedSchemasIndex !== null) {
-		data[this.validationErrorsKey][scannedSchemasIndex] = this.errors.slice(startErrorCount);
-	}
-
-	return this.handleError(error);
-};
-ValidatorContext.prototype.validateFormat = function (data, schema) {
-	if (typeof schema.format !== 'string' || !this.formatValidators[schema.format]) {
-		return null;
-	}
-	var errorMessage = this.formatValidators[schema.format].call(null, data, schema);
-	if (typeof errorMessage === 'string' || typeof errorMessage === 'number') {
-		return this.createError(ErrorCodes.FORMAT_CUSTOM, {message: errorMessage}, '', '/format', null, data, schema);
-	} else if (errorMessage && typeof errorMessage === 'object') {
-		return this.createError(ErrorCodes.FORMAT_CUSTOM, {message: errorMessage.message || "?"}, errorMessage.dataPath || '', errorMessage.schemaPath || "/format", null, data, schema);
-	}
-	return null;
-};
-ValidatorContext.prototype.validateDefinedKeywords = function (data, schema, dataPointerPath) {
-	for (var key in this.definedKeywords) {
-		if (typeof schema[key] === 'undefined') {
-			continue;
-		}
-		var validationFunctions = this.definedKeywords[key];
-		for (var i = 0; i < validationFunctions.length; i++) {
-			var func = validationFunctions[i];
-			var result = func(data, schema[key], schema, dataPointerPath);
-			if (typeof result === 'string' || typeof result === 'number') {
-				return this.createError(ErrorCodes.KEYWORD_CUSTOM, {key: key, message: result}, '', '', null, data, schema).prefixWith(null, key);
-			} else if (result && typeof result === 'object') {
-				var code = result.code;
-				if (typeof code === 'string') {
-					if (!ErrorCodes[code]) {
-						throw new Error('Undefined error code (use defineError): ' + code);
-					}
-					code = ErrorCodes[code];
-				} else if (typeof code !== 'number') {
-					code = ErrorCodes.KEYWORD_CUSTOM;
-				}
-				var messageParams = (typeof result.message === 'object') ? result.message : {key: key, message: result.message || "?"};
-				var schemaPath = result.schemaPath || ("/" + key.replace(/~/g, '~0').replace(/\//g, '~1'));
-				return this.createError(code, messageParams, result.dataPath || null, schemaPath, null, data, schema);
-			}
-		}
-	}
-	return null;
-};
-
-function recursiveCompare(A, B) {
-	if (A === B) {
-		return true;
-	}
-	if (A && B && typeof A === "object" && typeof B === "object") {
-		if (Array.isArray(A) !== Array.isArray(B)) {
-			return false;
-		} else if (Array.isArray(A)) {
-			if (A.length !== B.length) {
-				return false;
-			}
-			for (var i = 0; i < A.length; i++) {
-				if (!recursiveCompare(A[i], B[i])) {
-					return false;
-				}
-			}
-		} else {
-			var key;
-			for (key in A) {
-				if (B[key] === undefined && A[key] !== undefined) {
-					return false;
-				}
-			}
-			for (key in B) {
-				if (A[key] === undefined && B[key] !== undefined) {
-					return false;
-				}
-			}
-			for (key in A) {
-				if (!recursiveCompare(A[key], B[key])) {
-					return false;
-				}
-			}
-		}
-		return true;
-	}
-	return false;
-}
diff --git a/test/_header.js b/test/_header.js
deleted file mode 100644
index 719988d..0000000
--- a/test/_header.js
+++ /dev/null
@@ -1,145 +0,0 @@
-"use strict";
-
-//need to declare these for node and modern browsers
-var tv4;
-var assert;
-
-if (typeof process === 'object' && typeof process.cwd !== 'undefined') {
-	// NodeJS
-	tv4 = require('./../').tv4;
-	assert = require('proclaim');
-	require('source-map-support').install();
-
-	var fs = require('fs');
-	var getJSON = function (file) {
-		var json;
-		try {
-			json = JSON.parse(fs.readFileSync(file, 'utf8'));
-		}
-		catch (e) {
-			assert.fail(e, null, file + ': ' + String(e), 'getJSON');
-		}
-		assert.isObject(json, file);
-		return json;
-	};
-	assert.isFile = function(file, msg) {
-		if (!fs.existsSync(file)){
-			assert.fail(false, true, msg + ': missing file ' + file, 'existsSync');
-		}
-	};
-
-	describe('Verify package definition files', function (){
-		var pkg;
-		var component;
-		var bower;
-		it('pkg', function () {
-			pkg = getJSON('./package.json');
-
-			assert.property(pkg, 'main', 'main');
-			assert.isFile(pkg.main, 'main');
-		});
-		it('component', function () {
-			component = getJSON('./component.json');
-
-			assert.property(component, 'main', 'main');
-			assert.isFile(component.main, 'main');
-
-			component.scripts.forEach(function(name) {
-				assert.isFile(name, 'scripts');
-			});
-		});
-		it('bower', function () {
-			bower = getJSON('./bower.json');
-
-			assert.property(bower, 'main', 'main');
-			assert.isFile(bower.main, 'main');
-
-			// should verify ignore field
-		});
-	});
-}
-else if (typeof window !== 'undefined') {
-	// import for browser, use from IE7/8 global bypass
-	assert = window.refs.assert;
-	tv4 = window.refs.tv4;
-}
-
-//check if we got everything
-if (!tv4) {
-	throw new Error('tv4 not found');
-}
-if (!assert) {
-	throw new Error('proclaim not found');
-}
-var helper = {};
-helper.dumpJSON = function (value) {
-	console.log(JSON.stringify(value, null, 2));
-};
-
-
-beforeEach(function () {
-	tv4 = tv4.freshApi();
-});
-
-
-//duck patch standard assert to chai
-//quick-and-dirty wrappers
-assert.property = function (object, property, message) {
-	if (typeof object[property] === 'undefined') {
-		assert.fail(object, property, message, 'have property');
-	}
-};
-assert.notProperty = function (object, property, message) {
-	if (typeof object[property] !== 'undefined') {
-		assert.fail(object, property, message, 'not have property');
-	}
-};
-
-assert.ownProperty = function (object, property, message) {
-	if (!object.hasOwnProperty(property)) {
-		assert.fail(object, property, message, 'have own property');
-	}
-};
-assert.notOwnProperty = function (object, property, message) {
-	if (object.hasOwnProperty(property)) {
-		assert.fail(object, property, message, 'not have own property');
-	}
-};
-
-//not ideal at all
-assert.propertyVal = function (object, property, value, message) {
-	assert.property(object, property, message);
-	assert.strictEqual(object[property], value, message);
-};
-assert.propertyNotVal = function (object, property, value, message) {
-	assert.property(object, property, message);
-	assert.notStrictEqual(object[property], value, message);
-};
-assert.ownPropertyVal = function (object, property, value, message) {
-	assert.ownProperty(object, property, message);
-	assert.strictEqual(object[property], value, message);
-};
-assert.notOwnPropertyVal = function (object, property, value, message) {
-	assert.notOwnProperty(object, property, message);
-	assert.notStrictEqual(object[property], value, message);
-};
-assert.propertyValues = function (object, properties, value, message) {
-	assert.isObject(object, message);
-	assert.isObject(properties, message);
-	//copy properties
-	var props = {};
-	for (var name in properties) {
-		props[name] = object[name];
-	}
-	assert.deepEqual(props, properties, message);
-};
-//import when fix is pushed
-assert.notOk = function (value, message) {
-	if (!!value) {
-		assert.fail(value, true, message, '!=');
-	}
-};
-
-/* jshint -W060 */
-
-//end of header.js
diff --git a/test/all_concat.js b/test/all_concat.js
deleted file mode 100644
index d79c5be..0000000
--- a/test/all_concat.js
+++ /dev/null
@@ -1,2636 +0,0 @@
-"use strict";
-
-//need to declare these for node and modern browsers
-var tv4;
-var assert;
-
-if (typeof process === 'object' && typeof process.cwd !== 'undefined') {
-	// NodeJS
-	tv4 = require('./../').tv4;
-	assert = require('proclaim');
-	require('source-map-support').install();
-
-	var fs = require('fs');
-	var getJSON = function (file) {
-		var json;
-		try {
-			json = JSON.parse(fs.readFileSync(file, 'utf8'));
-		}
-		catch (e) {
-			assert.fail(e, null, file + ': ' + String(e), 'getJSON');
-		}
-		assert.isObject(json, file);
-		return json;
-	};
-	assert.isFile = function(file, msg) {
-		if (!fs.existsSync(file)){
-			assert.fail(false, true, msg + ': missing file ' + file, 'existsSync');
-		}
-	};
-
-	describe('Verify package definition files', function (){
-		var pkg;
-		var component;
-		var bower;
-		it('pkg', function () {
-			pkg = getJSON('./package.json');
-
-			assert.property(pkg, 'main', 'main');
-			assert.isFile(pkg.main, 'main');
-		});
-		it('component', function () {
-			component = getJSON('./component.json');
-
-			assert.property(component, 'main', 'main');
-			assert.isFile(component.main, 'main');
-
-			component.scripts.forEach(function(name) {
-				assert.isFile(name, 'scripts');
-			});
-		});
-		it('bower', function () {
-			bower = getJSON('./bower.json');
-
-			assert.property(bower, 'main', 'main');
-			assert.isFile(bower.main, 'main');
-
-			// should verify ignore field
-		});
-	});
-}
-else if (typeof window !== 'undefined') {
-	// import for browser, use from IE7/8 global bypass
-	assert = window.refs.assert;
-	tv4 = window.refs.tv4;
-}
-
-//check if we got everything
-if (!tv4) {
-	throw new Error('tv4 not found');
-}
-if (!assert) {
-	throw new Error('proclaim not found');
-}
-var helper = {};
-helper.dumpJSON = function (value) {
-	console.log(JSON.stringify(value, null, 2));
-};
-
-
-beforeEach(function () {
-	tv4 = tv4.freshApi();
-});
-
-
-//duck patch standard assert to chai
-//quick-and-dirty wrappers
-assert.property = function (object, property, message) {
-	if (typeof object[property] === 'undefined') {
-		assert.fail(object, property, message, 'have property');
-	}
-};
-assert.notProperty = function (object, property, message) {
-	if (typeof object[property] !== 'undefined') {
-		assert.fail(object, property, message, 'not have property');
-	}
-};
-
-assert.ownProperty = function (object, property, message) {
-	if (!object.hasOwnProperty(property)) {
-		assert.fail(object, property, message, 'have own property');
-	}
-};
-assert.notOwnProperty = function (object, property, message) {
-	if (object.hasOwnProperty(property)) {
-		assert.fail(object, property, message, 'not have own property');
-	}
-};
-
-//not ideal at all
-assert.propertyVal = function (object, property, value, message) {
-	assert.property(object, property, message);
-	assert.strictEqual(object[property], value, message);
-};
-assert.propertyNotVal = function (object, property, value, message) {
-	assert.property(object, property, message);
-	assert.notStrictEqual(object[property], value, message);
-};
-assert.ownPropertyVal = function (object, property, value, message) {
-	assert.ownProperty(object, property, message);
-	assert.strictEqual(object[property], value, message);
-};
-assert.notOwnPropertyVal = function (object, property, value, message) {
-	assert.notOwnProperty(object, property, message);
-	assert.notStrictEqual(object[property], value, message);
-};
-assert.propertyValues = function (object, properties, value, message) {
-	assert.isObject(object, message);
-	assert.isObject(properties, message);
-	//copy properties
-	var props = {};
-	for (var name in properties) {
-		props[name] = object[name];
-	}
-	assert.deepEqual(props, properties, message);
-};
-//import when fix is pushed
-assert.notOk = function (value, message) {
-	if (!!value) {
-		assert.fail(value, true, message, '!=');
-	}
-};
-
-/* jshint -W060 */
-
-//end of header.js
-
-describe("Core 01", function () {
-
-	it("getDocumentUri returns only location part of url", function () {
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com"), "http://example.com");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main"), "http://example.com/main");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/"), "http://example.com/main/");
-		//assert.strictEqual(tv4.getDocumentUri("http://example.com/main//"), "http://example.com/main/");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/sub"), "http://example.com/main/sub");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/sub/"), "http://example.com/main/sub/");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main#"), "http://example.com/main");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/sub/#"), "http://example.com/main/sub/");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main?"), "http://example.com/main?");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main?q=1"), "http://example.com/main?q=1");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main?q=1#abc"), "http://example.com/main?q=1");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/#"), "http://example.com/main/");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/#?"), "http://example.com/main/");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/#?q=a/b/c"), "http://example.com/main/");
-	});
-});
-
-describe("Core 02", function () {
-
-	it("tv4.freshApi() produces working copy", function () {
-		var duplicate = tv4.freshApi();
-		assert.isObject(duplicate);
-		// Basic sanity checks
-		assert.isTrue(duplicate.validate({}, {type: "object"}));
-		assert.isObject(duplicate.validateMultiple("string", {}));
-	});
-
-	it("tv4.freshApi() has separate schema store", function () {
-		var duplicate = tv4.freshApi();
-		
-		var schemaUrl1 = "http://example.com/schema/schema1";
-		var schemaUrl2 = "http://example.com/schema/schema2";
-		duplicate.addSchema(schemaUrl1, {});
-		tv4.addSchema(schemaUrl2, {});
-		
-		assert.isObject(duplicate.getSchema(schemaUrl1));
-		assert.isUndefined(tv4.getSchema(schemaUrl1));
-		assert.isUndefined(duplicate.getSchema(schemaUrl2));
-		assert.isObject(tv4.getSchema(schemaUrl2));
-	});
-});
-
-describe("Core 03", function () {
-
-	it("tv4.dropSchemas() drops stored schemas", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema/items#"},
-			"maxItems": 2
-		};
-		tv4.addSchema("http://example.com/schema", schema);
-		assert.strictEqual(tv4.getSchema("http://example.com/schema"), schema, "has schema");
-
-		tv4.dropSchemas();
-		assert.isUndefined(tv4.getSchema("http://example.com/schema"), "doesn't have schema");
-	});
-
-	it("tv4.reset() clears errors, valid and missing", function () {
-		it("must be string, is integer", function () {
-			var data = 5;
-			var schema = {"type": "array", "items" : {"$ref" : "http://example.com"}};
-
-			assert.notOk(tv4.error, "starts with no error");
-			assert.isTrue(tv4.valid, "starts valid");
-			assert.length(tv4.missing, 0, "starts with 0 missing");
-
-			var valid = tv4.validate(data, schema);
-			assert.isFalse(valid);
-			assert.ok(tv4.error, "has error");
-			assert.isFalse(tv4.valid, "is invalid");
-			assert.length(tv4.missing, 1, "missing 1");
-
-			tv4.reset();
-			assert.notOk(tv4.error, "reset to no error");
-			assert.isTrue(tv4.valid, "reset to valid");
-			assert.length(tv4.missing, 0, "reset to 0 missing");
-		});
-	});
-});
-
-describe("Core 04", function () {
-
-	var schema = {
-		"type": "string"
-	};
-
-	it("ValidationError is Error subtype", function () {
-		var res = tv4.validateResult(123, schema);
-		assert.isObject(res);
-		assert.isObject(res.error);
-		assert.isInstanceOf(res.error, Error);
-		assert.isString(res.error.stack);
-	});
-
-	it("ValidationError has own stack trace", function () {
-		function errorA() {
-			var res = tv4.validateResult(123, schema);
-			assert.isFalse(res.valid);
-			assert.isString(res.error.stack);
-			assert.ok(res.error.stack.indexOf('errorA') > -1, 'has own stack trace A');
-		}
-
-		function errorB() {
-			var res = tv4.validateResult(123, schema);
-			assert.isFalse(res.valid);
-			assert.isString(res.error.stack);
-			assert.ok(res.error.stack.indexOf('errorB') > -1, 'has own stack trace B');
-		}
-		errorA();
-		errorB();
-	});
-});
-
-describe("Any types 01", function () {
-
-	it("no type specified", function () {
-		var data = {};
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("must be object, is object", function () {
-		var data = {};
-		var schema = {"type": "object"};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("must be object or string, is object", function () {
-		var data = {};
-		var schema = {"type": ["object", "string"]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("must be object or string, is array", function () {
-		var data = [];
-		var schema = {"type": ["object", "string"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be array, is object", function () {
-		var data = {};
-		var schema = {"type": ["array"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be string, is integer", function () {
-		var data = 5;
-		var schema = {"type": ["string"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be object, is null", function () {
-		var data = null;
-		var schema = {"type": ["object"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be null, is null", function () {
-		var data = null;
-		var schema = {"type": "null"};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("doesn't crash on invalid type", function () {
-		var data = null;
-		var schema = {"type": {"foo": "bar"}};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Any types 01", function () {
-
-	it("enum [1], was 1", function () {
-		var data = 1;
-		var schema = {"enum": [1]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("enum [1], was \"1\"", function () {
-		var data = "1";
-		var schema = {"enum": [1]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("enum [{}], was {}", function () {
-		var data = {};
-		var schema = {"enum": [
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("enum [{\"key\":\"value\"], was {}", function () {
-		var data = {};
-		var schema = {"enum": [
-			{"key": "value"}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("enum [{\"key\":\"value\"], was {\"key\": \"value\"}", function () {
-		var data = {};
-		var schema = {"enum": [
-			{"key": "value"}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("Enum with array value - success", function () {
-		var data = [1, true, 0];
-		var schema = {"enum": [
-			[1, true, 0],
-			5,
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("Enum with array value - failure 1", function () {
-		var data = [1, true, 0, 5];
-		var schema = {"enum": [
-			[1, true, 0],
-			5,
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("Enum with array value - failure 2", function () {
-		var data = [1, true, 5];
-		var schema = {"enum": [
-			[1, true, 0],
-			5,
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Numeric - multipleOf", function () {
-
-	it("pass", function () {
-		var data = 5;
-		var schema = {"multipleOf": 2.5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("fail", function () {
-		var data = 5;
-		var schema = {"multipleOf": 0.75};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("floating-point pass 6.6/2.2", function () {
-		var data = 6.6;
-		var schema = {"multipleOf": 2.2};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("floating-point pass 6.6666/2.2222", function () {
-		var data = 6.6666;
-		var schema = {"multipleOf": 2.2222};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-});
-describe("Numberic 02", function () {
-
-	it("minimum success", function () {
-		var data = 5;
-		var schema = {minimum: 2.5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum failure", function () {
-		var data = 5;
-		var schema = {minimum: 7};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("minimum equality success", function () {
-		var data = 5;
-		var schema = {minimum: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum equality failure", function () {
-		var data = 5;
-		var schema = {minimum: 5, exclusiveMinimum: true};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum success", function () {
-		var data = 5;
-		var schema = {maximum: 7};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum failure", function () {
-		var data = -5;
-		var schema = {maximum: -10};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum equality success", function () {
-		var data = 5;
-		var schema = {maximum: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum equality failure", function () {
-		var data = 5;
-		var schema = {maximum: 5, exclusiveMaximum: true};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Numeric 03", function () {
-
-	it("NaN failure", function() {
-		var data = NaN;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("Infinity failure", function() {
-		var data = Infinity;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("-Infinity failure", function() {
-		var data = -Infinity;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("string to number failure", function() {
-		var data = Number('foo');
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("string to number success", function() {
-		var data = Number('123');
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-	
-	it("max value success", function() {
-		var data = Number.MAX_VALUE;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-	
-	/* Travis reports: Bad number '1.798e+308' (which is a good thing, as it should be Infinity)
-	it("big number failure", function() {
-		var data = 1.798e+308;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	*/
-});
-
-describe("Strings 01", function () {
-
-	it("no length constraints", function () {
-		var data = "test";
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length success", function () {
-		var data = "test";
-		var schema = {minLength: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length failure", function () {
-		var data = "test";
-		var schema = {minLength: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum length success", function () {
-		var data = "test1234";
-		var schema = {maxLength: 10};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum length failure", function () {
-		var data = "test1234";
-		var schema = {maxLength: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("check error message", function () {
-		var data = "test1234";
-		var schema = {maxLength: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-		//return typeof tv4.error.message !== "undefined";
-		assert.ok(tv4.error.message);
-	});
-});
-
-describe("Strings 02", function () {
-
-	it("pattern success", function () {
-		var data = "9test";
-		var schema = {"pattern": "^[0-9][a-zA-Z]*$"};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("pattern failure", function () {
-		var data = "9test9";
-		var schema = {"pattern": "^[0-9][a-zA-Z]*$"};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-  it("accepts RegExp object", function () {
-    var data = "9test";
-    var schema = {"pattern": /^[0-9][a-zA-Z]*$/};
-    var valid = tv4.validate(data, schema);
-    assert.isTrue(valid);
-  });
-
-  it("accepts RegExp literal", function () {
-    var data = "9TEST";
-    var schema = {"pattern": "/^[0-9][a-z]*$/i"};
-    var valid = tv4.validate(data, schema);
-    assert.isTrue(valid);
-  });
-});
-describe("Arrays 01", function () {
-
-	it("no length constraints", function () {
-		var data = [1, 2, 3];
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length success", function () {
-		var data = [1, 2, 3];
-		var schema = {minItems: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length failure", function () {
-		var data = [1, 2, 3];
-		var schema = {minItems: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum length success", function () {
-		var data = [1, 2, 3, 4, 5];
-		var schema = {maxItems: 10};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum length failure", function () {
-		var data = [1, 2, 3, 4, 5];
-		var schema = {maxItems: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Arrays 02", function () {
-
-	it("uniqueItems success", function () {
-		var data = [1, true, "1"];
-		var schema = {uniqueItems: true};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("uniqueItems failure", function () {
-		var data = [1, true, "1", 1];
-		var schema = {uniqueItems: true};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Arrays 03", function () {
-
-	it("plain items success", function () {
-		var data = [1, 2, 3, 4];
-		var schema = {
-			"items": {
-				"type": "integer"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("plain items failure", function () {
-		var data = [1, 2, true, 3];
-		var schema = {
-			"items": {
-				"type": "integer"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Arrays 04", function () {
-
-	it("plain items success", function () {
-		var data = [1, true, "one"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("plain items failure", function () {
-		var data = [1, null, "one"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Arrays 05", function () {
-
-	it("additional items schema success", function () {
-		var data = [1, true, "one", "uno"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("additional items schema failure", function () {
-		var data = [1, true, "one", 1];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("additional items boolean success", function () {
-		var data = [1, true, "one", "uno"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": true
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("additional items boolean failure", function () {
-		var data = [1, true, "one", "uno"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": false
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Objects 01", function () {
-
-	it("minimum length success", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {minProperties: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length failure", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {minProperties: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum length success", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {maxProperties: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum length failure", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {maxProperties: 2};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Objects 02", function () {
-
-	it("required success", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {required: ["key1", "key2"]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("required failure", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {required: ["key1", "notDefined"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Objects 03", function () {
-
-	it("properties success", function () {
-		var data = {intKey: 1, stringKey: "one"};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"},
-				stringKey: {"type": "string"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("properties failure", function () {
-		var data = {intKey: 1, stringKey: false};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"},
-				stringKey: {"type": "string"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Objects 04", function () {
-
-	it("patternProperties success", function () {
-		var data = {intKey: 1, intKey2: 5};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"}
-			},
-			patternProperties: {
-				"^int": {minimum: 0}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("patternProperties failure 1", function () {
-		var data = {intKey: 1, intKey2: 5};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("patternProperties failure 2", function () {
-		var data = {intKey: 10, intKey2: "string value"};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Objects 05", function () {
-
-	it("additionalProperties schema success", function () {
-		var data = {intKey: 1, intKey2: 5, stringKey: "string"};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"}
-			},
-			patternProperties: {
-				"^int": {minimum: 0}
-			},
-			additionalProperties: {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("patternProperties schema failure", function () {
-		var data = {intKey: 10, intKey2: 5, stringKey: null};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			},
-			additionalProperties: {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("patternProperties boolean success", function () {
-		var data = {intKey: 10, intKey2: 5, stringKey: null};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			},
-			additionalProperties: true
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("patternProperties boolean failure", function () {
-		var data = {intKey: 10, intKey2: 5, stringKey: null};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			},
-			additionalProperties: false
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-describe("Objects 06", function () {
-
-	it("string dependency success", function () {
-		var data = {key1: 5, key2: "string"};
-		var schema = {
-			dependencies: {
-				key1: "key2"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("string dependency failure", function () {
-		var data = {key1: 5};
-		var schema = {
-			dependencies: {
-				key1: "key2"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("array dependency success", function () {
-		var data = {key1: 5, key2: "string"};
-		var schema = {
-			dependencies: {
-				key1: ["key2"]
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("array dependency failure", function () {
-		var data = {key1: 5};
-		var schema = {
-			dependencies: {
-				key1: ["key2"]
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("schema dependency success", function () {
-		var data = {key1: 5, key2: "string"};
-		var schema = {
-			dependencies: {
-				key1: {
-					properties: {
-						key2: {"type": "string"}
-					}
-				}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("schema dependency failure", function () {
-		var data = {key1: 5, key2: 5};
-		var schema = {
-			dependencies: {
-				key1: {
-					properties: {
-						key2: {"type": "string"}
-					}
-				}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Combinators 01", function () {
-
-	it("allOf success", function () {
-		var data = 10;
-		var schema = {
-			"allOf": [
-				{"type": "integer"},
-				{"minimum": 5}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("allOf failure", function () {
-		var data = 1;
-		var schema = {
-			"allOf": [
-				{"type": "integer"},
-				{"minimum": 5}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Combinators 02", function () {
-
-	it("anyOf success", function () {
-	var data = "hello";
-	var schema = {
-		"anyOf": [
-			{"type": "integer"},
-			{"type": "string"},
-			{"minLength": 1}
-		]
-	};
-	var valid = tv4.validate(data, schema);
-	assert.isTrue(valid);
-});
-
-it("anyOf failure", function () {
-	var data = true;
-	var schema = {
-		"anyOf": [
-			{"type": "integer"},
-			{"type": "string"}
-		]
-	};
-	var valid = tv4.validate(data, schema);
-	assert.isFalse(valid);
-});
-});
-
-describe("Combinators 03", function () {
-
-	it("oneOf success", function () {
-		var data = 5;
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "string"},
-				{"type": "string", minLength: 1}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("oneOf failure (too many)", function () {
-		var data = "string";
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "string"},
-				{"minLength": 1}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("oneOf failure (no matches)", function () {
-		var data = false;
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "string"},
-				{"type": "string", "minLength": 1}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("Combinators 04", function () {
-
-	it("not success", function () {
-		var data = 5;
-		var schema = {
-			"not": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("not failure", function () {
-		var data = "test";
-		var schema = {
-			"not": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("$ref 01", function () {
-
-	it("normalise - untouched immediate $ref", function () {
-		var schema = {
-			"items": {"$ref": "#"}
-		};
-		tv4.normSchema(schema);
-		assert.propertyVal(schema.items, '$ref', "#");
-		//return schema.items['$ref'] == "#";
-	});
-
-	it("normalise - id as base", function () {
-		var schema = {
-			"id": "baseUrl",
-			"items": {"$ref": "#"}
-		};
-		tv4.normSchema(schema);
-		assert.propertyVal(schema.items, '$ref', "baseUrl#");
-		//return schema.items['$ref'] == "baseUrl#";
-	});
-
-	it("normalise - id relative to parent", function () {
-		var schema = {
-			"id": "http://example.com/schema",
-			"items": {
-				"id": "otherSchema",
-				"items": {
-					"$ref": "#"
-				}
-			}
-		};
-		tv4.normSchema(schema);
-		assert.strictEqual(schema.items.id, "http://example.com/otherSchema", "schema.items.id");
-		assert.strictEqual(schema.items.items['$ref'], "http://example.com/otherSchema#", "$ref");
-		//this.assert(schema.items.id == "http://example.com/otherSchema", "schema.items.id");
-		//this.assert(schema.items.items['$ref'] == "http://example.com/otherSchema#", "$ref");
-	});
-
-	it("normalise - do not touch contents of \"enum\"", function () {
-		var schema = {
-			"id": "http://example.com/schema",
-			"items": {
-				"id": "otherSchema",
-				"enum": [
-					{
-						"$ref": "#"
-					}
-				]
-			}
-		};
-		tv4.normSchema(schema);
-		assert.strictEqual(schema.items['enum'][0]['$ref'], "#");
-		//this.assert(schema.items['enum'][0]['$ref'] == "#");
-	});
-
-	it("Only normalise id and $ref if they are strings", function () {
-		var schema = {
-			"properties": {
-				"id": {"type": "integer"},
-				"$ref": {"type": "integer"}
-			}
-		};
-		var data = {"id": "test", "$ref": "test"};
-		tv4.normSchema(schema);
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
-
-describe("$ref 02", function () {
-
-	it("skip unneeded", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema#"}
-		};
-		tv4.validate([], schema);
-		assert.notProperty(tv4.missing, "http://example.com/schema");
-		assert.length(tv4.missing, 0);
-		//return !tv4.missing["http://example.com/schema"]
-		//	&& tv4.missing.length == 0;
-	});
-
-	it("list missing (map)", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema#"}
-		};
-		tv4.validate([1, 2, 3], schema);
-		assert.property(tv4.missing, "http://example.com/schema");
-		//return !!tv4.missing["http://example.com/schema"];
-	});
-
-	it("list missing (index)", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema#"}
-		};
-		tv4.validate([1, 2, 3], schema);
-		assert.length(tv4.missing, 1);
-		assert.strictEqual(tv4.missing[0], "http://example.com/schema");
-		//return tv4.missing[0] == "http://example.com/schema";
-	});
-});
-describe("$ref 03", function () {
-
-	it("addSchema(), getSchema()", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"test": "value"
-		};
-		tv4.addSchema(url, schema);
-		var fetched = tv4.getSchema(url);
-		assert.strictEqual(fetched.test, "value");
-		//return fetched.test == "value";
-	});
-
-	it("addSchema(), getSchema() with blank fragment", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"test": "value"
-		};
-		tv4.addSchema(url, schema);
-		var fetched = tv4.getSchema(url + "#");
-		assert.strictEqual(fetched.test, "value");
-		//return fetched.test == "value";
-	});
-
-	it("addSchema(), getSchema() with pointer path fragment", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"items": {
-				"properties": {
-					"key[]": {
-						"inner/key~": "value"
-					}
-				}
-			}
-		};
-		tv4.addSchema(url, schema);
-		var fetched = tv4.getSchema(url + "#/items/properties/key%5B%5D/inner~1key~0");
-		assert.strictEqual(fetched, "value");
-		//return fetched == "value";
-	});
-
-	it("addSchema(), getSchema() adds referred schemas", function () {
-		tv4 = tv4.freshApi();
-
-		var data = [123, true];
-		var valid;
-		var url = "http://example.com/schema";
-		var schema = {
-			"type": "array",
-			"items": {"$ref": "http://example.com/schema/sub#item"}
-		};
-		tv4.addSchema(url, schema);
-
-		//test missing
-		valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-		assert.length(tv4.missing, 1);
-		assert.isUndefined(tv4.getSchema('http://example.com/schema/sub'));
-
-		var item = {
-			"id": "#item",
-			"type": "boolean"
-		};
-		var sub = {
-			"id": "http://example.com/schema/sub",
-			"type": "object",
-			"lib": {
-				"item": item
-			}
-		};
-		tv4.addSchema(sub);
-
-		//added it?
-		assert.equal(tv4.getSchema(url), schema);
-		assert.equal(tv4.getSchema('http://example.com/schema/sub'), sub);
-		assert.equal(tv4.getSchema('http://example.com/schema/sub#item'), item);
-
-		//now use it
-		valid = tv4.validate(data, schema);
-		assert.length(tv4.missing, 0);
-		assert.isFalse(valid);
-
-		var error = {
-			code: 0,
-			message: 'Invalid type: number (expected boolean)',
-			dataPath: '/0',
-			schemaPath: '/items/type',
-			subErrors: null };
-		assert.propertyValues(tv4.error, error);
-	});
-});
-describe("$ref 04", function () {
-
-	it("addSchema(), $ref", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"test": "value"
-		};
-		tv4.addSchema(url, schema);
-
-		var otherSchema = {
-			"items": {"$ref": url}
-		};
-		var valid = tv4.validate([0,1,2,3], otherSchema);
-
-		assert.isTrue(valid, "should be valid");
-		assert.length(tv4.missing, 0, "should have no missing schemas");
-
-		//this.assert(valid, "should be valid");
-		//this.assert(tv4.missing.length == 0, "should have no missing schemas");
-	});
-
-	it("internal $ref", function () {
-		var schema = {
-			"type": "array",
-			"items": {"$ref": "#"}
-		};
-
-		assert.isTrue(tv4.validate([[],[[]]], schema), "List of lists should be valid");
-		assert.isTrue(!tv4.validate([0,1,2,3], schema), "List of ints should not");
-		assert.isTrue(!tv4.validate([[true], []], schema), "List of list with boolean should not");
-
-		assert.length(tv4.missing, 0, "should have no missing schemas");
-
-		//this.assert(tv4.validate([[],[[]]], schema), "List of lists should be valid");
-		//this.assert(!tv4.validate([0,1,2,3], schema), "List of ints should not");
-		//this.assert(!tv4.validate([[true], []], schema), "List of list with boolean should not");
-
-		//this.assert(tv4.missing.length == 0, "should have no missing schemas");
-	});
-});
-
-describe("$ref 05", function () {
-
-	it("inline addressing for fragments", function () {
-		var schema = {
-			"type": "array",
-			"items": {"$ref": "#test"},
-			"testSchema": {
-				"id": "#test",
-				"type": "boolean"
-			}
-		};
-		var error = {
-			code: 0,
-			message: 'Invalid type: number (expected boolean)',
-			dataPath: '/0',
-			schemaPath: '/items/type',
-			subErrors: null
-		};
-
-		var data = [0, false];
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid, 'inline addressing invalid 0, false');
-		assert.propertyValues(tv4.error, error, 'errors equal');
-	});
-
-	it("don't trust non sub-paths", function () {
-		var examplePathBase = "http://example.com/schema";
-		var examplePath = examplePathBase + "/schema";
-		var schema = {
-			"id": examplePath,
-			"type": "array",
-			"items": {"$ref": "other-schema"},
-			"testSchema": {
-				"id": "/other-schema",
-				"type": "boolean"
-			}
-		};
-		tv4.addSchema(examplePath, schema);
-		var data = [0, false];
-		var valid = tv4.validate(data, examplePath);
-
-		assert.length(tv4.missing, 1, "should have missing schema");
-		assert.strictEqual(tv4.missing[0], examplePathBase + "/other-schema", "incorrect schema missing: " + tv4.missing[0]);
-		assert.isTrue(valid, "should pass, as remote schema not found");
-
-		//this.assert(tv4.missing.length == 1, "should have missing schema");
-		//this.assert(tv4.missing[0] == examplePathBase + "/other-schema", "incorrect schema missing: " + tv4.missing[0]);
-		//this.assert(valid, "should pass, as remote schema not found");
-	});
-});
-
-describe("$refs to $refs", function () {
-	it("addSchema(), $ref", function () {
-		var schema = {
-			id: "http://example.com/schema",
-			some: {
-				other: {type: "number"}
-			},
-			data: {'$ref': "#/some/other"}
-		};
-		
-		tv4.addSchema(schema);
-		assert.isTrue(tv4.validate(42, {"$ref": "http://example.com/schema#/data"}), "42 valid");
-		//assert.isFalse(tv4.validate(42, {"$ref": "http://example.com/schema#/data"}), "\"42\" invalid");
-		
-		assert.length(tv4.missing, 0, "should have no missing schemas");
-	});
-
-	it("Don't hang on circle", function () {
-		var schema = {
-			id: "http://example.com/schema",
-			ref1: {"$ref": "#/ref2"},
-			ref2: {"$ref": "#/ref1"}
-		};
-		
-		tv4.addSchema(schema);
-		var result = tv4.validateResult(42, "http://example.com/schema#/ref1");
-		
-		assert.isFalse(result.valid, "not valid");
-		assert.equal(result.error.code, tv4.errorCodes.CIRCULAR_REFERENCE, 'Error code correct');
-	});
-});
-
-describe("API 01", function () {
-
-	it("validateResult returns object with appropriate properties", function () {
-		var data = {};
-		var schema = {"type": "array"};
-		tv4.error = null;
-		tv4.missing = [];
-		var result = tv4.validateResult(data, schema);
-
-		assert.isFalse(result.valid, "result.valid === false");
-		assert.isTypeOf(result.error, "object", "result.error is object");
-		assert.isArray(result.missing, "result.missing is array");
-		assert.isFalse(!!tv4.error, "tv4.error == null");
-
-		//this.assert(result.valid === false, "result.valid === false");
-		//this.assert(typeof result.error == "object", "result.error is object");
-		//this.assert(Array.isArray(result.missing), "result.missing is array");
-		//this.assert(tv4.error == null, "tv4.error == null");
-	});
-});
-
-describe("API 02", function () {
-
-	it("tv4.errorCodes exists", function () {
-		assert.isObject(tv4.errorCodes);
-		//return typeof tv4.errorCodes == "object";
-	});
-});
-
-describe("API 03", function () {
-
-	it("getSchemaUris() on clean tv4 returns an empty array", function () {
-		var list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 0);
-	});
-
-	it("getSchemaUris() returns newly added schema urls", function () {
-		tv4.addSchema("http://example.com/schema", {type: "object"});
-		var list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.strictEqual(list[0], "http://example.com/schema");
-	});
-
-	it("getMissingUris() returns only missing items", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema/item#"}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-
-		var item = {
-			"id": "http://example.com/schema/item",
-			"type": "boolean"
-		};
-
-		var list;
-		list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.includes(list, "http://example.com/schema/main", 'map has main uri');
-
-		list = tv4.getMissingUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.includes(list, "http://example.com/schema/item", 'map has item uri');
-
-		tv4.addSchema(item);
-
-		list = tv4.getMissingUris();
-		assert.isArray(list);
-		assert.length(list, 0);
-	});
-
-	it("getSchemaUris() optionally return filtered items", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema/item#"}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-
-		var list;
-		list = tv4.getSchemaUris(/schema\/main/);
-		assert.isArray(list);
-		assert.length(list, 1, 'list 1 main');
-		assert.includes(list, "http://example.com/schema/main");
-
-		list = tv4.getMissingUris(/^https?/);
-		assert.isArray(list);
-		assert.length(list, 1, 'list 1 item');
-		assert.includes(list, "http://example.com/schema/item");
-	});
-
-	it("getSchemaUris() returns unique uris without fragment", function () {
-		var schema = {
-			"properties": {
-				"alpha": {
-					"$ref": "http://example.com/schema/lib#alpha"
-				},
-				"beta": {
-					"$ref": "http://example.com/schema/lib#beta"
-				}
-			}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-		var sub = {
-			"id": "http://example.com/schema/item",
-			"items": {
-				"type": "boolean"
-			}
-		};
-		tv4.addSchema(sub);
-
-		var list;
-		list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 2);
-		assert.includes(list, "http://example.com/schema/main");
-		assert.includes(list, "http://example.com/schema/item");
-
-		list = tv4.getMissingUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.includes(list, "http://example.com/schema/lib");
-	});
-
-
-	it("getSchemaMap() on clean tv4 returns an empty object", function () {
-		var map = tv4.getSchemaMap();
-		assert.isObject(map);
-		assert.isNotArray(map);
-		var list = Object.keys(map);
-		assert.length(list, 0);
-	});
-
-	it("getSchemaMap() returns an object mapping uris to schemas", function () {
-		var schema = {
-			"properties": {
-				"alpha": {
-					"$ref": "http://example.com/schema/lib#alpha"
-				},
-				"beta": {
-					"$ref": "http://example.com/schema/lib#beta"
-				}
-			}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-		var sub = {
-			"id": "http://example.com/schema/item",
-			"items": {
-				"type": "boolean"
-			}
-		};
-		tv4.addSchema(sub);
-
-		var map;
-		map = tv4.getSchemaMap();
-		assert.length(Object.keys(map), 2);
-		assert.ownPropertyVal(map, "http://example.com/schema/main", schema);
-		assert.ownPropertyVal(map, "http://example.com/schema/item", sub);
-	});
-});
-
-describe("Multiple errors 01", function () {
-
-	it("validateMultiple returns array of errors", function () {
-		var data = {};
-		var schema = {"type": "array"};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "data should not be valid");
-		assert.strictEqual(typeof result.errors, "object", "result.errors must be object");
-		assert.isNumber(result.errors.length, "result.errors have numberic length");
-
-		//-> weird: test says be object but it's an array
-
-		//assert.isArray(result.errors, "result.errors must be array-like");
-		//assert.isObject(result.errors, "result.errors must be object");
-
-		//this.assert(result.valid == false, "data should not be valid");
-		//this.assert(typeof result.errors == "object" && typeof result.errors.length == "number", "result.errors must be array-like");
-	});
-
-	it("validateMultiple has multiple entries", function () {
-		var data = {"a": 1, "b": 2};
-		var schema = {"additionalProperties": {"type": "string"}};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.length(result.errors, 2, "should return two errors");
-		//this.assert(result.errors.length == 2, "should return two errors");
-	});
-
-	it("validateMultiple correctly fails anyOf", function () {
-		var data = {};
-		var schema = {
-			"anyOf": [
-				{"type": "string"},
-				{"type": "integer"}
-			]
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 1, "should list one error");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 1, "should list one error");
-	});
-
-	it("validateMultiple correctly fails not", function () {
-		var data = {};
-		var schema = {
-			"not": {"type": "object"}
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 1, "should list one error");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 1, "should list one error");
-	});
-
-	it("validateMultiple correctly passes not", function () {
-		var data = {};
-		var schema = {
-			"not": {"type": "string"}
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isTrue(result.valid, "should validate");
-		assert.length(result.errors, 0, "no errors");
-
-		//this.assert(result.valid == true, "should validate");
-		//this.assert(result.errors.length == 0, "no errors");
-	});
-
-	it("validateMultiple correctly fails multiple oneOf", function () {
-		var data = 5;
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "number"}
-			]
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 1, "only one error");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 1, "only one error");
-	});
-
-	it("validateMultiple handles multiple missing properties", function () {
-		var data = {};
-		var schema = {
-			required: ["one", "two"]
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 2, "two errors");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 2, "exactly two errors, not " + result.errors.length);
-	});
-});
-describe("Multiple errors 02", function () {
-
-	it("validateMultiple returns array of errors", function () {
-		var data = {
-			"alternatives": {
-				"option1": "pattern for option 1"
-			}
-		};
-
-		var schema = {
-			"type": "object",
-			"properties": {
-				"alternatives": {
-					"type": "object",
-					"description": "Some options",
-					"oneOf": [
-						{
-							"properties": {
-								"option1": {
-									"type": "string",
-									"pattern": "^pattern for option 1$"
-								}
-							},
-							"additionalProperties": false,
-							"required": [
-								"option1"
-							]
-						},
-						{
-							"properties": {
-								"option2": {
-									"type": "string",
-									"pattern": "^pattern for option 2$"
-								}
-							},
-							"additionalProperties": false,
-							"required": [
-								"option2"
-							]
-						},
-						{
-							"properties": {
-								"option3": {
-									"type": "string",
-									"pattern": "^pattern for option 3$"
-								}
-							},
-							"additionalProperties": false,
-							"required": [
-								"option3"
-							]
-						}
-					]
-				}
-			}
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isTrue(result.valid, "data should be valid");
-		assert.length(result.errors, 0, "should have no errors");
-
-		//this.assert(result.valid == true, "data should be valid");
-		//this.assert(result.errors.length == 0, "should have no errors");
-	});
-});
-describe("Recursive objects 01", function () {
-	it("validate and variants do not choke on recursive objects", function () {
-		var itemA = {};
-		var itemB = { a: itemA };
-		itemA.b = itemB;
-		var aSchema = { properties: { b: { $ref: 'bSchema' }}};
-		var bSchema = { properties: { a: { $ref: 'aSchema' }}};
-		tv4.addSchema('aSchema', aSchema);
-		tv4.addSchema('bSchema', bSchema);
-		tv4.validate(itemA, aSchema, true);
-		tv4.validate(itemA, aSchema, function () {}, true);
-		tv4.validateResult(itemA, aSchema, true);
-		tv4.validateMultiple(itemA, aSchema, true);
-	});
-});
-
-// We don't handle this in general (atm), but some users have had particular problems with things added to the Array prototype
-describe("Recursive schemas", function () {
-	it("due to extra Array.prototype entries", function () {
-		var testSchema = {
-			items: []
-		};
-		Array.prototype._testSchema = testSchema;
-		
-		// Failure mode will be a RangeError (stack size limit)
-		tv4.addSchema('testSchema', testSchema);
-		
-		delete Array.prototype._testSchema;
-	});
-});
-
-describe("Registering custom validator", function () {
-	it("Allows registration of custom validator codes for \"format\" values", function () {
-		tv4.addFormat('test-format', function () {
-			return null;
-		});
-	});
-
-	it("Custom validator is correctly selected", function () {
-		tv4.addFormat('test-format', function (data) {
-			if (data !== "test string") {
-				return "string does not match";
-			}
-		});
-		
-		var schema = {format: 'test-format'};
-		var data1 = "test string";
-		var data2 = "other string";
-		
-		assert.isTrue(tv4.validate(data1, schema));
-		assert.isFalse(tv4.validate(data2, schema));
-		assert.includes(tv4.error.message, 'string does not match');
-	});
-
-	it("Custom validator object error format", function () {
-		tv4.addFormat('test-format', function (data) {
-			if (data !== "test string") {
-				return {
-					dataPath: "",
-					schemaPath: "/flah",
-					message: "Error message"
-				};
-			}
-		});
-		
-		var schema = {format: 'test-format'};
-		var data1 = "test string";
-		var data2 = "other string";
-		
-		assert.isTrue(tv4.validate(data1, schema));
-		assert.isFalse(tv4.validate(data2, schema));
-		assert.includes(tv4.error.message, 'Error message');
-		assert.equal(tv4.error.schemaPath, '/flah');
-	});
-
-	it("Register multiple using object", function () {
-		tv4.addFormat({
-			'test1': function () {return 'break 1';},
-			'test2': function () {return 'break 2';}
-		});
-		
-		var schema1 = {format: 'test1'};
-		var result1 = tv4.validateResult("test string", schema1);
-		assert.isFalse(result1.valid);
-		assert.includes(result1.error.message, 'break 1');
-
-		var schema2 = {format: 'test2'};
-		var result2 = tv4.validateResult("test string", schema2);
-		assert.isFalse(result2.valid);
-		assert.includes(result2.error.message, 'break 2');
-	});
-});
-
-describe("Ban unknown properties 01", function () {
-	it("Additional argument to ban additional properties", function () {
-		var schema = {
-			properties: {
-				propA: {},
-				propB: {}
-			}
-		};
-		var data = {
-			propA: true,
-			propUnknown: true
-		};
-		var data2 = {
-			propA: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateMultiple(data2, schema, false, true);
-		assert.isTrue(result2.valid, "Must still validate");
-	});
-
-	it("Works with validateResult()", function () {
-		var schema = {
-			properties: {
-				propA: {},
-				propB: {}
-			}
-		};
-		var data = {
-			propA: true,
-			propUnknown: true
-		};
-		var data2 = {
-			propA: true
-		};
-		
-		var result = tv4.validateResult(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateResult(data2, schema, false, true);
-		assert.isTrue(result2.valid, "Must be valid");
-	});
-
-	it("Do not complain if additionalArguments is specified", function () {
-		var schema = {
-			properties: {
-				propA: {},
-				propB: {}
-			},
-			additionalProperties: true
-		};
-		var data = {
-			propA: true,
-			propUnknown: true
-		};
-		var data2 = {
-			propA: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isTrue(result.valid, "Must be valid");
-
-		var result2 = tv4.validateMultiple(data2, schema, false, true);
-		assert.isTrue(result2.valid, "Must still validate");
-	});
-});
-
-describe("Ban unknown properties 02", function () {
-	it("Do not track property definitions from \"not\"", function () {
-		var schema = {
-			"not": {
-				properties: {
-					propA: {"type": "string"},
-				}
-			}
-		};
-		var data = {
-			propA: true,
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-	});
-
-	it("Do not track property definitions from unselected \"oneOf\"", function () {
-		var schema = {
-			"oneOf": [
-				{
-					"type": "object",
-					"properties": {
-						"propA": {"type": "string"}
-					}
-				},
-				{
-					"type": "object",
-					"properties": {
-						"propB": {"type": "boolean"}
-					}
-				}
-			]
-		};
-		var data = {
-			propA: true,
-			propB: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateMultiple(data, schema, false);
-		assert.isTrue(result2.valid, "Must still be valid without flag");
-	});
-
-
-	it("Do not track property definitions from unselected \"anyOf\"", function () {
-		var schema = {
-			"anyOf": [
-				{
-					"type": "object",
-					"properties": {
-						"propA": {"type": "string"}
-					}
-				},
-				{
-					"type": "object",
-					"properties": {
-						"propB": {"type": "boolean"}
-					}
-				}
-			]
-		};
-		var data = {
-			propA: true,
-			propB: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateMultiple(data, schema, false);
-		assert.isTrue(result2.valid, "Must still be valid without flag");
-	});
-});
-
-describe("Fill dataPath for \"required\" (GitHub Issue #103)", function () {
-	it("Blank for first-level properties", function () {
-		var schema = {
-			required: ['A']
-		};
-		var data = {};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].dataPath, '');
-	});
-
-	it("Filled for second-level properties", function () {
-		var schema = {
-			properties: {
-				"foo": {
-					required: ["bar"]
-				}
-			}
-		};
-		var data = {"foo": {}};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].dataPath, '/foo');
-	});
-});
-
-describe("Valid schemaPath for \"oneOf\" (GitHub Issue #117)", function () {
-    it("valid schemaPath in error (simple types)", function () {
-        var data = {};
-        var schema = {
-            "oneOf": [
-                { "type": "string" },
-                { "type": "bool" }
-            ]
-        };
-        
-        var result = tv4.validateMultiple(data, schema);
-        var suberr = result.errors[0].subErrors;
-        assert.equal(suberr[0].schemaPath, '/oneOf/0/type');
-        assert.equal(suberr[1].schemaPath, '/oneOf/1/type');
-    });
-    
-    it("valid schemaPath in error (required properties)", function () {
-        /* Test case provided on GitHub Issue #117 */
-        var data = {};
-        var schema = {
-            "$schema": "http://json-schema.org/draft-04/schema#",
-            "oneOf": [
-                {
-                    "type": "object",
-                    "properties": {
-                        "data": {
-                            "type": "object"
-                        }
-                    },
-                    "required": ["data"]
-                },
-                {
-                    "type": "object",
-                    "properties": {
-                        "error": {
-                            "type": "object"
-                        }
-                    },
-                    "required": ["error"]
-                }
-            ]
-        };
-        
-        var result = tv4.validateMultiple(data, schema);
-        var suberr = result.errors[0].subErrors;
-        assert.equal(suberr[0].schemaPath, "/oneOf/0/required/0");
-        assert.equal(suberr[1].schemaPath, "/oneOf/1/required/0");
-    });
-});
-
-describe("Register custom keyword", function () {
-	it("function called", function () {
-		var schema = {
-			customKeyword: "A"
-		};
-		var data = {};
-
-		tv4.defineKeyword('customKeyword', function () {
-			return "Custom failure";
-		});
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].message, 'Keyword failed: customKeyword (Custom failure)');
-	});
-
-	it("custom error code", function () {
-		var schema = {
-			customKeywordFoo: "A"
-		};
-		var data = "test test test";
-
-		tv4.defineKeyword('customKeywordFoo', function (data, value) {
-			return {
-				code: 'CUSTOM_KEYWORD_FOO',
-				message: {data: data, value: value}
-			};
-		});
-		tv4.defineError('CUSTOM_KEYWORD_FOO', 123456789, "{value}: {data}");
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].message, 'A: test test test');
-		assert.deepEqual(result.errors[0].code, 123456789);
-	});
-	
-	it("custom error code (numeric)", function () {
-		var schema = {
-			customKeywordBar: "A"
-		};
-		var data = "test test test";
-
-		tv4.defineKeyword('customKeywordBar', function (data, value) {
-			return {
-				code: 1234567890,
-				message: {data: data, value: value}
-			};
-		});
-		tv4.defineError('CUSTOM_KEYWORD_BAR', 1234567890, "{value}: {data}");
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].message, 'A: test test test');
-		assert.deepEqual(result.errors[0].code, 1234567890);
-	});
-
-	it("restrict custom error codes", function () {
-		assert.throws(function () {
-			tv4.defineError('CUSTOM_KEYWORD_BLAH', 9999, "{value}: {data}");
-		});
-	});
-
-	it("restrict custom error names", function () {
-		assert.throws(function () {
-			tv4.defineError('doesnotmatchpattern', 10002, "{value}: {data}");
-		});
-	});
-
-	it("can't defined the same code twice", function () {
-		assert.throws(function () {
-			tv4.defineError('CUSTOM_ONE', 10005, "{value}: {data}");
-			tv4.defineError('CUSTOM_TWO', 10005, "{value}: {data}");
-		});
-	});
-
-	it("function can return existing (non-custom) codes", function () {
-		var schema = {
-			"type": "object",
-			"properties": {
-				"aStringValue": {
-					"type": "string",
-					"my-custom-keyword": "something"
-				},
-				"aBooleanValue": {
-					"type": "boolean"
-				}
-			}
-		};
-		var data = {
-			"aStringValue": "a string",
-			"aBooleanValue": true
-		};
-
-		tv4.defineKeyword('my-custom-keyword', function () {
-			return {code: 0, message: "test"};
-		});
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.equal(result.errors[0].code, tv4.errorCodes.INVALID_TYPE);
-	});
-
-	it("function only called when keyword present", function () {
-		var schema = {
-			"type": "object",
-			"properties": {
-				"aStringValue": {
-					"type": "string",
-					"my-custom-keyword": "something"
-				},
-				"aBooleanValue": {
-					"type": "boolean"
-				}
-			}
-		};
-		var data = {
-			"aStringValue": "a string",
-			"aBooleanValue": true
-		};
-
-		var callCount = 0;
-		tv4.defineKeyword('my-custom-keyword', function () {
-			callCount++;
-		});
-
-		tv4.validateMultiple(data, schema, false, true);
-		assert.deepEqual(callCount, 1, "custom function must be called exactly once");
-	});
-
-	it("function knows dataPointerPath", function () {
-		var schema = {
-			"type": "object",
-			"properties": {
-				"obj": {
-					"type": "object",
-					"properties":{
-						"test":{
-							"my-custom-keyword": "something",
-							"type":"string"
-						}
-					}
-				}
-			}
-		};
-		var data = { "obj":{ "test": "a string"} };
-
-		var path = null;
-		tv4.defineKeyword('my-custom-keyword', function (data,value,schema,dataPointerPath) {
-			path = dataPointerPath;
-		});
-
-		tv4.validateMultiple(data, schema, false, true);
-		assert.strictEqual(path, "/obj/test", "custom function must know its context path");
-	});
-});
-
-describe("Load language file", function () {
-	if (typeof process !== 'object' || typeof require !== 'function') {
-		it.skip("commonjs language", function () {
-			// dummy
-		});
-	}
-	else {
-		it("commonjs language: de", function () {
-			var tv4 = require('../lang/de');
-
-			tv4.language('de');
-
-			var schema = {
-				properties: {
-					intKey: {"type": "integer"}
-				}
-			};
-			var res = tv4.validateResult({intKey: 'bad'}, schema);
-			assert.isFalse(res.valid);
-			assert.equal(res.error.message, 'Ungültiger Typ: string (erwartet wurde: integer)');
-		});
-	}
-});
-
-describe("Custom error reporting", function () {
-	it('provides custom message', function () {
-		var api = tv4.freshApi();
-
-		api.setErrorReporter(function (error, data, schema) {
-			assert.deepEqual(data, 5);
-			assert.deepEqual(schema, {minimum: 10});
-			return 'Code: ' + error.code;
-		});
-
-		var res = api.validateResult(5, {minimum: 10});
-		assert.isFalse(res.valid);
-		assert.equal(res.error.message, 'Code: 101');
-	});
-
-	it('falls back to default', function () {
-		var api = tv4.freshApi();
-
-		api.setErrorReporter(function (error, data, schema) {
-			assert.deepEqual(data, 5);
-			assert.deepEqual(schema, {minimum: 10});
-			return null;
-		});
-
-		var res = api.validateResult(5, {minimum: 10});
-		assert.isFalse(res.valid);
-		assert.isString(res.error.message);
-	});
-});
-
-describe("Load language file", function () {
-	it("commonjs language: de", function () {
-		var freshTv4 = tv4.freshApi();
-		
-		freshTv4.addSchema('/polymorphic', {
-			type: "object",
-			properties: {
-				"type": {type: "string"}
-			},
-			required: ["type"],
-			links: [{
-				rel: "describedby",
-				href: "/schemas/{type}.json"
-			}]
-		});
-
-		var res = freshTv4.validateResult({type: 'monkey'}, "/polymorphic");
-		assert.isTrue(res.valid);
-		assert.includes(res.missing, "/schemas/monkey.json");
-		
-		freshTv4.addSchema('/schemas/tiger.json', {
-			properties: {
-				"stripes": {"type": "integer", "minimum": 1}
-			},
-			required: ["stripes"]
-		});
-		
-		var res2 = freshTv4.validateResult({type: 'tiger', stripes: -1}, "/polymorphic");
-		assert.isFalse(res2.valid);
-		assert.deepEqual(res2.missing.length, 0, "no schemas should be missing");
-
-		var res3 = freshTv4.validateResult({type: 'tiger', stripes: 50}, "/polymorphic");
-		assert.isTrue(res3.valid);
-	});
-});
-
-describe("Issue 108", function () {
-
-	it("Normalise schemas even inside $ref", function () {
-	
-		var schema = {
-			"id": "http://example.com/schema" + Math.random(),
-			"$ref": "#whatever",
-			"properties": {
-				"foo": {
-					"id": "#test",
-					"type": "string"
-				}
-			}
-		};
-
-		tv4.addSchema(schema);
-
-		var result = tv4.validateMultiple("test data", schema.id + '#test');		
-		assert.isTrue(result.valid, 'validateMultiple() should return valid');
-		assert.deepEqual(result.missing.length, 0, 'should have no missing schemas');
-
-		var result2 = tv4.validateMultiple({"foo":"bar"}, schema.id + '#test');
-		assert.isFalse(result2.valid, 'validateMultiple() should return invalid');
-		assert.deepEqual(result2.missing.length, 0, 'should have no missing schemas');
-	});
-});
-describe("Issue 109", function () {
-
-	it("Don't break on null values with banUnknownProperties", function () {
-	
-		var schema = {
-			"type": "object",
-			"properties": {
-				"foo": {
-					"type": "object",
-					"additionalProperties": {"type": "string"}
-				}
-			}
-		};
-
-		var data = {foo: null};
-		
-		var result = tv4.validateMultiple(data, schema, true, true);
-		
-		assert.isFalse(result.valid, 'validateMultiple() should return invalid');
-	});
-});
-describe("Issue 32", function () {
-
-	it("Example from GitHub issue #32", function () {
-		var subSchema = {
-			"title": "SubSchema",
-			"type": "object",
-			"properties": {
-				"attribute": {"type": "string"}
-			},
-			"additionalProperties": false
-		};
-
-		var mySchema = {
-			"title": "My Schema",
-			"type": "object",
-			"properties": {
-				"name": {"type": "string"},
-				"subschemas": {"type": "array", "items": {"$ref": "#/definitions/subSchema"}}
-			},
-			"definitions": {
-				"subSchema": subSchema
-			},
-			"additionalProperties": false
-		};
-
-		/* unused variable
-		var data1 = {
-			"name": "Joe",
-			"subschemas": [
-				{"attribute": "Hello"}
-			]
-		};*/
-
-		var addlPropInSubSchema = {
-			"name": "Joe",
-			"subschemas": [
-				{"attribute": "Hello", "extra": "Not Allowed"}
-			]
-		};
-
-		// Usage 1
-		var expectedUsage1Result = tv4.validate(addlPropInSubSchema, mySchema);
-		assert.isFalse(expectedUsage1Result, 'plain validate should fail');
-		//this.assert(!expectedUsage1Result, 'plain validate should fail');
-
-		// Usage 2
-		var expectedUsage2Result = tv4.validateResult(addlPropInSubSchema, mySchema);
-		assert.isFalse(expectedUsage2Result.valid, 'validateResult should fail');
-
-		//-> this has a typo that didn't show because of type conversion!
-
-		//this.assert(!expectedUsage1Result.valud, 'validateResult should fail');
-
-		// Usage 3
-		var expectedMultipleErrorResult = tv4.validateMultiple(addlPropInSubSchema, mySchema);
-		assert.isFalse(expectedMultipleErrorResult.valid, 'validateMultiple should fail');
-		assert.length(expectedMultipleErrorResult.errors, 1, 'validateMultiple should have exactly one error');
-		//this.assert(!expectedMultipleErrorResult.valid, 'validateMultiple should fail');
-		//this.assert(expectedMultipleErrorResult.errors.length == 1, 'validateMultiple should have exactly one error');
-	});
-});
-describe("Issue 67", function () {
-
-	it("Example from GitHub issue #67", function () {
-		// Make sure null values don't trip up the normalisation
-		tv4.validate(null, {default: null});
-	});
-});
-describe("Issue 86", function () {
-
-	it("Example from GitHub issue #86", function () {
-		// The "checkRecursive" flag skips some data nodes if it actually needs to check the same data/schema pair twice
-	
-		var schema = {
-			"type": "object",
-			"properties": {
-				"shape": {
-					"oneOf": [
-						{ "$ref": "#/definitions/squareSchema" },
-						{ "$ref": "#/definitions/circleSchema" }
-					]
-				}
-			},
-			"definitions": {
-				"squareSchema": {
-					"type": "object",
-					"properties": {
-						"thetype": {
-							"type": "string",
-							"enum": ["square"]
-						},
-						"colour": {},
-						"shade": {},
-						"boxname": {
-							"type": "string"
-						}
-					},
-					"oneOf": [
-						{ "$ref": "#/definitions/colourSchema" },
-						{ "$ref": "#/definitions/shadeSchema" }
-					],
-					"required": ["thetype", "boxname"],
-					"additionalProperties": false
-				},
-				"circleSchema": {
-					"type": "object",
-					"properties": {
-						"thetype": {
-							"type": "string",
-							"enum": ["circle"]
-						},
-						"colour": {},
-						"shade": {}
-					},
-					"oneOf": [
-						{ "$ref": "#/definitions/colourSchema" },
-						{ "$ref": "#/definitions/shadeSchema" }
-					],
-					"additionalProperties": false
-				},
-				"colourSchema": {
-					"type": "object",
-					"properties": {
-						"colour": {
-							"type": "string"
-						},
-						"shade": {
-							"type": "null"
-						}
-					}
-				},
-				"shadeSchema": {
-					"type": "object",
-					"properties": {
-						"shade": {
-							"type": "string"
-						},
-						"colour": {
-							"type": "null"
-						}
-					}
-				}
-			}
-		};
-
-	
-		var circle = {
-			"shape": {
-				"thetype": "circle",
-				"shade": "red"
-			}
-		};
-		
-		var simpleResult = tv4.validate(circle, schema, true);
-		var multipleResult = tv4.validateMultiple(circle, schema, true);
-		
-		assert.isTrue(simpleResult, 'validate() should return valid');
-		assert.isTrue(multipleResult.valid, 'validateMultiple() should return valid');
-	});
-
-	it("Second example", function () {
-		var schema = {
-			"allOf": [
-				{
-					"oneOf": [
-						{"$ref": "#/definitions/option1"},
-						{"$ref": "#/definitions/option2"},
-					]
-				},
-				{
-					"not": {"$ref": "#/definitions/option2"}
-				}
-			],
-			"definitions": {
-				"option1": {
-					"allOf": [{"type": "string"}]
-				},
-				"option2": {
-					"allOf": [{"type": "number"}]
-				}
-			}
-		};
-		
-		var simpleResult = tv4.validate("test", schema, true);
-		
-		assert.isTrue(simpleResult, "validate() should return valid");
-	});
-});
-describe("Enum object/null failure", function () {
-
-	it("Doesn't crash", function () {
-	
-		var schema = {
-			"type": "object",
-			"required": ["value"],
-			"properties": {
-				"value": {
-					"enum": [6, "foo", [], true, {"foo": 12}]
-				}
-			}
-		};
-
-		var data = {value: null}; // Somehow this is only a problem when a *property* is null, not the root
-		
-		var result = tv4.validateMultiple(data, schema);
-		
-		assert.isFalse(result.valid, 'validateMultiple() should return invalid');
-	});
-});
-//@ sourceMappingURL=all_concat.js.map
\ No newline at end of file
diff --git a/test/all_concat.js.map b/test/all_concat.js.map
deleted file mode 100644
index 3cf1970..0000000
--- a/test/all_concat.js.map
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "version": 3,
-  "sources": [
-    "test/_header.js",
-    "test/tests/00 - Core/01 - utils.js",
-    "test/tests/00 - Core/02 - duplicateApi.js",
-    "test/tests/00 - Core/03 - resetAndDrop.js",
-    "test/tests/00 - Core/04 - error.js",
-    "test/tests/01 - Any types/01 - type.js",
-    "test/tests/01 - Any types/02 - enum.js",
-    "test/tests/02 - Numeric/01 - multipleOf.js",
-    "test/tests/02 - Numeric/02 - min-max.js",
-    "test/tests/02 - Numeric/03 - NaN.js",
-    "test/tests/03 - Strings/01 - min-max length.js",
-    "test/tests/03 - Strings/02 - pattern.js",
-    "test/tests/04 - Arrays/01 - min-max length.js",
-    "test/tests/04 - Arrays/02 - uniqueItems.js",
-    "test/tests/04 - Arrays/03 - items (plain).js",
-    "test/tests/04 - Arrays/04 - items (tuple-typing).js",
-    "test/tests/04 - Arrays/05 - additionalItems.js",
-    "test/tests/05 - Objects/01 - min-max properties.js",
-    "test/tests/05 - Objects/02 - required.js",
-    "test/tests/05 - Objects/03 - properties.js",
-    "test/tests/05 - Objects/04 - patternProperties.js",
-    "test/tests/05 - Objects/05 - additionalProperties.js",
-    "test/tests/05 - Objects/06 - dependencies.js",
-    "test/tests/06 - Combinations/01 - allOf.js",
-    "test/tests/06 - Combinations/02- anyOf.js",
-    "test/tests/06 - Combinations/03 - oneOf.js",
-    "test/tests/06 - Combinations/04 - not.js",
-    "test/tests/07 - $ref/01 - normalise.js",
-    "test/tests/07 - $ref/02 - list missing URLs.js",
-    "test/tests/07 - $ref/03 - getSchema.js",
-    "test/tests/07 - $ref/04 - ref.js",
-    "test/tests/07 - $ref/05 - inline addressing.js",
-    "test/tests/07 - $ref/06 - multiple refs.js",
-    "test/tests/08 - API/01 - validateResult.js",
-    "test/tests/08 - API/02 - errorCodes existence.js",
-    "test/tests/08 - API/03 - get schema URIs.js",
-    "test/tests/09 - Multiple errors/01 - validateMultiple.js",
-    "test/tests/09 - Multiple errors/02 - validateMultiple 2.js",
-    "test/tests/10 - Recursive objects/01 - validate.js",
-    "test/tests/10 - Recursive objects/02 - scan.js",
-    "test/tests/11 - format/01 - register validator.js",
-    "test/tests/12 - banUnknownProperties/01 - simple case.js",
-    "test/tests/12 - banUnknownProperties/02 - composite behaviour.js",
-    "test/tests/13 - error reporting/01 - required dataPath.js",
-    "test/tests/13 - error reporting/02 - oneOf schemaPath.js",
-    "test/tests/14 - custom validation/01 - custom keywords.js",
-    "test/tests/15 - language/01 - language file.js",
-    "test/tests/15 - language/02 - custom reporter.js",
-    "test/tests/16 - hypermedia/02 - describedby link.js",
-    "test/tests/Misc/Issue 108.js",
-    "test/tests/Misc/Issue 109.js",
-    "test/tests/Misc/Issue 32.js",
-    "test/tests/Misc/Issue 67.js",
-    "test/tests/Misc/Issue 86.js",
-    "test/tests/Misc/enum null failure.js"
-  ],
-  "names": [],
-  "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA,G;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G",
-  "file": "all_concat.js",
-  "sourceRoot": ""
-}
\ No newline at end of file
diff --git a/test/deps/chai.js b/test/deps/chai.js
deleted file mode 100644
index a35b68a..0000000
--- a/test/deps/chai.js
+++ /dev/null
@@ -1,4254 +0,0 @@
-;(function(){
-
-/**
- * Require the given path.
- *
- * @param {String} path
- * @return {Object} exports
- * @api public
- */
-
-function require(path, parent, orig) {
-  var resolved = require.resolve(path);
-
-  // lookup failed
-  if (null == resolved) {
-    orig = orig || path;
-    parent = parent || 'root';
-    var err = new Error('Failed to require "' + orig + '" from "' + parent + '"');
-    err.path = orig;
-    err.parent = parent;
-    err.require = true;
-    throw err;
-  }
-
-  var module = require.modules[resolved];
-
-  // perform real require()
-  // by invoking the module's
-  // registered function
-  if (!module.exports) {
-    module.exports = {};
-    module.client = module.component = true;
-    module.call(this, module.exports, require.relative(resolved), module);
-  }
-
-  return module.exports;
-}
-
-/**
- * Registered modules.
- */
-
-require.modules = {};
-
-/**
- * Registered aliases.
- */
-
-require.aliases = {};
-
-/**
- * Resolve `path`.
- *
- * Lookup:
- *
- *   - PATH/index.js
- *   - PATH.js
- *   - PATH
- *
- * @param {String} path
- * @return {String} path or null
- * @api private
- */
-
-require.resolve = function(path) {
-  if (path.charAt(0) === '/') path = path.slice(1);
-  var index = path + '/index.js';
-
-  var paths = [
-    path,
-    path + '.js',
-    path + '.json',
-    path + '/index.js',
-    path + '/index.json'
-  ];
-
-  for (var i = 0; i < paths.length; i++) {
-    var path = paths[i];
-    if (require.modules.hasOwnProperty(path)) return path;
-  }
-
-  if (require.aliases.hasOwnProperty(index)) {
-    return require.aliases[index];
-  }
-};
-
-/**
- * Normalize `path` relative to the current path.
- *
- * @param {String} curr
- * @param {String} path
- * @return {String}
- * @api private
- */
-
-require.normalize = function(curr, path) {
-  var segs = [];
-
-  if ('.' != path.charAt(0)) return path;
-
-  curr = curr.split('/');
-  path = path.split('/');
-
-  for (var i = 0; i < path.length; ++i) {
-    if ('..' == path[i]) {
-      curr.pop();
-    } else if ('.' != path[i] && '' != path[i]) {
-      segs.push(path[i]);
-    }
-  }
-
-  return curr.concat(segs).join('/');
-};
-
-/**
- * Register module at `path` with callback `definition`.
- *
- * @param {String} path
- * @param {Function} definition
- * @api private
- */
-
-require.register = function(path, definition) {
-  require.modules[path] = definition;
-};
-
-/**
- * Alias a module definition.
- *
- * @param {String} from
- * @param {String} to
- * @api private
- */
-
-require.alias = function(from, to) {
-  if (!require.modules.hasOwnProperty(from)) {
-    throw new Error('Failed to alias "' + from + '", it does not exist');
-  }
-  require.aliases[to] = from;
-};
-
-/**
- * Return a require function relative to the `parent` path.
- *
- * @param {String} parent
- * @return {Function}
- * @api private
- */
-
-require.relative = function(parent) {
-  var p = require.normalize(parent, '..');
-
-  /**
-   * lastIndexOf helper.
-   */
-
-  function lastIndexOf(arr, obj) {
-    var i = arr.length;
-    while (i--) {
-      if (arr[i] === obj) return i;
-    }
-    return -1;
-  }
-
-  /**
-   * The relative require() itself.
-   */
-
-  function localRequire(path) {
-    var resolved = localRequire.resolve(path);
-    return require(resolved, parent, path);
-  }
-
-  /**
-   * Resolve relative to the parent.
-   */
-
-  localRequire.resolve = function(path) {
-    var c = path.charAt(0);
-    if ('/' == c) return path.slice(1);
-    if ('.' == c) return require.normalize(p, path);
-
-    // resolve deps by returning
-    // the dep in the nearest "deps"
-    // directory
-    var segs = parent.split('/');
-    var i = lastIndexOf(segs, 'deps') + 1;
-    if (!i) i = 0;
-    path = segs.slice(0, i + 1).join('/') + '/deps/' + path;
-    return path;
-  };
-
-  /**
-   * Check if module is defined at `path`.
-   */
-
-  localRequire.exists = function(path) {
-    return require.modules.hasOwnProperty(localRequire.resolve(path));
-  };
-
-  return localRequire;
-};
-require.register("chai/index.js", function(exports, require, module){
-module.exports = require('./lib/chai');
-
-});
-require.register("chai/lib/chai.js", function(exports, require, module){
-/*!
- * chai
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-var used = []
-  , exports = module.exports = {};
-
-/*!
- * Chai version
- */
-
-exports.version = '1.6.1';
-
-/*!
- * Primary `Assertion` prototype
- */
-
-exports.Assertion = require('./chai/assertion');
-
-/*!
- * Assertion Error
- */
-
-exports.AssertionError = require('./chai/error');
-
-/*!
- * Utils for plugins (not exported)
- */
-
-var util = require('./chai/utils');
-
-/**
- * # .use(function)
- *
- * Provides a way to extend the internals of Chai
- *
- * @param {Function}
- * @returns {this} for chaining
- * @api public
- */
-
-exports.use = function (fn) {
-  if (!~used.indexOf(fn)) {
-    fn(this, util);
-    used.push(fn);
-  }
-
-  return this;
-};
-
-/*!
- * Core Assertions
- */
-
-var core = require('./chai/core/assertions');
-exports.use(core);
-
-/*!
- * Expect interface
- */
-
-var expect = require('./chai/interface/expect');
-exports.use(expect);
-
-/*!
- * Should interface
- */
-
-var should = require('./chai/interface/should');
-exports.use(should);
-
-/*!
- * Assert interface
- */
-
-var assert = require('./chai/interface/assert');
-exports.use(assert);
-
-});
-require.register("chai/lib/chai/assertion.js", function(exports, require, module){
-/*!
- * chai
- * http://chaijs.com
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Module dependencies.
- */
-
-var AssertionError = require('./error')
-  , util = require('./utils')
-  , flag = util.flag;
-
-/*!
- * Module export.
- */
-
-module.exports = Assertion;
-
-
-/*!
- * Assertion Constructor
- *
- * Creates object for chaining.
- *
- * @api private
- */
-
-function Assertion (obj, msg, stack) {
-  flag(this, 'ssfi', stack || arguments.callee);
-  flag(this, 'object', obj);
-  flag(this, 'message', msg);
-}
-
-/*!
-  * ### Assertion.includeStack
-  *
-  * User configurable property, influences whether stack trace
-  * is included in Assertion error message. Default of false
-  * suppresses stack trace in the error message
-  *
-  *     Assertion.includeStack = true;  // enable stack on error
-  *
-  * @api public
-  */
-
-Assertion.includeStack = false;
-
-/*!
- * ### Assertion.showDiff
- *
- * User configurable property, influences whether or not
- * the `showDiff` flag should be included in the thrown
- * AssertionErrors. `false` will always be `false`; `true`
- * will be true when the assertion has requested a diff
- * be shown.
- *
- * @api public
- */
-
-Assertion.showDiff = true;
-
-Assertion.addProperty = function (name, fn) {
-  util.addProperty(this.prototype, name, fn);
-};
-
-Assertion.addMethod = function (name, fn) {
-  util.addMethod(this.prototype, name, fn);
-};
-
-Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
-  util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
-};
-
-Assertion.overwriteProperty = function (name, fn) {
-  util.overwriteProperty(this.prototype, name, fn);
-};
-
-Assertion.overwriteMethod = function (name, fn) {
-  util.overwriteMethod(this.prototype, name, fn);
-};
-
-/*!
- * ### .assert(expression, message, negateMessage, expected, actual)
- *
- * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
- *
- * @name assert
- * @param {Philosophical} expression to be tested
- * @param {String} message to display if fails
- * @param {String} negatedMessage to display if negated expression fails
- * @param {Mixed} expected value (remember to check for negation)
- * @param {Mixed} actual (optional) will default to `this.obj`
- * @api private
- */
-
-Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
-  var ok = util.test(this, arguments);
-  if (true !== showDiff) showDiff = false;
-  if (true !== Assertion.showDiff) showDiff = false;
-
-  if (!ok) {
-    var msg = util.getMessage(this, arguments)
-      , actual = util.getActual(this, arguments);
-    throw new AssertionError({
-        message: msg
-      , actual: actual
-      , expected: expected
-      , stackStartFunction: (Assertion.includeStack) ? this.assert : flag(this, 'ssfi')
-      , showDiff: showDiff
-    });
-  }
-};
-
-/*!
- * ### ._obj
- *
- * Quick reference to stored `actual` value for plugin developers.
- *
- * @api private
- */
-
-Object.defineProperty(Assertion.prototype, '_obj',
-  { get: function () {
-      return flag(this, 'object');
-    }
-  , set: function (val) {
-      flag(this, 'object', val);
-    }
-});
-
-});
-require.register("chai/lib/chai/error.js", function(exports, require, module){
-/*!
- * chai
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Main export
- */
-
-module.exports = AssertionError;
-
-/**
- * # AssertionError (constructor)
- *
- * Create a new assertion error based on the Javascript
- * `Error` prototype.
- *
- * **Options**
- * - message
- * - actual
- * - expected
- * - operator
- * - startStackFunction
- *
- * @param {Object} options
- * @api public
- */
-
-function AssertionError (options) {
-  options = options || {};
-  this.message = options.message;
-  this.actual = options.actual;
-  this.expected = options.expected;
-  this.operator = options.operator;
-  this.showDiff = options.showDiff;
-
-  if (options.stackStartFunction && Error.captureStackTrace) {
-    var stackStartFunction = options.stackStartFunction;
-    Error.captureStackTrace(this, stackStartFunction);
-  }
-}
-
-/*!
- * Inherit from Error
- */
-
-AssertionError.prototype = Object.create(Error.prototype);
-AssertionError.prototype.name = 'AssertionError';
-AssertionError.prototype.constructor = AssertionError;
-
-/**
- * # toString()
- *
- * Override default to string method
- */
-
-AssertionError.prototype.toString = function() {
-  return this.message;
-};
-
-});
-require.register("chai/lib/chai/core/assertions.js", function(exports, require, module){
-/*!
- * chai
- * http://chaijs.com
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-module.exports = function (chai, _) {
-  var Assertion = chai.Assertion
-    , toString = Object.prototype.toString
-    , flag = _.flag;
-
-  /**
-   * ### Language Chains
-   *
-   * The following are provide as chainable getters to
-   * improve the readability of your assertions. They
-   * do not provide an testing capability unless they
-   * have been overwritten by a plugin.
-   *
-   * **Chains**
-   *
-   * - to
-   * - be
-   * - been
-   * - is
-   * - that
-   * - and
-   * - have
-   * - with
-   * - at
-   * - of
-   * - same
-   *
-   * @name language chains
-   * @api public
-   */
-
-  [ 'to', 'be', 'been'
-  , 'is', 'and', 'have'
-  , 'with', 'that', 'at'
-  , 'of', 'same' ].forEach(function (chain) {
-    Assertion.addProperty(chain, function () {
-      return this;
-    });
-  });
-
-  /**
-   * ### .not
-   *
-   * Negates any of assertions following in the chain.
-   *
-   *     expect(foo).to.not.equal('bar');
-   *     expect(goodFn).to.not.throw(Error);
-   *     expect({ foo: 'baz' }).to.have.property('foo')
-   *       .and.not.equal('bar');
-   *
-   * @name not
-   * @api public
-   */
-
-  Assertion.addProperty('not', function () {
-    flag(this, 'negate', true);
-  });
-
-  /**
-   * ### .deep
-   *
-   * Sets the `deep` flag, later used by the `equal` and
-   * `property` assertions.
-   *
-   *     expect(foo).to.deep.equal({ bar: 'baz' });
-   *     expect({ foo: { bar: { baz: 'quux' } } })
-   *       .to.have.deep.property('foo.bar.baz', 'quux');
-   *
-   * @name deep
-   * @api public
-   */
-
-  Assertion.addProperty('deep', function () {
-    flag(this, 'deep', true);
-  });
-
-  /**
-   * ### .a(type)
-   *
-   * The `a` and `an` assertions are aliases that can be
-   * used either as language chains or to assert a value's
-   * type.
-   *
-   *     // typeof
-   *     expect('test').to.be.a('string');
-   *     expect({ foo: 'bar' }).to.be.an('object');
-   *     expect(null).to.be.a('null');
-   *     expect(undefined).to.be.an('undefined');
-   *
-   *     // language chain
-   *     expect(foo).to.be.an.instanceof(Foo);
-   *
-   * @name a
-   * @alias an
-   * @param {String} type
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function an (type, msg) {
-    if (msg) flag(this, 'message', msg);
-    type = type.toLowerCase();
-    var obj = flag(this, 'object')
-      , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';
-
-    this.assert(
-        type === _.type(obj)
-      , 'expected #{this} to be ' + article + type
-      , 'expected #{this} not to be ' + article + type
-    );
-  }
-
-  Assertion.addChainableMethod('an', an);
-  Assertion.addChainableMethod('a', an);
-
-  /**
-   * ### .include(value)
-   *
-   * The `include` and `contain` assertions can be used as either property
-   * based language chains or as methods to assert the inclusion of an object
-   * in an array or a substring in a string. When used as language chains,
-   * they toggle the `contain` flag for the `keys` assertion.
-   *
-   *     expect([1,2,3]).to.include(2);
-   *     expect('foobar').to.contain('foo');
-   *     expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');
-   *
-   * @name include
-   * @alias contain
-   * @param {Object|String|Number} obj
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function includeChainingBehavior () {
-    flag(this, 'contains', true);
-  }
-
-  function include (val, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object')
-    this.assert(
-        ~obj.indexOf(val)
-      , 'expected #{this} to include ' + _.inspect(val)
-      , 'expected #{this} to not include ' + _.inspect(val));
-  }
-
-  Assertion.addChainableMethod('include', include, includeChainingBehavior);
-  Assertion.addChainableMethod('contain', include, includeChainingBehavior);
-
-  /**
-   * ### .ok
-   *
-   * Asserts that the target is truthy.
-   *
-   *     expect('everthing').to.be.ok;
-   *     expect(1).to.be.ok;
-   *     expect(false).to.not.be.ok;
-   *     expect(undefined).to.not.be.ok;
-   *     expect(null).to.not.be.ok;
-   *
-   * @name ok
-   * @api public
-   */
-
-  Assertion.addProperty('ok', function () {
-    this.assert(
-        flag(this, 'object')
-      , 'expected #{this} to be truthy'
-      , 'expected #{this} to be falsy');
-  });
-
-  /**
-   * ### .true
-   *
-   * Asserts that the target is `true`.
-   *
-   *     expect(true).to.be.true;
-   *     expect(1).to.not.be.true;
-   *
-   * @name true
-   * @api public
-   */
-
-  Assertion.addProperty('true', function () {
-    this.assert(
-        true === flag(this, 'object')
-      , 'expected #{this} to be true'
-      , 'expected #{this} to be false'
-      , this.negate ? false : true
-    );
-  });
-
-  /**
-   * ### .false
-   *
-   * Asserts that the target is `false`.
-   *
-   *     expect(false).to.be.false;
-   *     expect(0).to.not.be.false;
-   *
-   * @name false
-   * @api public
-   */
-
-  Assertion.addProperty('false', function () {
-    this.assert(
-        false === flag(this, 'object')
-      , 'expected #{this} to be false'
-      , 'expected #{this} to be true'
-      , this.negate ? true : false
-    );
-  });
-
-  /**
-   * ### .null
-   *
-   * Asserts that the target is `null`.
-   *
-   *     expect(null).to.be.null;
-   *     expect(undefined).not.to.be.null;
-   *
-   * @name null
-   * @api public
-   */
-
-  Assertion.addProperty('null', function () {
-    this.assert(
-        null === flag(this, 'object')
-      , 'expected #{this} to be null'
-      , 'expected #{this} not to be null'
-    );
-  });
-
-  /**
-   * ### .undefined
-   *
-   * Asserts that the target is `undefined`.
-   *
-   *      expect(undefined).to.be.undefined;
-   *      expect(null).to.not.be.undefined;
-   *
-   * @name undefined
-   * @api public
-   */
-
-  Assertion.addProperty('undefined', function () {
-    this.assert(
-        undefined === flag(this, 'object')
-      , 'expected #{this} to be undefined'
-      , 'expected #{this} not to be undefined'
-    );
-  });
-
-  /**
-   * ### .exist
-   *
-   * Asserts that the target is neither `null` nor `undefined`.
-   *
-   *     var foo = 'hi'
-   *       , bar = null
-   *       , baz;
-   *
-   *     expect(foo).to.exist;
-   *     expect(bar).to.not.exist;
-   *     expect(baz).to.not.exist;
-   *
-   * @name exist
-   * @api public
-   */
-
-  Assertion.addProperty('exist', function () {
-    this.assert(
-        null != flag(this, 'object')
-      , 'expected #{this} to exist'
-      , 'expected #{this} to not exist'
-    );
-  });
-
-
-  /**
-   * ### .empty
-   *
-   * Asserts that the target's length is `0`. For arrays, it checks
-   * the `length` property. For objects, it gets the count of
-   * enumerable keys.
-   *
-   *     expect([]).to.be.empty;
-   *     expect('').to.be.empty;
-   *     expect({}).to.be.empty;
-   *
-   * @name empty
-   * @api public
-   */
-
-  Assertion.addProperty('empty', function () {
-    var obj = flag(this, 'object')
-      , expected = obj;
-
-    if (Array.isArray(obj) || 'string' === typeof object) {
-      expected = obj.length;
-    } else if (typeof obj === 'object') {
-      expected = Object.keys(obj).length;
-    }
-
-    this.assert(
-        !expected
-      , 'expected #{this} to be empty'
-      , 'expected #{this} not to be empty'
-    );
-  });
-
-  /**
-   * ### .arguments
-   *
-   * Asserts that the target is an arguments object.
-   *
-   *     function test () {
-   *       expect(arguments).to.be.arguments;
-   *     }
-   *
-   * @name arguments
-   * @alias Arguments
-   * @api public
-   */
-
-  function checkArguments () {
-    var obj = flag(this, 'object')
-      , type = Object.prototype.toString.call(obj);
-    this.assert(
-        '[object Arguments]' === type
-      , 'expected #{this} to be arguments but got ' + type
-      , 'expected #{this} to not be arguments'
-    );
-  }
-
-  Assertion.addProperty('arguments', checkArguments);
-  Assertion.addProperty('Arguments', checkArguments);
-
-  /**
-   * ### .equal(value)
-   *
-   * Asserts that the target is strictly equal (`===`) to `value`.
-   * Alternately, if the `deep` flag is set, asserts that
-   * the target is deeply equal to `value`.
-   *
-   *     expect('hello').to.equal('hello');
-   *     expect(42).to.equal(42);
-   *     expect(1).to.not.equal(true);
-   *     expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });
-   *     expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
-   *
-   * @name equal
-   * @alias equals
-   * @alias eq
-   * @alias deep.equal
-   * @param {Mixed} value
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertEqual (val, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    if (flag(this, 'deep')) {
-      return this.eql(val);
-    } else {
-      this.assert(
-          val === obj
-        , 'expected #{this} to equal #{exp}'
-        , 'expected #{this} to not equal #{exp}'
-        , val
-        , this._obj
-        , true
-      );
-    }
-  }
-
-  Assertion.addMethod('equal', assertEqual);
-  Assertion.addMethod('equals', assertEqual);
-  Assertion.addMethod('eq', assertEqual);
-
-  /**
-   * ### .eql(value)
-   *
-   * Asserts that the target is deeply equal to `value`.
-   *
-   *     expect({ foo: 'bar' }).to.eql({ foo: 'bar' });
-   *     expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);
-   *
-   * @name eql
-   * @alias eqls
-   * @param {Mixed} value
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertEql(obj, msg) {
-    if (msg) flag(this, 'message', msg);
-    this.assert(
-        _.eql(obj, flag(this, 'object'))
-      , 'expected #{this} to deeply equal #{exp}'
-      , 'expected #{this} to not deeply equal #{exp}'
-      , obj
-      , this._obj
-      , true
-    );
-  }
-
-  Assertion.addMethod('eql', assertEql);
-  Assertion.addMethod('eqls', assertEql);
-
-  /**
-   * ### .above(value)
-   *
-   * Asserts that the target is greater than `value`.
-   *
-   *     expect(10).to.be.above(5);
-   *
-   * Can also be used in conjunction with `length` to
-   * assert a minimum length. The benefit being a
-   * more informative error message than if the length
-   * was supplied directly.
-   *
-   *     expect('foo').to.have.length.above(2);
-   *     expect([ 1, 2, 3 ]).to.have.length.above(2);
-   *
-   * @name above
-   * @alias gt
-   * @alias greaterThan
-   * @param {Number} value
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertAbove (n, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    if (flag(this, 'doLength')) {
-      new Assertion(obj, msg).to.have.property('length');
-      var len = obj.length;
-      this.assert(
-          len > n
-        , 'expected #{this} to have a length above #{exp} but got #{act}'
-        , 'expected #{this} to not have a length above #{exp}'
-        , n
-        , len
-      );
-    } else {
-      this.assert(
-          obj > n
-        , 'expected #{this} to be above ' + n
-        , 'expected #{this} to be at most ' + n
-      );
-    }
-  }
-
-  Assertion.addMethod('above', assertAbove);
-  Assertion.addMethod('gt', assertAbove);
-  Assertion.addMethod('greaterThan', assertAbove);
-
-  /**
-   * ### .least(value)
-   *
-   * Asserts that the target is greater than or equal to `value`.
-   *
-   *     expect(10).to.be.at.least(10);
-   *
-   * Can also be used in conjunction with `length` to
-   * assert a minimum length. The benefit being a
-   * more informative error message than if the length
-   * was supplied directly.
-   *
-   *     expect('foo').to.have.length.of.at.least(2);
-   *     expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);
-   *
-   * @name least
-   * @alias gte
-   * @param {Number} value
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertLeast (n, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    if (flag(this, 'doLength')) {
-      new Assertion(obj, msg).to.have.property('length');
-      var len = obj.length;
-      this.assert(
-          len >= n
-        , 'expected #{this} to have a length at least #{exp} but got #{act}'
-        , 'expected #{this} to have a length below #{exp}'
-        , n
-        , len
-      );
-    } else {
-      this.assert(
-          obj >= n
-        , 'expected #{this} to be at least ' + n
-        , 'expected #{this} to be below ' + n
-      );
-    }
-  }
-
-  Assertion.addMethod('least', assertLeast);
-  Assertion.addMethod('gte', assertLeast);
-
-  /**
-   * ### .below(value)
-   *
-   * Asserts that the target is less than `value`.
-   *
-   *     expect(5).to.be.below(10);
-   *
-   * Can also be used in conjunction with `length` to
-   * assert a maximum length. The benefit being a
-   * more informative error message than if the length
-   * was supplied directly.
-   *
-   *     expect('foo').to.have.length.below(4);
-   *     expect([ 1, 2, 3 ]).to.have.length.below(4);
-   *
-   * @name below
-   * @alias lt
-   * @alias lessThan
-   * @param {Number} value
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertBelow (n, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    if (flag(this, 'doLength')) {
-      new Assertion(obj, msg).to.have.property('length');
-      var len = obj.length;
-      this.assert(
-          len < n
-        , 'expected #{this} to have a length below #{exp} but got #{act}'
-        , 'expected #{this} to not have a length below #{exp}'
-        , n
-        , len
-      );
-    } else {
-      this.assert(
-          obj < n
-        , 'expected #{this} to be below ' + n
-        , 'expected #{this} to be at least ' + n
-      );
-    }
-  }
-
-  Assertion.addMethod('below', assertBelow);
-  Assertion.addMethod('lt', assertBelow);
-  Assertion.addMethod('lessThan', assertBelow);
-
-  /**
-   * ### .most(value)
-   *
-   * Asserts that the target is less than or equal to `value`.
-   *
-   *     expect(5).to.be.at.most(5);
-   *
-   * Can also be used in conjunction with `length` to
-   * assert a maximum length. The benefit being a
-   * more informative error message than if the length
-   * was supplied directly.
-   *
-   *     expect('foo').to.have.length.of.at.most(4);
-   *     expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);
-   *
-   * @name most
-   * @alias lte
-   * @param {Number} value
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertMost (n, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    if (flag(this, 'doLength')) {
-      new Assertion(obj, msg).to.have.property('length');
-      var len = obj.length;
-      this.assert(
-          len <= n
-        , 'expected #{this} to have a length at most #{exp} but got #{act}'
-        , 'expected #{this} to have a length above #{exp}'
-        , n
-        , len
-      );
-    } else {
-      this.assert(
-          obj <= n
-        , 'expected #{this} to be at most ' + n
-        , 'expected #{this} to be above ' + n
-      );
-    }
-  }
-
-  Assertion.addMethod('most', assertMost);
-  Assertion.addMethod('lte', assertMost);
-
-  /**
-   * ### .within(start, finish)
-   *
-   * Asserts that the target is within a range.
-   *
-   *     expect(7).to.be.within(5,10);
-   *
-   * Can also be used in conjunction with `length` to
-   * assert a length range. The benefit being a
-   * more informative error message than if the length
-   * was supplied directly.
-   *
-   *     expect('foo').to.have.length.within(2,4);
-   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);
-   *
-   * @name within
-   * @param {Number} start lowerbound inclusive
-   * @param {Number} finish upperbound inclusive
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  Assertion.addMethod('within', function (start, finish, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object')
-      , range = start + '..' + finish;
-    if (flag(this, 'doLength')) {
-      new Assertion(obj, msg).to.have.property('length');
-      var len = obj.length;
-      this.assert(
-          len >= start && len <= finish
-        , 'expected #{this} to have a length within ' + range
-        , 'expected #{this} to not have a length within ' + range
-      );
-    } else {
-      this.assert(
-          obj >= start && obj <= finish
-        , 'expected #{this} to be within ' + range
-        , 'expected #{this} to not be within ' + range
-      );
-    }
-  });
-
-  /**
-   * ### .instanceof(constructor)
-   *
-   * Asserts that the target is an instance of `constructor`.
-   *
-   *     var Tea = function (name) { this.name = name; }
-   *       , Chai = new Tea('chai');
-   *
-   *     expect(Chai).to.be.an.instanceof(Tea);
-   *     expect([ 1, 2, 3 ]).to.be.instanceof(Array);
-   *
-   * @name instanceof
-   * @param {Constructor} constructor
-   * @param {String} message _optional_
-   * @alias instanceOf
-   * @api public
-   */
-
-  function assertInstanceOf (constructor, msg) {
-    if (msg) flag(this, 'message', msg);
-    var name = _.getName(constructor);
-    this.assert(
-        flag(this, 'object') instanceof constructor
-      , 'expected #{this} to be an instance of ' + name
-      , 'expected #{this} to not be an instance of ' + name
-    );
-  };
-
-  Assertion.addMethod('instanceof', assertInstanceOf);
-  Assertion.addMethod('instanceOf', assertInstanceOf);
-
-  /**
-   * ### .property(name, [value])
-   *
-   * Asserts that the target has a property `name`, optionally asserting that
-   * the value of that property is strictly equal to  `value`.
-   * If the `deep` flag is set, you can use dot- and bracket-notation for deep
-   * references into objects and arrays.
-   *
-   *     // simple referencing
-   *     var obj = { foo: 'bar' };
-   *     expect(obj).to.have.property('foo');
-   *     expect(obj).to.have.property('foo', 'bar');
-   *
-   *     // deep referencing
-   *     var deepObj = {
-   *         green: { tea: 'matcha' }
-   *       , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]
-   *     };
-
-   *     expect(deepObj).to.have.deep.property('green.tea', 'matcha');
-   *     expect(deepObj).to.have.deep.property('teas[1]', 'matcha');
-   *     expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');
-   *
-   * You can also use an array as the starting point of a `deep.property`
-   * assertion, or traverse nested arrays.
-   *
-   *     var arr = [
-   *         [ 'chai', 'matcha', 'konacha' ]
-   *       , [ { tea: 'chai' }
-   *         , { tea: 'matcha' }
-   *         , { tea: 'konacha' } ]
-   *     ];
-   *
-   *     expect(arr).to.have.deep.property('[0][1]', 'matcha');
-   *     expect(arr).to.have.deep.property('[1][2].tea', 'konacha');
-   *
-   * Furthermore, `property` changes the subject of the assertion
-   * to be the value of that property from the original object. This
-   * permits for further chainable assertions on that property.
-   *
-   *     expect(obj).to.have.property('foo')
-   *       .that.is.a('string');
-   *     expect(deepObj).to.have.property('green')
-   *       .that.is.an('object')
-   *       .that.deep.equals({ tea: 'matcha' });
-   *     expect(deepObj).to.have.property('teas')
-   *       .that.is.an('array')
-   *       .with.deep.property('[2]')
-   *         .that.deep.equals({ tea: 'konacha' });
-   *
-   * @name property
-   * @alias deep.property
-   * @param {String} name
-   * @param {Mixed} value (optional)
-   * @param {String} message _optional_
-   * @returns value of property for chaining
-   * @api public
-   */
-
-  Assertion.addMethod('property', function (name, val, msg) {
-    if (msg) flag(this, 'message', msg);
-
-    var descriptor = flag(this, 'deep') ? 'deep property ' : 'property '
-      , negate = flag(this, 'negate')
-      , obj = flag(this, 'object')
-      , value = flag(this, 'deep')
-        ? _.getPathValue(name, obj)
-        : obj[name];
-
-    if (negate && undefined !== val) {
-      if (undefined === value) {
-        msg = (msg != null) ? msg + ': ' : '';
-        throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));
-      }
-    } else {
-      this.assert(
-          undefined !== value
-        , 'expected #{this} to have a ' + descriptor + _.inspect(name)
-        , 'expected #{this} to not have ' + descriptor + _.inspect(name));
-    }
-
-    if (undefined !== val) {
-      this.assert(
-          val === value
-        , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'
-        , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'
-        , val
-        , value
-      );
-    }
-
-    flag(this, 'object', value);
-  });
-
-
-  /**
-   * ### .ownProperty(name)
-   *
-   * Asserts that the target has an own property `name`.
-   *
-   *     expect('test').to.have.ownProperty('length');
-   *
-   * @name ownProperty
-   * @alias haveOwnProperty
-   * @param {String} name
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertOwnProperty (name, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    this.assert(
-        obj.hasOwnProperty(name)
-      , 'expected #{this} to have own property ' + _.inspect(name)
-      , 'expected #{this} to not have own property ' + _.inspect(name)
-    );
-  }
-
-  Assertion.addMethod('ownProperty', assertOwnProperty);
-  Assertion.addMethod('haveOwnProperty', assertOwnProperty);
-
-  /**
-   * ### .length(value)
-   *
-   * Asserts that the target's `length` property has
-   * the expected value.
-   *
-   *     expect([ 1, 2, 3]).to.have.length(3);
-   *     expect('foobar').to.have.length(6);
-   *
-   * Can also be used as a chain precursor to a value
-   * comparison for the length property.
-   *
-   *     expect('foo').to.have.length.above(2);
-   *     expect([ 1, 2, 3 ]).to.have.length.above(2);
-   *     expect('foo').to.have.length.below(4);
-   *     expect([ 1, 2, 3 ]).to.have.length.below(4);
-   *     expect('foo').to.have.length.within(2,4);
-   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);
-   *
-   * @name length
-   * @alias lengthOf
-   * @param {Number} length
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  function assertLengthChain () {
-    flag(this, 'doLength', true);
-  }
-
-  function assertLength (n, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    new Assertion(obj, msg).to.have.property('length');
-    var len = obj.length;
-
-    this.assert(
-        len == n
-      , 'expected #{this} to have a length of #{exp} but got #{act}'
-      , 'expected #{this} to not have a length of #{act}'
-      , n
-      , len
-    );
-  }
-
-  Assertion.addChainableMethod('length', assertLength, assertLengthChain);
-  Assertion.addMethod('lengthOf', assertLength, assertLengthChain);
-
-  /**
-   * ### .match(regexp)
-   *
-   * Asserts that the target matches a regular expression.
-   *
-   *     expect('foobar').to.match(/^foo/);
-   *
-   * @name match
-   * @param {RegExp} RegularExpression
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  Assertion.addMethod('match', function (re, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    this.assert(
-        re.exec(obj)
-      , 'expected #{this} to match ' + re
-      , 'expected #{this} not to match ' + re
-    );
-  });
-
-  /**
-   * ### .string(string)
-   *
-   * Asserts that the string target contains another string.
-   *
-   *     expect('foobar').to.have.string('bar');
-   *
-   * @name string
-   * @param {String} string
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  Assertion.addMethod('string', function (str, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    new Assertion(obj, msg).is.a('string');
-
-    this.assert(
-        ~obj.indexOf(str)
-      , 'expected #{this} to contain ' + _.inspect(str)
-      , 'expected #{this} to not contain ' + _.inspect(str)
-    );
-  });
-
-
-  /**
-   * ### .keys(key1, [key2], [...])
-   *
-   * Asserts that the target has exactly the given keys, or
-   * asserts the inclusion of some keys when using the
-   * `include` or `contain` modifiers.
-   *
-   *     expect({ foo: 1, bar: 2 }).to.have.keys(['foo', 'bar']);
-   *     expect({ foo: 1, bar: 2, baz: 3 }).to.contain.keys('foo', 'bar');
-   *
-   * @name keys
-   * @alias key
-   * @param {String...|Array} keys
-   * @api public
-   */
-
-  function assertKeys (keys) {
-    var obj = flag(this, 'object')
-      , str
-      , ok = true;
-
-    keys = keys instanceof Array
-      ? keys
-      : Array.prototype.slice.call(arguments);
-
-    if (!keys.length) throw new Error('keys required');
-
-    var actual = Object.keys(obj)
-      , len = keys.length;
-
-    // Inclusion
-    ok = keys.every(function(key){
-      return ~actual.indexOf(key);
-    });
-
-    // Strict
-    if (!flag(this, 'negate') && !flag(this, 'contains')) {
-      ok = ok && keys.length == actual.length;
-    }
-
-    // Key string
-    if (len > 1) {
-      keys = keys.map(function(key){
-        return _.inspect(key);
-      });
-      var last = keys.pop();
-      str = keys.join(', ') + ', and ' + last;
-    } else {
-      str = _.inspect(keys[0]);
-    }
-
-    // Form
-    str = (len > 1 ? 'keys ' : 'key ') + str;
-
-    // Have / include
-    str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;
-
-    // Assertion
-    this.assert(
-        ok
-      , 'expected #{this} to ' + str
-      , 'expected #{this} to not ' + str
-    );
-  }
-
-  Assertion.addMethod('keys', assertKeys);
-  Assertion.addMethod('key', assertKeys);
-
-  /**
-   * ### .throw(constructor)
-   *
-   * Asserts that the function target will throw a specific error, or specific type of error
-   * (as determined using `instanceof`), optionally with a RegExp or string inclusion test
-   * for the error's message.
-   *
-   *     var err = new ReferenceError('This is a bad function.');
-   *     var fn = function () { throw err; }
-   *     expect(fn).to.throw(ReferenceError);
-   *     expect(fn).to.throw(Error);
-   *     expect(fn).to.throw(/bad function/);
-   *     expect(fn).to.not.throw('good function');
-   *     expect(fn).to.throw(ReferenceError, /bad function/);
-   *     expect(fn).to.throw(err);
-   *     expect(fn).to.not.throw(new RangeError('Out of range.'));
-   *
-   * Please note that when a throw expectation is negated, it will check each
-   * parameter independently, starting with error constructor type. The appropriate way
-   * to check for the existence of a type of error but for a message that does not match
-   * is to use `and`.
-   *
-   *     expect(fn).to.throw(ReferenceError)
-   *        .and.not.throw(/good function/);
-   *
-   * @name throw
-   * @alias throws
-   * @alias Throw
-   * @param {ErrorConstructor} constructor
-   * @param {String|RegExp} expected error message
-   * @param {String} message _optional_
-   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
-   * @api public
-   */
-
-  function assertThrows (constructor, errMsg, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    new Assertion(obj, msg).is.a('function');
-
-    var thrown = false
-      , desiredError = null
-      , name = null
-      , thrownError = null;
-
-    if (arguments.length === 0) {
-      errMsg = null;
-      constructor = null;
-    } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {
-      errMsg = constructor;
-      constructor = null;
-    } else if (constructor && constructor instanceof Error) {
-      desiredError = constructor;
-      constructor = null;
-      errMsg = null;
-    } else if (typeof constructor === 'function') {
-      name = (new constructor()).name;
-    } else {
-      constructor = null;
-    }
-
-    try {
-      obj();
-    } catch (err) {
-      // first, check desired error
-      if (desiredError) {
-        this.assert(
-            err === desiredError
-          , 'expected #{this} to throw #{exp} but #{act} was thrown'
-          , 'expected #{this} to not throw #{exp}'
-          , desiredError
-          , err
-        );
-
-        return this;
-      }
-      // next, check constructor
-      if (constructor) {
-        this.assert(
-            err instanceof constructor
-          , 'expected #{this} to throw #{exp} but #{act} was thrown'
-          , 'expected #{this} to not throw #{exp} but #{act} was thrown'
-          , name
-          , err
-        );
-
-        if (!errMsg) return this;
-      }
-      // next, check message
-      var message = 'object' === _.type(err) && "message" in err
-        ? err.message
-        : '' + err;
-
-      if ((message != null) && errMsg && errMsg instanceof RegExp) {
-        this.assert(
-            errMsg.exec(message)
-          , 'expected #{this} to throw error matching #{exp} but got #{act}'
-          , 'expected #{this} to throw error not matching #{exp}'
-          , errMsg
-          , message
-        );
-
-        return this;
-      } else if ((message != null) && errMsg && 'string' === typeof errMsg) {
-        this.assert(
-            ~message.indexOf(errMsg)
-          , 'expected #{this} to throw error including #{exp} but got #{act}'
-          , 'expected #{this} to throw error not including #{act}'
-          , errMsg
-          , message
-        );
-
-        return this;
-      } else {
-        thrown = true;
-        thrownError = err;
-      }
-    }
-
-    var actuallyGot = ''
-      , expectedThrown = name !== null
-        ? name
-        : desiredError
-          ? '#{exp}' //_.inspect(desiredError)
-          : 'an error';
-
-    if (thrown) {
-      actuallyGot = ' but #{act} was thrown'
-    }
-
-    this.assert(
-        thrown === true
-      , 'expected #{this} to throw ' + expectedThrown + actuallyGot
-      , 'expected #{this} to not throw ' + expectedThrown + actuallyGot
-      , desiredError
-      , thrownError
-    );
-  };
-
-  Assertion.addMethod('throw', assertThrows);
-  Assertion.addMethod('throws', assertThrows);
-  Assertion.addMethod('Throw', assertThrows);
-
-  /**
-   * ### .respondTo(method)
-   *
-   * Asserts that the object or class target will respond to a method.
-   *
-   *     Klass.prototype.bar = function(){};
-   *     expect(Klass).to.respondTo('bar');
-   *     expect(obj).to.respondTo('bar');
-   *
-   * To check if a constructor will respond to a static function,
-   * set the `itself` flag.
-   *
-   *    Klass.baz = function(){};
-   *    expect(Klass).itself.to.respondTo('baz');
-   *
-   * @name respondTo
-   * @param {String} method
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  Assertion.addMethod('respondTo', function (method, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object')
-      , itself = flag(this, 'itself')
-      , context = ('function' === _.type(obj) && !itself)
-        ? obj.prototype[method]
-        : obj[method];
-
-    this.assert(
-        'function' === typeof context
-      , 'expected #{this} to respond to ' + _.inspect(method)
-      , 'expected #{this} to not respond to ' + _.inspect(method)
-    );
-  });
-
-  /**
-   * ### .itself
-   *
-   * Sets the `itself` flag, later used by the `respondTo` assertion.
-   *
-   *    function Foo() {}
-   *    Foo.bar = function() {}
-   *    Foo.prototype.baz = function() {}
-   *
-   *    expect(Foo).itself.to.respondTo('bar');
-   *    expect(Foo).itself.not.to.respondTo('baz');
-   *
-   * @name itself
-   * @api public
-   */
-
-  Assertion.addProperty('itself', function () {
-    flag(this, 'itself', true);
-  });
-
-  /**
-   * ### .satisfy(method)
-   *
-   * Asserts that the target passes a given truth test.
-   *
-   *     expect(1).to.satisfy(function(num) { return num > 0; });
-   *
-   * @name satisfy
-   * @param {Function} matcher
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  Assertion.addMethod('satisfy', function (matcher, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    this.assert(
-        matcher(obj)
-      , 'expected #{this} to satisfy ' + _.objDisplay(matcher)
-      , 'expected #{this} to not satisfy' + _.objDisplay(matcher)
-      , this.negate ? false : true
-      , matcher(obj)
-    );
-  });
-
-  /**
-   * ### .closeTo(expected, delta)
-   *
-   * Asserts that the target is equal `expected`, to within a +/- `delta` range.
-   *
-   *     expect(1.5).to.be.closeTo(1, 0.5);
-   *
-   * @name closeTo
-   * @param {Number} expected
-   * @param {Number} delta
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  Assertion.addMethod('closeTo', function (expected, delta, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-    this.assert(
-        Math.abs(obj - expected) <= delta
-      , 'expected #{this} to be close to ' + expected + ' +/- ' + delta
-      , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta
-    );
-  });
-
-  function isSubsetOf(subset, superset) {
-    return subset.every(function(elem) {
-      return superset.indexOf(elem) !== -1;
-    })
-  }
-
-  /**
-   * ### .members
-   *
-   * Asserts that the target is a superset of `set`,
-   * or that the target and `set` have the same members.
-   *
-   *    expect([1, 2, 3]).to.include.members([3, 2]);
-   *    expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
-   *
-   *    expect([4, 2]).to.have.members([2, 4]);
-   *    expect([5, 2]).to.not.have.members([5, 2, 1]);
-   *
-   * @name members
-   * @param {Array} set
-   * @param {String} message _optional_
-   * @api public
-   */
-
-  Assertion.addMethod('members', function (subset, msg) {
-    if (msg) flag(this, 'message', msg);
-    var obj = flag(this, 'object');
-
-    new Assertion(obj).to.be.an('array');
-    new Assertion(subset).to.be.an('array');
-
-    if (flag(this, 'contains')) {
-      return this.assert(
-          isSubsetOf(subset, obj)
-        , 'expected #{this} to be a superset of #{act}'
-        , 'expected #{this} to not be a superset of #{act}'
-        , obj
-        , subset
-      );
-    }
-
-    this.assert(
-        isSubsetOf(obj, subset) && isSubsetOf(subset, obj)
-        , 'expected #{this} to have the same members as #{act}'
-        , 'expected #{this} to not have the same members as #{act}'
-        , obj
-        , subset
-    );
-  });
-};
-
-});
-require.register("chai/lib/chai/interface/assert.js", function(exports, require, module){
-/*!
- * chai
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-
-module.exports = function (chai, util) {
-
-  /*!
-   * Chai dependencies.
-   */
-
-  var Assertion = chai.Assertion
-    , flag = util.flag;
-
-  /*!
-   * Module export.
-   */
-
-  /**
-   * ### assert(expression, message)
-   *
-   * Write your own test expressions.
-   *
-   *     assert('foo' !== 'bar', 'foo is not bar');
-   *     assert(Array.isArray([]), 'empty arrays are arrays');
-   *
-   * @param {Mixed} expression to test for truthiness
-   * @param {String} message to display on error
-   * @name assert
-   * @api public
-   */
-
-  var assert = chai.assert = function (express, errmsg) {
-    var test = new Assertion(null);
-    test.assert(
-        express
-      , errmsg
-      , '[ negation message unavailable ]'
-    );
-  };
-
-  /**
-   * ### .fail(actual, expected, [message], [operator])
-   *
-   * Throw a failure. Node.js `assert` module-compatible.
-   *
-   * @name fail
-   * @param {Mixed} actual
-   * @param {Mixed} expected
-   * @param {String} message
-   * @param {String} operator
-   * @api public
-   */
-
-  assert.fail = function (actual, expected, message, operator) {
-    throw new chai.AssertionError({
-        actual: actual
-      , expected: expected
-      , message: message
-      , operator: operator
-      , stackStartFunction: assert.fail
-    });
-  };
-
-  /**
-   * ### .ok(object, [message])
-   *
-   * Asserts that `object` is truthy.
-   *
-   *     assert.ok('everything', 'everything is ok');
-   *     assert.ok(false, 'this will fail');
-   *
-   * @name ok
-   * @param {Mixed} object to test
-   * @param {String} message
-   * @api public
-   */
-
-  assert.ok = function (val, msg) {
-    new Assertion(val, msg).is.ok;
-  };
-
-  /**
-   * ### .equal(actual, expected, [message])
-   *
-   * Asserts non-strict equality (`==`) of `actual` and `expected`.
-   *
-   *     assert.equal(3, '3', '== coerces values to strings');
-   *
-   * @name equal
-   * @param {Mixed} actual
-   * @param {Mixed} expected
-   * @param {String} message
-   * @api public
-   */
-
-  assert.equal = function (act, exp, msg) {
-    var test = new Assertion(act, msg);
-
-    test.assert(
-        exp == flag(test, 'object')
-      , 'expected #{this} to equal #{exp}'
-      , 'expected #{this} to not equal #{act}'
-      , exp
-      , act
-    );
-  };
-
-  /**
-   * ### .notEqual(actual, expected, [message])
-   *
-   * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
-   *
-   *     assert.notEqual(3, 4, 'these numbers are not equal');
-   *
-   * @name notEqual
-   * @param {Mixed} actual
-   * @param {Mixed} expected
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notEqual = function (act, exp, msg) {
-    var test = new Assertion(act, msg);
-
-    test.assert(
-        exp != flag(test, 'object')
-      , 'expected #{this} to not equal #{exp}'
-      , 'expected #{this} to equal #{act}'
-      , exp
-      , act
-    );
-  };
-
-  /**
-   * ### .strictEqual(actual, expected, [message])
-   *
-   * Asserts strict equality (`===`) of `actual` and `expected`.
-   *
-   *     assert.strictEqual(true, true, 'these booleans are strictly equal');
-   *
-   * @name strictEqual
-   * @param {Mixed} actual
-   * @param {Mixed} expected
-   * @param {String} message
-   * @api public
-   */
-
-  assert.strictEqual = function (act, exp, msg) {
-    new Assertion(act, msg).to.equal(exp);
-  };
-
-  /**
-   * ### .notStrictEqual(actual, expected, [message])
-   *
-   * Asserts strict inequality (`!==`) of `actual` and `expected`.
-   *
-   *     assert.notStrictEqual(3, '3', 'no coercion for strict equality');
-   *
-   * @name notStrictEqual
-   * @param {Mixed} actual
-   * @param {Mixed} expected
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notStrictEqual = function (act, exp, msg) {
-    new Assertion(act, msg).to.not.equal(exp);
-  };
-
-  /**
-   * ### .deepEqual(actual, expected, [message])
-   *
-   * Asserts that `actual` is deeply equal to `expected`.
-   *
-   *     assert.deepEqual({ tea: 'green' }, { tea: 'green' });
-   *
-   * @name deepEqual
-   * @param {Mixed} actual
-   * @param {Mixed} expected
-   * @param {String} message
-   * @api public
-   */
-
-  assert.deepEqual = function (act, exp, msg) {
-    new Assertion(act, msg).to.eql(exp);
-  };
-
-  /**
-   * ### .notDeepEqual(actual, expected, [message])
-   *
-   * Assert that `actual` is not deeply equal to `expected`.
-   *
-   *     assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });
-   *
-   * @name notDeepEqual
-   * @param {Mixed} actual
-   * @param {Mixed} expected
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notDeepEqual = function (act, exp, msg) {
-    new Assertion(act, msg).to.not.eql(exp);
-  };
-
-  /**
-   * ### .isTrue(value, [message])
-   *
-   * Asserts that `value` is true.
-   *
-   *     var teaServed = true;
-   *     assert.isTrue(teaServed, 'the tea has been served');
-   *
-   * @name isTrue
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isTrue = function (val, msg) {
-    new Assertion(val, msg).is['true'];
-  };
-
-  /**
-   * ### .isFalse(value, [message])
-   *
-   * Asserts that `value` is false.
-   *
-   *     var teaServed = false;
-   *     assert.isFalse(teaServed, 'no tea yet? hmm...');
-   *
-   * @name isFalse
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isFalse = function (val, msg) {
-    new Assertion(val, msg).is['false'];
-  };
-
-  /**
-   * ### .isNull(value, [message])
-   *
-   * Asserts that `value` is null.
-   *
-   *     assert.isNull(err, 'there was no error');
-   *
-   * @name isNull
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNull = function (val, msg) {
-    new Assertion(val, msg).to.equal(null);
-  };
-
-  /**
-   * ### .isNotNull(value, [message])
-   *
-   * Asserts that `value` is not null.
-   *
-   *     var tea = 'tasty chai';
-   *     assert.isNotNull(tea, 'great, time for tea!');
-   *
-   * @name isNotNull
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNotNull = function (val, msg) {
-    new Assertion(val, msg).to.not.equal(null);
-  };
-
-  /**
-   * ### .isUndefined(value, [message])
-   *
-   * Asserts that `value` is `undefined`.
-   *
-   *     var tea;
-   *     assert.isUndefined(tea, 'no tea defined');
-   *
-   * @name isUndefined
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isUndefined = function (val, msg) {
-    new Assertion(val, msg).to.equal(undefined);
-  };
-
-  /**
-   * ### .isDefined(value, [message])
-   *
-   * Asserts that `value` is not `undefined`.
-   *
-   *     var tea = 'cup of chai';
-   *     assert.isDefined(tea, 'tea has been defined');
-   *
-   * @name isDefined
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isDefined = function (val, msg) {
-    new Assertion(val, msg).to.not.equal(undefined);
-  };
-
-  /**
-   * ### .isFunction(value, [message])
-   *
-   * Asserts that `value` is a function.
-   *
-   *     function serveTea() { return 'cup of tea'; };
-   *     assert.isFunction(serveTea, 'great, we can have tea now');
-   *
-   * @name isFunction
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isFunction = function (val, msg) {
-    new Assertion(val, msg).to.be.a('function');
-  };
-
-  /**
-   * ### .isNotFunction(value, [message])
-   *
-   * Asserts that `value` is _not_ a function.
-   *
-   *     var serveTea = [ 'heat', 'pour', 'sip' ];
-   *     assert.isNotFunction(serveTea, 'great, we have listed the steps');
-   *
-   * @name isNotFunction
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNotFunction = function (val, msg) {
-    new Assertion(val, msg).to.not.be.a('function');
-  };
-
-  /**
-   * ### .isObject(value, [message])
-   *
-   * Asserts that `value` is an object (as revealed by
-   * `Object.prototype.toString`).
-   *
-   *     var selection = { name: 'Chai', serve: 'with spices' };
-   *     assert.isObject(selection, 'tea selection is an object');
-   *
-   * @name isObject
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isObject = function (val, msg) {
-    new Assertion(val, msg).to.be.a('object');
-  };
-
-  /**
-   * ### .isNotObject(value, [message])
-   *
-   * Asserts that `value` is _not_ an object.
-   *
-   *     var selection = 'chai'
-   *     assert.isObject(selection, 'tea selection is not an object');
-   *     assert.isObject(null, 'null is not an object');
-   *
-   * @name isNotObject
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNotObject = function (val, msg) {
-    new Assertion(val, msg).to.not.be.a('object');
-  };
-
-  /**
-   * ### .isArray(value, [message])
-   *
-   * Asserts that `value` is an array.
-   *
-   *     var menu = [ 'green', 'chai', 'oolong' ];
-   *     assert.isArray(menu, 'what kind of tea do we want?');
-   *
-   * @name isArray
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isArray = function (val, msg) {
-    new Assertion(val, msg).to.be.an('array');
-  };
-
-  /**
-   * ### .isNotArray(value, [message])
-   *
-   * Asserts that `value` is _not_ an array.
-   *
-   *     var menu = 'green|chai|oolong';
-   *     assert.isNotArray(menu, 'what kind of tea do we want?');
-   *
-   * @name isNotArray
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNotArray = function (val, msg) {
-    new Assertion(val, msg).to.not.be.an('array');
-  };
-
-  /**
-   * ### .isString(value, [message])
-   *
-   * Asserts that `value` is a string.
-   *
-   *     var teaOrder = 'chai';
-   *     assert.isString(teaOrder, 'order placed');
-   *
-   * @name isString
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isString = function (val, msg) {
-    new Assertion(val, msg).to.be.a('string');
-  };
-
-  /**
-   * ### .isNotString(value, [message])
-   *
-   * Asserts that `value` is _not_ a string.
-   *
-   *     var teaOrder = 4;
-   *     assert.isNotString(teaOrder, 'order placed');
-   *
-   * @name isNotString
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNotString = function (val, msg) {
-    new Assertion(val, msg).to.not.be.a('string');
-  };
-
-  /**
-   * ### .isNumber(value, [message])
-   *
-   * Asserts that `value` is a number.
-   *
-   *     var cups = 2;
-   *     assert.isNumber(cups, 'how many cups');
-   *
-   * @name isNumber
-   * @param {Number} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNumber = function (val, msg) {
-    new Assertion(val, msg).to.be.a('number');
-  };
-
-  /**
-   * ### .isNotNumber(value, [message])
-   *
-   * Asserts that `value` is _not_ a number.
-   *
-   *     var cups = '2 cups please';
-   *     assert.isNotNumber(cups, 'how many cups');
-   *
-   * @name isNotNumber
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNotNumber = function (val, msg) {
-    new Assertion(val, msg).to.not.be.a('number');
-  };
-
-  /**
-   * ### .isBoolean(value, [message])
-   *
-   * Asserts that `value` is a boolean.
-   *
-   *     var teaReady = true
-   *       , teaServed = false;
-   *
-   *     assert.isBoolean(teaReady, 'is the tea ready');
-   *     assert.isBoolean(teaServed, 'has tea been served');
-   *
-   * @name isBoolean
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isBoolean = function (val, msg) {
-    new Assertion(val, msg).to.be.a('boolean');
-  };
-
-  /**
-   * ### .isNotBoolean(value, [message])
-   *
-   * Asserts that `value` is _not_ a boolean.
-   *
-   *     var teaReady = 'yep'
-   *       , teaServed = 'nope';
-   *
-   *     assert.isNotBoolean(teaReady, 'is the tea ready');
-   *     assert.isNotBoolean(teaServed, 'has tea been served');
-   *
-   * @name isNotBoolean
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.isNotBoolean = function (val, msg) {
-    new Assertion(val, msg).to.not.be.a('boolean');
-  };
-
-  /**
-   * ### .typeOf(value, name, [message])
-   *
-   * Asserts that `value`'s type is `name`, as determined by
-   * `Object.prototype.toString`.
-   *
-   *     assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');
-   *     assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');
-   *     assert.typeOf('tea', 'string', 'we have a string');
-   *     assert.typeOf(/tea/, 'regexp', 'we have a regular expression');
-   *     assert.typeOf(null, 'null', 'we have a null');
-   *     assert.typeOf(undefined, 'undefined', 'we have an undefined');
-   *
-   * @name typeOf
-   * @param {Mixed} value
-   * @param {String} name
-   * @param {String} message
-   * @api public
-   */
-
-  assert.typeOf = function (val, type, msg) {
-    new Assertion(val, msg).to.be.a(type);
-  };
-
-  /**
-   * ### .notTypeOf(value, name, [message])
-   *
-   * Asserts that `value`'s type is _not_ `name`, as determined by
-   * `Object.prototype.toString`.
-   *
-   *     assert.notTypeOf('tea', 'number', 'strings are not numbers');
-   *
-   * @name notTypeOf
-   * @param {Mixed} value
-   * @param {String} typeof name
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notTypeOf = function (val, type, msg) {
-    new Assertion(val, msg).to.not.be.a(type);
-  };
-
-  /**
-   * ### .instanceOf(object, constructor, [message])
-   *
-   * Asserts that `value` is an instance of `constructor`.
-   *
-   *     var Tea = function (name) { this.name = name; }
-   *       , chai = new Tea('chai');
-   *
-   *     assert.instanceOf(chai, Tea, 'chai is an instance of tea');
-   *
-   * @name instanceOf
-   * @param {Object} object
-   * @param {Constructor} constructor
-   * @param {String} message
-   * @api public
-   */
-
-  assert.instanceOf = function (val, type, msg) {
-    new Assertion(val, msg).to.be.instanceOf(type);
-  };
-
-  /**
-   * ### .notInstanceOf(object, constructor, [message])
-   *
-   * Asserts `value` is not an instance of `constructor`.
-   *
-   *     var Tea = function (name) { this.name = name; }
-   *       , chai = new String('chai');
-   *
-   *     assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');
-   *
-   * @name notInstanceOf
-   * @param {Object} object
-   * @param {Constructor} constructor
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notInstanceOf = function (val, type, msg) {
-    new Assertion(val, msg).to.not.be.instanceOf(type);
-  };
-
-  /**
-   * ### .include(haystack, needle, [message])
-   *
-   * Asserts that `haystack` includes `needle`. Works
-   * for strings and arrays.
-   *
-   *     assert.include('foobar', 'bar', 'foobar contains string "bar"');
-   *     assert.include([ 1, 2, 3 ], 3, 'array contains value');
-   *
-   * @name include
-   * @param {Array|String} haystack
-   * @param {Mixed} needle
-   * @param {String} message
-   * @api public
-   */
-
-  assert.include = function (exp, inc, msg) {
-    var obj = new Assertion(exp, msg);
-
-    if (Array.isArray(exp)) {
-      obj.to.include(inc);
-    } else if ('string' === typeof exp) {
-      obj.to.contain.string(inc);
-    } else {
-      throw new chai.AssertionError({
-          message: 'expected an array or string'
-        , stackStartFunction: assert.include
-      });
-    }
-  };
-
-  /**
-   * ### .notInclude(haystack, needle, [message])
-   *
-   * Asserts that `haystack` does not include `needle`. Works
-   * for strings and arrays.
-   *i
-   *     assert.notInclude('foobar', 'baz', 'string not include substring');
-   *     assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');
-   *
-   * @name notInclude
-   * @param {Array|String} haystack
-   * @param {Mixed} needle
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notInclude = function (exp, inc, msg) {
-    var obj = new Assertion(exp, msg);
-
-    if (Array.isArray(exp)) {
-      obj.to.not.include(inc);
-    } else if ('string' === typeof exp) {
-      obj.to.not.contain.string(inc);
-    } else {
-      throw new chai.AssertionError({
-          message: 'expected an array or string'
-        , stackStartFunction: assert.include
-      });
-    }
-  };
-
-  /**
-   * ### .match(value, regexp, [message])
-   *
-   * Asserts that `value` matches the regular expression `regexp`.
-   *
-   *     assert.match('foobar', /^foo/, 'regexp matches');
-   *
-   * @name match
-   * @param {Mixed} value
-   * @param {RegExp} regexp
-   * @param {String} message
-   * @api public
-   */
-
-  assert.match = function (exp, re, msg) {
-    new Assertion(exp, msg).to.match(re);
-  };
-
-  /**
-   * ### .notMatch(value, regexp, [message])
-   *
-   * Asserts that `value` does not match the regular expression `regexp`.
-   *
-   *     assert.notMatch('foobar', /^foo/, 'regexp does not match');
-   *
-   * @name notMatch
-   * @param {Mixed} value
-   * @param {RegExp} regexp
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notMatch = function (exp, re, msg) {
-    new Assertion(exp, msg).to.not.match(re);
-  };
-
-  /**
-   * ### .property(object, property, [message])
-   *
-   * Asserts that `object` has a property named by `property`.
-   *
-   *     assert.property({ tea: { green: 'matcha' }}, 'tea');
-   *
-   * @name property
-   * @param {Object} object
-   * @param {String} property
-   * @param {String} message
-   * @api public
-   */
-
-  assert.property = function (obj, prop, msg) {
-    new Assertion(obj, msg).to.have.property(prop);
-  };
-
-  /**
-   * ### .notProperty(object, property, [message])
-   *
-   * Asserts that `object` does _not_ have a property named by `property`.
-   *
-   *     assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');
-   *
-   * @name notProperty
-   * @param {Object} object
-   * @param {String} property
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notProperty = function (obj, prop, msg) {
-    new Assertion(obj, msg).to.not.have.property(prop);
-  };
-
-  /**
-   * ### .deepProperty(object, property, [message])
-   *
-   * Asserts that `object` has a property named by `property`, which can be a
-   * string using dot- and bracket-notation for deep reference.
-   *
-   *     assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');
-   *
-   * @name deepProperty
-   * @param {Object} object
-   * @param {String} property
-   * @param {String} message
-   * @api public
-   */
-
-  assert.deepProperty = function (obj, prop, msg) {
-    new Assertion(obj, msg).to.have.deep.property(prop);
-  };
-
-  /**
-   * ### .notDeepProperty(object, property, [message])
-   *
-   * Asserts that `object` does _not_ have a property named by `property`, which
-   * can be a string using dot- and bracket-notation for deep reference.
-   *
-   *     assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');
-   *
-   * @name notDeepProperty
-   * @param {Object} object
-   * @param {String} property
-   * @param {String} message
-   * @api public
-   */
-
-  assert.notDeepProperty = function (obj, prop, msg) {
-    new Assertion(obj, msg).to.not.have.deep.property(prop);
-  };
-
-  /**
-   * ### .propertyVal(object, property, value, [message])
-   *
-   * Asserts that `object` has a property named by `property` with value given
-   * by `value`.
-   *
-   *     assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');
-   *
-   * @name propertyVal
-   * @param {Object} object
-   * @param {String} property
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.propertyVal = function (obj, prop, val, msg) {
-    new Assertion(obj, msg).to.have.property(prop, val);
-  };
-
-  /**
-   * ### .propertyNotVal(object, property, value, [message])
-   *
-   * Asserts that `object` has a property named by `property`, but with a value
-   * different from that given by `value`.
-   *
-   *     assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');
-   *
-   * @name propertyNotVal
-   * @param {Object} object
-   * @param {String} property
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.propertyNotVal = function (obj, prop, val, msg) {
-    new Assertion(obj, msg).to.not.have.property(prop, val);
-  };
-
-  /**
-   * ### .deepPropertyVal(object, property, value, [message])
-   *
-   * Asserts that `object` has a property named by `property` with value given
-   * by `value`. `property` can use dot- and bracket-notation for deep
-   * reference.
-   *
-   *     assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');
-   *
-   * @name deepPropertyVal
-   * @param {Object} object
-   * @param {String} property
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.deepPropertyVal = function (obj, prop, val, msg) {
-    new Assertion(obj, msg).to.have.deep.property(prop, val);
-  };
-
-  /**
-   * ### .deepPropertyNotVal(object, property, value, [message])
-   *
-   * Asserts that `object` has a property named by `property`, but with a value
-   * different from that given by `value`. `property` can use dot- and
-   * bracket-notation for deep reference.
-   *
-   *     assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');
-   *
-   * @name deepPropertyNotVal
-   * @param {Object} object
-   * @param {String} property
-   * @param {Mixed} value
-   * @param {String} message
-   * @api public
-   */
-
-  assert.deepPropertyNotVal = function (obj, prop, val, msg) {
-    new Assertion(obj, msg).to.not.have.deep.property(prop, val);
-  };
-
-  /**
-   * ### .lengthOf(object, length, [message])
-   *
-   * Asserts that `object` has a `length` property with the expected value.
-   *
-   *     assert.lengthOf([1,2,3], 3, 'array has length of 3');
-   *     assert.lengthOf('foobar', 5, 'string has length of 6');
-   *
-   * @name lengthOf
-   * @param {Mixed} object
-   * @param {Number} length
-   * @param {String} message
-   * @api public
-   */
-
-  assert.lengthOf = function (exp, len, msg) {
-    new Assertion(exp, msg).to.have.length(len);
-  };
-
-  /**
-   * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])
-   *
-   * Asserts that `function` will throw an error that is an instance of
-   * `constructor`, or alternately that it will throw an error with message
-   * matching `regexp`.
-   *
-   *     assert.throw(fn, 'function throws a reference error');
-   *     assert.throw(fn, /function throws a reference error/);
-   *     assert.throw(fn, ReferenceError);
-   *     assert.throw(fn, ReferenceError, 'function throws a reference error');
-   *     assert.throw(fn, ReferenceError, /function throws a reference error/);
-   *
-   * @name throws
-   * @alias throw
-   * @alias Throw
-   * @param {Function} function
-   * @param {ErrorConstructor} constructor
-   * @param {RegExp} regexp
-   * @param {String} message
-   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
-   * @api public
-   */
-
-  assert.Throw = function (fn, errt, errs, msg) {
-    if ('string' === typeof errt || errt instanceof RegExp) {
-      errs = errt;
-      errt = null;
-    }
-
-    new Assertion(fn, msg).to.Throw(errt, errs);
-  };
-
-  /**
-   * ### .doesNotThrow(function, [constructor/regexp], [message])
-   *
-   * Asserts that `function` will _not_ throw an error that is an instance of
-   * `constructor`, or alternately that it will not throw an error with message
-   * matching `regexp`.
-   *
-   *     assert.doesNotThrow(fn, Error, 'function does not throw');
-   *
-   * @name doesNotThrow
-   * @param {Function} function
-   * @param {ErrorConstructor} constructor
-   * @param {RegExp} regexp
-   * @param {String} message
-   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
-   * @api public
-   */
-
-  assert.doesNotThrow = function (fn, type, msg) {
-    if ('string' === typeof type) {
-      msg = type;
-      type = null;
-    }
-
-    new Assertion(fn, msg).to.not.Throw(type);
-  };
-
-  /**
-   * ### .operator(val1, operator, val2, [message])
-   *
-   * Compares two values using `operator`.
-   *
-   *     assert.operator(1, '<', 2, 'everything is ok');
-   *     assert.operator(1, '>', 2, 'this will fail');
-   *
-   * @name operator
-   * @param {Mixed} val1
-   * @param {String} operator
-   * @param {Mixed} val2
-   * @param {String} message
-   * @api public
-   */
-
-  assert.operator = function (val, operator, val2, msg) {
-    if (!~['==', '===', '>', '>=', '<', '<=', '!=', '!=='].indexOf(operator)) {
-      throw new Error('Invalid operator "' + operator + '"');
-    }
-    var test = new Assertion(eval(val + operator + val2), msg);
-    test.assert(
-        true === flag(test, 'object')
-      , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)
-      , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );
-  };
-
-  /**
-   * ### .closeTo(actual, expected, delta, [message])
-   *
-   * Asserts that the target is equal `expected`, to within a +/- `delta` range.
-   *
-   *     assert.closeTo(1.5, 1, 0.5, 'numbers are close');
-   *
-   * @name closeTo
-   * @param {Number} actual
-   * @param {Number} expected
-   * @param {Number} delta
-   * @param {String} message
-   * @api public
-   */
-
-  assert.closeTo = function (act, exp, delta, msg) {
-    new Assertion(act, msg).to.be.closeTo(exp, delta);
-  };
-
-  /**
-   * ### .sameMembers(set1, set2, [message])
-   *
-   * Asserts that `set1` and `set2` have the same members.
-   * Order is not taken into account.
-   *
-   *     assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');
-   *
-   * @name sameMembers
-   * @param {Array} superset
-   * @param {Array} subset
-   * @param {String} message
-   * @api public
-   */
-
-  assert.sameMembers = function (set1, set2, msg) {
-    new Assertion(set1, msg).to.have.same.members(set2);
-  }
-
-  /**
-   * ### .includeMembers(superset, subset, [message])
-   *
-   * Asserts that `subset` is included in `superset`.
-   * Order is not taken into account.
-   *
-   *     assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');
-   *
-   * @name includeMembers
-   * @param {Array} superset
-   * @param {Array} subset
-   * @param {String} message
-   * @api public
-   */
-
-  assert.includeMembers = function (superset, subset, msg) {
-    new Assertion(superset, msg).to.include.members(subset);
-  }
-
-  /*!
-   * Undocumented / untested
-   */
-
-  assert.ifError = function (val, msg) {
-    new Assertion(val, msg).to.not.be.ok;
-  };
-
-  /*!
-   * Aliases.
-   */
-
-  (function alias(name, as){
-    assert[as] = assert[name];
-    return alias;
-  })
-  ('Throw', 'throw')
-  ('Throw', 'throws');
-};
-
-});
-require.register("chai/lib/chai/interface/expect.js", function(exports, require, module){
-/*!
- * chai
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-module.exports = function (chai, util) {
-  chai.expect = function (val, message) {
-    return new chai.Assertion(val, message);
-  };
-};
-
-
-});
-require.register("chai/lib/chai/interface/should.js", function(exports, require, module){
-/*!
- * chai
- * Copyright(c) 2011-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-module.exports = function (chai, util) {
-  var Assertion = chai.Assertion;
-
-  function loadShould () {
-    // modify Object.prototype to have `should`
-    Object.defineProperty(Object.prototype, 'should',
-      {
-        set: function (value) {
-          // See https://github.com/chaijs/chai/issues/86: this makes
-          // `whatever.should = someValue` actually set `someValue`, which is
-          // especially useful for `global.should = require('chai').should()`.
-          //
-          // Note that we have to use [[DefineProperty]] instead of [[Put]]
-          // since otherwise we would trigger this very setter!
-          Object.defineProperty(this, 'should', {
-            value: value,
-            enumerable: true,
-            configurable: true,
-            writable: true
-          });
-        }
-      , get: function(){
-          if (this instanceof String || this instanceof Number) {
-            return new Assertion(this.constructor(this));
-          } else if (this instanceof Boolean) {
-            return new Assertion(this == true);
-          }
-          return new Assertion(this);
-        }
-      , configurable: true
-    });
-
-    var should = {};
-
-    should.equal = function (val1, val2, msg) {
-      new Assertion(val1, msg).to.equal(val2);
-    };
-
-    should.Throw = function (fn, errt, errs, msg) {
-      new Assertion(fn, msg).to.Throw(errt, errs);
-    };
-
-    should.exist = function (val, msg) {
-      new Assertion(val, msg).to.exist;
-    }
-
-    // negation
-    should.not = {}
-
-    should.not.equal = function (val1, val2, msg) {
-      new Assertion(val1, msg).to.not.equal(val2);
-    };
-
-    should.not.Throw = function (fn, errt, errs, msg) {
-      new Assertion(fn, msg).to.not.Throw(errt, errs);
-    };
-
-    should.not.exist = function (val, msg) {
-      new Assertion(val, msg).to.not.exist;
-    }
-
-    should['throw'] = should['Throw'];
-    should.not['throw'] = should.not['Throw'];
-
-    return should;
-  };
-
-  chai.should = loadShould;
-  chai.Should = loadShould;
-};
-
-});
-require.register("chai/lib/chai/utils/addChainableMethod.js", function(exports, require, module){
-/*!
- * Chai - addChainingMethod utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Module dependencies
- */
-
-var transferFlags = require('./transferFlags');
-
-/*!
- * Module variables
- */
-
-// Check whether `__proto__` is supported
-var hasProtoSupport = '__proto__' in Object;
-
-// Without `__proto__` support, this module will need to add properties to a function.
-// However, some Function.prototype methods cannot be overwritten,
-// and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).
-var excludeNames = /^(?:length|name|arguments|caller)$/;
-
-// Cache `Function` properties
-var call  = Function.prototype.call,
-    apply = Function.prototype.apply;
-
-/**
- * ### addChainableMethod (ctx, name, method, chainingBehavior)
- *
- * Adds a method to an object, such that the method can also be chained.
- *
- *     utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
- *       var obj = utils.flag(this, 'object');
- *       new chai.Assertion(obj).to.be.equal(str);
- *     });
- *
- * Can also be accessed directly from `chai.Assertion`.
- *
- *     chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
- *
- * The result can then be used as both a method assertion, executing both `method` and
- * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.
- *
- *     expect(fooStr).to.be.foo('bar');
- *     expect(fooStr).to.be.foo.equal('foo');
- *
- * @param {Object} ctx object to which the method is added
- * @param {String} name of method to add
- * @param {Function} method function to be used for `name`, when called
- * @param {Function} chainingBehavior function to be called every time the property is accessed
- * @name addChainableMethod
- * @api public
- */
-
-module.exports = function (ctx, name, method, chainingBehavior) {
-  if (typeof chainingBehavior !== 'function')
-    chainingBehavior = function () { };
-
-  Object.defineProperty(ctx, name,
-    { get: function () {
-        chainingBehavior.call(this);
-
-        var assert = function () {
-          var result = method.apply(this, arguments);
-          return result === undefined ? this : result;
-        };
-
-        // Use `__proto__` if available
-        if (hasProtoSupport) {
-          // Inherit all properties from the object by replacing the `Function` prototype
-          var prototype = assert.__proto__ = Object.create(this);
-          // Restore the `call` and `apply` methods from `Function`
-          prototype.call = call;
-          prototype.apply = apply;
-        }
-        // Otherwise, redefine all properties (slow!)
-        else {
-          var asserterNames = Object.getOwnPropertyNames(ctx);
-          asserterNames.forEach(function (asserterName) {
-            if (!excludeNames.test(asserterName)) {
-              var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
-              Object.defineProperty(assert, asserterName, pd);
-            }
-          });
-        }
-
-        transferFlags(this, assert);
-        return assert;
-      }
-    , configurable: true
-  });
-};
-
-});
-require.register("chai/lib/chai/utils/addMethod.js", function(exports, require, module){
-/*!
- * Chai - addMethod utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### .addMethod (ctx, name, method)
- *
- * Adds a method to the prototype of an object.
- *
- *     utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
- *       var obj = utils.flag(this, 'object');
- *       new chai.Assertion(obj).to.be.equal(str);
- *     });
- *
- * Can also be accessed directly from `chai.Assertion`.
- *
- *     chai.Assertion.addMethod('foo', fn);
- *
- * Then can be used as any other assertion.
- *
- *     expect(fooStr).to.be.foo('bar');
- *
- * @param {Object} ctx object to which the method is added
- * @param {String} name of method to add
- * @param {Function} method function to be used for name
- * @name addMethod
- * @api public
- */
-
-module.exports = function (ctx, name, method) {
-  ctx[name] = function () {
-    var result = method.apply(this, arguments);
-    return result === undefined ? this : result;
-  };
-};
-
-});
-require.register("chai/lib/chai/utils/addProperty.js", function(exports, require, module){
-/*!
- * Chai - addProperty utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### addProperty (ctx, name, getter)
- *
- * Adds a property to the prototype of an object.
- *
- *     utils.addProperty(chai.Assertion.prototype, 'foo', function () {
- *       var obj = utils.flag(this, 'object');
- *       new chai.Assertion(obj).to.be.instanceof(Foo);
- *     });
- *
- * Can also be accessed directly from `chai.Assertion`.
- *
- *     chai.Assertion.addProperty('foo', fn);
- *
- * Then can be used as any other assertion.
- *
- *     expect(myFoo).to.be.foo;
- *
- * @param {Object} ctx object to which the property is added
- * @param {String} name of property to add
- * @param {Function} getter function to be used for name
- * @name addProperty
- * @api public
- */
-
-module.exports = function (ctx, name, getter) {
-  Object.defineProperty(ctx, name,
-    { get: function () {
-        var result = getter.call(this);
-        return result === undefined ? this : result;
-      }
-    , configurable: true
-  });
-};
-
-});
-require.register("chai/lib/chai/utils/eql.js", function(exports, require, module){
-// This is (almost) directly from Node.js assert
-// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/assert.js
-
-module.exports = _deepEqual;
-
-var getEnumerableProperties = require('./getEnumerableProperties');
-
-// for the browser
-var Buffer;
-try {
-  Buffer = require('buffer').Buffer;
-} catch (ex) {
-  Buffer = {
-    isBuffer: function () { return false; }
-  };
-}
-
-function _deepEqual(actual, expected, memos) {
-
-  // 7.1. All identical values are equivalent, as determined by ===.
-  if (actual === expected) {
-    return true;
-
-  } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
-    if (actual.length != expected.length) return false;
-
-    for (var i = 0; i < actual.length; i++) {
-      if (actual[i] !== expected[i]) return false;
-    }
-
-    return true;
-
-  // 7.2. If the expected value is a Date object, the actual value is
-  // equivalent if it is also a Date object that refers to the same time.
-  } else if (actual instanceof Date && expected instanceof Date) {
-    return actual.getTime() === expected.getTime();
-
-  // 7.3. Other pairs that do not both pass typeof value == 'object',
-  // equivalence is determined by ==.
-  } else if (typeof actual != 'object' && typeof expected != 'object') {
-    return actual === expected;
-
-  } else if (actual instanceof RegExp && expected instanceof RegExp){
-    return actual.toString() === expected.toString();
-
-  // 7.4. For all other Object pairs, including Array objects, equivalence is
-  // determined by having the same number of owned properties (as verified
-  // with Object.prototype.hasOwnProperty.call), the same set of keys
-  // (although not necessarily the same order), equivalent values for every
-  // corresponding key, and an identical 'prototype' property. Note: this
-  // accounts for both named and indexed properties on Arrays.
-  } else {
-    return objEquiv(actual, expected, memos);
-  }
-}
-
-function isUndefinedOrNull(value) {
-  return value === null || value === undefined;
-}
-
-function isArguments(object) {
-  return Object.prototype.toString.call(object) == '[object Arguments]';
-}
-
-function objEquiv(a, b, memos) {
-  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
-    return false;
-
-  // an identical 'prototype' property.
-  if (a.prototype !== b.prototype) return false;
-
-  // check if we have already compared a and b
-  var i;
-  if (memos) {
-    for(i = 0; i < memos.length; i++) {
-      if ((memos[i][0] === a && memos[i][1] === b) ||
-          (memos[i][0] === b && memos[i][1] === a))
-        return true;
-    }
-  } else {
-    memos = [];
-  }
-
-  //~~~I've managed to break Object.keys through screwy arguments passing.
-  //   Converting to array solves the problem.
-  if (isArguments(a)) {
-    if (!isArguments(b)) {
-      return false;
-    }
-    a = pSlice.call(a);
-    b = pSlice.call(b);
-    return _deepEqual(a, b, memos);
-  }
-  try {
-    var ka = getEnumerableProperties(a),
-        kb = getEnumerableProperties(b),
-        key;
-  } catch (e) {//happens when one is a string literal and the other isn't
-    return false;
-  }
-
-  // having the same number of owned properties (keys incorporates
-  // hasOwnProperty)
-  if (ka.length != kb.length)
-    return false;
-
-  //the same set of keys (although not necessarily the same order),
-  ka.sort();
-  kb.sort();
-  //~~~cheap key test
-  for (i = ka.length - 1; i >= 0; i--) {
-    if (ka[i] != kb[i])
-      return false;
-  }
-
-  // remember objects we have compared to guard against circular references
-  memos.push([ a, b ]);
-
-  //equivalent values for every corresponding key, and
-  //~~~possibly expensive deep test
-  for (i = ka.length - 1; i >= 0; i--) {
-    key = ka[i];
-    if (!_deepEqual(a[key], b[key], memos)) return false;
-  }
-
-  return true;
-}
-
-});
-require.register("chai/lib/chai/utils/flag.js", function(exports, require, module){
-/*!
- * Chai - flag utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### flag(object ,key, [value])
- *
- * Get or set a flag value on an object. If a
- * value is provided it will be set, else it will
- * return the currently set value or `undefined` if
- * the value is not set.
- *
- *     utils.flag(this, 'foo', 'bar'); // setter
- *     utils.flag(this, 'foo'); // getter, returns `bar`
- *
- * @param {Object} object (constructed Assertion
- * @param {String} key
- * @param {Mixed} value (optional)
- * @name flag
- * @api private
- */
-
-module.exports = function (obj, key, value) {
-  var flags = obj.__flags || (obj.__flags = Object.create(null));
-  if (arguments.length === 3) {
-    flags[key] = value;
-  } else {
-    return flags[key];
-  }
-};
-
-});
-require.register("chai/lib/chai/utils/getActual.js", function(exports, require, module){
-/*!
- * Chai - getActual utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * # getActual(object, [actual])
- *
- * Returns the `actual` value for an Assertion
- *
- * @param {Object} object (constructed Assertion)
- * @param {Arguments} chai.Assertion.prototype.assert arguments
- */
-
-module.exports = function (obj, args) {
-  var actual = args[4];
-  return 'undefined' !== typeof actual ? actual : obj._obj;
-};
-
-});
-require.register("chai/lib/chai/utils/getEnumerableProperties.js", function(exports, require, module){
-/*!
- * Chai - getEnumerableProperties utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### .getEnumerableProperties(object)
- *
- * This allows the retrieval of enumerable property names of an object,
- * inherited or not.
- *
- * @param {Object} object
- * @returns {Array}
- * @name getEnumerableProperties
- * @api public
- */
-
-module.exports = function getEnumerableProperties(object) {
-  var result = [];
-  for (var name in object) {
-    result.push(name);
-  }
-  return result;
-};
-
-});
-require.register("chai/lib/chai/utils/getMessage.js", function(exports, require, module){
-/*!
- * Chai - message composition utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Module dependancies
- */
-
-var flag = require('./flag')
-  , getActual = require('./getActual')
-  , inspect = require('./inspect')
-  , objDisplay = require('./objDisplay');
-
-/**
- * ### .getMessage(object, message, negateMessage)
- *
- * Construct the error message based on flags
- * and template tags. Template tags will return
- * a stringified inspection of the object referenced.
- *
- * Messsage template tags:
- * - `#{this}` current asserted object
- * - `#{act}` actual value
- * - `#{exp}` expected value
- *
- * @param {Object} object (constructed Assertion)
- * @param {Arguments} chai.Assertion.prototype.assert arguments
- * @name getMessage
- * @api public
- */
-
-module.exports = function (obj, args) {
-  var negate = flag(obj, 'negate')
-    , val = flag(obj, 'object')
-    , expected = args[3]
-    , actual = getActual(obj, args)
-    , msg = negate ? args[2] : args[1]
-    , flagMsg = flag(obj, 'message');
-
-  msg = msg || '';
-  msg = msg
-    .replace(/#{this}/g, objDisplay(val))
-    .replace(/#{act}/g, objDisplay(actual))
-    .replace(/#{exp}/g, objDisplay(expected));
-
-  return flagMsg ? flagMsg + ': ' + msg : msg;
-};
-
-});
-require.register("chai/lib/chai/utils/getName.js", function(exports, require, module){
-/*!
- * Chai - getName utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * # getName(func)
- *
- * Gets the name of a function, in a cross-browser way.
- *
- * @param {Function} a function (usually a constructor)
- */
-
-module.exports = function (func) {
-  if (func.name) return func.name;
-
-  var match = /^\s?function ([^(]*)\(/.exec(func);
-  return match && match[1] ? match[1] : "";
-};
-
-});
-require.register("chai/lib/chai/utils/getPathValue.js", function(exports, require, module){
-/*!
- * Chai - getPathValue utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * @see https://github.com/logicalparadox/filtr
- * MIT Licensed
- */
-
-/**
- * ### .getPathValue(path, object)
- *
- * This allows the retrieval of values in an
- * object given a string path.
- *
- *     var obj = {
- *         prop1: {
- *             arr: ['a', 'b', 'c']
- *           , str: 'Hello'
- *         }
- *       , prop2: {
- *             arr: [ { nested: 'Universe' } ]
- *           , str: 'Hello again!'
- *         }
- *     }
- *
- * The following would be the results.
- *
- *     getPathValue('prop1.str', obj); // Hello
- *     getPathValue('prop1.att[2]', obj); // b
- *     getPathValue('prop2.arr[0].nested', obj); // Universe
- *
- * @param {String} path
- * @param {Object} object
- * @returns {Object} value or `undefined`
- * @name getPathValue
- * @api public
- */
-
-var getPathValue = module.exports = function (path, obj) {
-  var parsed = parsePath(path);
-  return _getPathValue(parsed, obj);
-};
-
-/*!
- * ## parsePath(path)
- *
- * Helper function used to parse string object
- * paths. Use in conjunction with `_getPathValue`.
- *
- *      var parsed = parsePath('myobject.property.subprop');
- *
- * ### Paths:
- *
- * * Can be as near infinitely deep and nested
- * * Arrays are also valid using the formal `myobject.document[3].property`.
- *
- * @param {String} path
- * @returns {Object} parsed
- * @api private
- */
-
-function parsePath (path) {
-  var str = path.replace(/\[/g, '.[')
-    , parts = str.match(/(\\\.|[^.]+?)+/g);
-  return parts.map(function (value) {
-    var re = /\[(\d+)\]$/
-      , mArr = re.exec(value)
-    if (mArr) return { i: parseFloat(mArr[1]) };
-    else return { p: value };
-  });
-};
-
-/*!
- * ## _getPathValue(parsed, obj)
- *
- * Helper companion function for `.parsePath` that returns
- * the value located at the parsed address.
- *
- *      var value = getPathValue(parsed, obj);
- *
- * @param {Object} parsed definition from `parsePath`.
- * @param {Object} object to search against
- * @returns {Object|Undefined} value
- * @api private
- */
-
-function _getPathValue (parsed, obj) {
-  var tmp = obj
-    , res;
-  for (var i = 0, l = parsed.length; i < l; i++) {
-    var part = parsed[i];
-    if (tmp) {
-      if ('undefined' !== typeof part.p)
-        tmp = tmp[part.p];
-      else if ('undefined' !== typeof part.i)
-        tmp = tmp[part.i];
-      if (i == (l - 1)) res = tmp;
-    } else {
-      res = undefined;
-    }
-  }
-  return res;
-};
-
-});
-require.register("chai/lib/chai/utils/getProperties.js", function(exports, require, module){
-/*!
- * Chai - getProperties utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### .getProperties(object)
- *
- * This allows the retrieval of property names of an object, enumerable or not,
- * inherited or not.
- *
- * @param {Object} object
- * @returns {Array}
- * @name getProperties
- * @api public
- */
-
-module.exports = function getProperties(object) {
-  var result = Object.getOwnPropertyNames(subject);
-
-  function addProperty(property) {
-    if (result.indexOf(property) === -1) {
-      result.push(property);
-    }
-  }
-
-  var proto = Object.getPrototypeOf(subject);
-  while (proto !== null) {
-    Object.getOwnPropertyNames(proto).forEach(addProperty);
-    proto = Object.getPrototypeOf(proto);
-  }
-
-  return result;
-};
-
-});
-require.register("chai/lib/chai/utils/index.js", function(exports, require, module){
-/*!
- * chai
- * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Main exports
- */
-
-var exports = module.exports = {};
-
-/*!
- * test utility
- */
-
-exports.test = require('./test');
-
-/*!
- * type utility
- */
-
-exports.type = require('./type');
-
-/*!
- * message utility
- */
-
-exports.getMessage = require('./getMessage');
-
-/*!
- * actual utility
- */
-
-exports.getActual = require('./getActual');
-
-/*!
- * Inspect util
- */
-
-exports.inspect = require('./inspect');
-
-/*!
- * Object Display util
- */
-
-exports.objDisplay = require('./objDisplay');
-
-/*!
- * Flag utility
- */
-
-exports.flag = require('./flag');
-
-/*!
- * Flag transferring utility
- */
-
-exports.transferFlags = require('./transferFlags');
-
-/*!
- * Deep equal utility
- */
-
-exports.eql = require('./eql');
-
-/*!
- * Deep path value
- */
-
-exports.getPathValue = require('./getPathValue');
-
-/*!
- * Function name
- */
-
-exports.getName = require('./getName');
-
-/*!
- * add Property
- */
-
-exports.addProperty = require('./addProperty');
-
-/*!
- * add Method
- */
-
-exports.addMethod = require('./addMethod');
-
-/*!
- * overwrite Property
- */
-
-exports.overwriteProperty = require('./overwriteProperty');
-
-/*!
- * overwrite Method
- */
-
-exports.overwriteMethod = require('./overwriteMethod');
-
-/*!
- * Add a chainable method
- */
-
-exports.addChainableMethod = require('./addChainableMethod');
-
-
-});
-require.register("chai/lib/chai/utils/inspect.js", function(exports, require, module){
-// This is (almost) directly from Node.js utils
-// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js
-
-var getName = require('./getName');
-var getProperties = require('./getProperties');
-var getEnumerableProperties = require('./getEnumerableProperties');
-
-module.exports = inspect;
-
-/**
- * Echos the value of a value. Trys to print the value out
- * in the best way possible given the different types.
- *
- * @param {Object} obj The object to print out.
- * @param {Boolean} showHidden Flag that shows hidden (not enumerable)
- *    properties of objects.
- * @param {Number} depth Depth in which to descend in object. Default is 2.
- * @param {Boolean} colors Flag to turn on ANSI escape codes to color the
- *    output. Default is false (no coloring).
- */
-function inspect(obj, showHidden, depth, colors) {
-  var ctx = {
-    showHidden: showHidden,
-    seen: [],
-    stylize: function (str) { return str; }
-  };
-  return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));
-}
-
-// https://gist.github.com/1044128/
-var getOuterHTML = function(element) {
-  if ('outerHTML' in element) return element.outerHTML;
-  var ns = "http://www.w3.org/1999/xhtml";
-  var container = document.createElementNS(ns, '_');
-  var elemProto = (window.HTMLElement || window.Element).prototype;
-  var xmlSerializer = new XMLSerializer();
-  var html;
-  if (document.xmlVersion) {
-    return xmlSerializer.serializeToString(element);
-  } else {
-    container.appendChild(element.cloneNode(false));
-    html = container.innerHTML.replace('><', '>' + element.innerHTML + '<');
-    container.innerHTML = '';
-    return html;
-  }
-};
-
-// Returns true if object is a DOM element.
-var isDOMElement = function (object) {
-  if (typeof HTMLElement === 'object') {
-    return object instanceof HTMLElement;
-  } else {
-    return object &&
-      typeof object === 'object' &&
-      object.nodeType === 1 &&
-      typeof object.nodeName === 'string';
-  }
-};
-
-function formatValue(ctx, value, recurseTimes) {
-  // Provide a hook for user-specified inspect functions.
-  // Check that value is an object with an inspect function on it
-  if (value && typeof value.inspect === 'function' &&
-      // Filter out the util module, it's inspect function is special
-      value.inspect !== exports.inspect &&
-      // Also filter out any prototype objects using the circular check.
-      !(value.constructor && value.constructor.prototype === value)) {
-    return value.inspect(recurseTimes);
-  }
-
-  // Primitive types cannot have properties
-  var primitive = formatPrimitive(ctx, value);
-  if (primitive) {
-    return primitive;
-  }
-
-  // If it's DOM elem, get outer HTML.
-  if (isDOMElement(value)) {
-    return getOuterHTML(value);
-  }
-
-  // Look up the keys of the object.
-  var visibleKeys = getEnumerableProperties(value);
-  var keys = ctx.showHidden ? getProperties(value) : visibleKeys;
-
-  // Some type of object without properties can be shortcutted.
-  // In IE, errors have a single `stack` property, or if they are vanilla `Error`,
-  // a `stack` plus `description` property; ignore those for consistency.
-  if (keys.length === 0 || (isError(value) && (
-      (keys.length === 1 && keys[0] === 'stack') ||
-      (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')
-     ))) {
-    if (typeof value === 'function') {
-      var name = getName(value);
-      var nameSuffix = name ? ': ' + name : '';
-      return ctx.stylize('[Function' + nameSuffix + ']', 'special');
-    }
-    if (isRegExp(value)) {
-      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
-    }
-    if (isDate(value)) {
-      return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');
-    }
-    if (isError(value)) {
-      return formatError(value);
-    }
-  }
-
-  var base = '', array = false, braces = ['{', '}'];
-
-  // Make Array say that they are Array
-  if (isArray(value)) {
-    array = true;
-    braces = ['[', ']'];
-  }
-
-  // Make functions say that they are functions
-  if (typeof value === 'function') {
-    var name = getName(value);
-    var nameSuffix = name ? ': ' + name : '';
-    base = ' [Function' + nameSuffix + ']';
-  }
-
-  // Make RegExps say that they are RegExps
-  if (isRegExp(value)) {
-    base = ' ' + RegExp.prototype.toString.call(value);
-  }
-
-  // Make dates with properties first say the date
-  if (isDate(value)) {
-    base = ' ' + Date.prototype.toUTCString.call(value);
-  }
-
-  // Make error with message first say the error
-  if (isError(value)) {
-    return formatError(value);
-  }
-
-  if (keys.length === 0 && (!array || value.length == 0)) {
-    return braces[0] + base + braces[1];
-  }
-
-  if (recurseTimes < 0) {
-    if (isRegExp(value)) {
-      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
-    } else {
-      return ctx.stylize('[Object]', 'special');
-    }
-  }
-
-  ctx.seen.push(value);
-
-  var output;
-  if (array) {
-    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
-  } else {
-    output = keys.map(function(key) {
-      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
-    });
-  }
-
-  ctx.seen.pop();
-
-  return reduceToSingleString(output, base, braces);
-}
-
-
-function formatPrimitive(ctx, value) {
-  switch (typeof value) {
-    case 'undefined':
-      return ctx.stylize('undefined', 'undefined');
-
-    case 'string':
-      var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
-                                               .replace(/'/g, "\\'")
-                                               .replace(/\\"/g, '"') + '\'';
-      return ctx.stylize(simple, 'string');
-
-    case 'number':
-      return ctx.stylize('' + value, 'number');
-
-    case 'boolean':
-      return ctx.stylize('' + value, 'boolean');
-  }
-  // For some reason typeof null is "object", so special case here.
-  if (value === null) {
-    return ctx.stylize('null', 'null');
-  }
-}
-
-
-function formatError(value) {
-  return '[' + Error.prototype.toString.call(value) + ']';
-}
-
-
-function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
-  var output = [];
-  for (var i = 0, l = value.length; i < l; ++i) {
-    if (Object.prototype.hasOwnProperty.call(value, String(i))) {
-      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
-          String(i), true));
-    } else {
-      output.push('');
-    }
-  }
-  keys.forEach(function(key) {
-    if (!key.match(/^\d+$/)) {
-      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
-          key, true));
-    }
-  });
-  return output;
-}
-
-
-function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
-  var name, str;
-  if (value.__lookupGetter__) {
-    if (value.__lookupGetter__(key)) {
-      if (value.__lookupSetter__(key)) {
-        str = ctx.stylize('[Getter/Setter]', 'special');
-      } else {
-        str = ctx.stylize('[Getter]', 'special');
-      }
-    } else {
-      if (value.__lookupSetter__(key)) {
-        str = ctx.stylize('[Setter]', 'special');
-      }
-    }
-  }
-  if (visibleKeys.indexOf(key) < 0) {
-    name = '[' + key + ']';
-  }
-  if (!str) {
-    if (ctx.seen.indexOf(value[key]) < 0) {
-      if (recurseTimes === null) {
-        str = formatValue(ctx, value[key], null);
-      } else {
-        str = formatValue(ctx, value[key], recurseTimes - 1);
-      }
-      if (str.indexOf('\n') > -1) {
-        if (array) {
-          str = str.split('\n').map(function(line) {
-            return '  ' + line;
-          }).join('\n').substr(2);
-        } else {
-          str = '\n' + str.split('\n').map(function(line) {
-            return '   ' + line;
-          }).join('\n');
-        }
-      }
-    } else {
-      str = ctx.stylize('[Circular]', 'special');
-    }
-  }
-  if (typeof name === 'undefined') {
-    if (array && key.match(/^\d+$/)) {
-      return str;
-    }
-    name = JSON.stringify('' + key);
-    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
-      name = name.substr(1, name.length - 2);
-      name = ctx.stylize(name, 'name');
-    } else {
-      name = name.replace(/'/g, "\\'")
-                 .replace(/\\"/g, '"')
-                 .replace(/(^"|"$)/g, "'");
-      name = ctx.stylize(name, 'string');
-    }
-  }
-
-  return name + ': ' + str;
-}
-
-
-function reduceToSingleString(output, base, braces) {
-  var numLinesEst = 0;
-  var length = output.reduce(function(prev, cur) {
-    numLinesEst++;
-    if (cur.indexOf('\n') >= 0) numLinesEst++;
-    return prev + cur.length + 1;
-  }, 0);
-
-  if (length > 60) {
-    return braces[0] +
-           (base === '' ? '' : base + '\n ') +
-           ' ' +
-           output.join(',\n  ') +
-           ' ' +
-           braces[1];
-  }
-
-  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
-}
-
-function isArray(ar) {
-  return Array.isArray(ar) ||
-         (typeof ar === 'object' && objectToString(ar) === '[object Array]');
-}
-
-function isRegExp(re) {
-  return typeof re === 'object' && objectToString(re) === '[object RegExp]';
-}
-
-function isDate(d) {
-  return typeof d === 'object' && objectToString(d) === '[object Date]';
-}
-
-function isError(e) {
-  return typeof e === 'object' && objectToString(e) === '[object Error]';
-}
-
-function objectToString(o) {
-  return Object.prototype.toString.call(o);
-}
-
-});
-require.register("chai/lib/chai/utils/objDisplay.js", function(exports, require, module){
-/*!
- * Chai - flag utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Module dependancies
- */
-
-var inspect = require('./inspect');
-
-/**
- * ### .objDisplay (object)
- *
- * Determines if an object or an array matches
- * criteria to be inspected in-line for error
- * messages or should be truncated.
- *
- * @param {Mixed} javascript object to inspect
- * @name objDisplay
- * @api public
- */
-
-module.exports = function (obj) {
-  var str = inspect(obj)
-    , type = Object.prototype.toString.call(obj);
-
-  if (str.length >= 40) {
-    if (type === '[object Function]') {
-      return !obj.name || obj.name === ''
-        ? '[Function]'
-        : '[Function: ' + obj.name + ']';
-    } else if (type === '[object Array]') {
-      return '[ Array(' + obj.length + ') ]';
-    } else if (type === '[object Object]') {
-      var keys = Object.keys(obj)
-        , kstr = keys.length > 2
-          ? keys.splice(0, 2).join(', ') + ', ...'
-          : keys.join(', ');
-      return '{ Object (' + kstr + ') }';
-    } else {
-      return str;
-    }
-  } else {
-    return str;
-  }
-};
-
-});
-require.register("chai/lib/chai/utils/overwriteMethod.js", function(exports, require, module){
-/*!
- * Chai - overwriteMethod utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### overwriteMethod (ctx, name, fn)
- *
- * Overwites an already existing method and provides
- * access to previous function. Must return function
- * to be used for name.
- *
- *     utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
- *       return function (str) {
- *         var obj = utils.flag(this, 'object');
- *         if (obj instanceof Foo) {
- *           new chai.Assertion(obj.value).to.equal(str);
- *         } else {
- *           _super.apply(this, arguments);
- *         }
- *       }
- *     });
- *
- * Can also be accessed directly from `chai.Assertion`.
- *
- *     chai.Assertion.overwriteMethod('foo', fn);
- *
- * Then can be used as any other assertion.
- *
- *     expect(myFoo).to.equal('bar');
- *
- * @param {Object} ctx object whose method is to be overwritten
- * @param {String} name of method to overwrite
- * @param {Function} method function that returns a function to be used for name
- * @name overwriteMethod
- * @api public
- */
-
-module.exports = function (ctx, name, method) {
-  var _method = ctx[name]
-    , _super = function () { return this; };
-
-  if (_method && 'function' === typeof _method)
-    _super = _method;
-
-  ctx[name] = function () {
-    var result = method(_super).apply(this, arguments);
-    return result === undefined ? this : result;
-  }
-};
-
-});
-require.register("chai/lib/chai/utils/overwriteProperty.js", function(exports, require, module){
-/*!
- * Chai - overwriteProperty utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### overwriteProperty (ctx, name, fn)
- *
- * Overwites an already existing property getter and provides
- * access to previous value. Must return function to use as getter.
- *
- *     utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
- *       return function () {
- *         var obj = utils.flag(this, 'object');
- *         if (obj instanceof Foo) {
- *           new chai.Assertion(obj.name).to.equal('bar');
- *         } else {
- *           _super.call(this);
- *         }
- *       }
- *     });
- *
- *
- * Can also be accessed directly from `chai.Assertion`.
- *
- *     chai.Assertion.overwriteProperty('foo', fn);
- *
- * Then can be used as any other assertion.
- *
- *     expect(myFoo).to.be.ok;
- *
- * @param {Object} ctx object whose property is to be overwritten
- * @param {String} name of property to overwrite
- * @param {Function} getter function that returns a getter function to be used for name
- * @name overwriteProperty
- * @api public
- */
-
-module.exports = function (ctx, name, getter) {
-  var _get = Object.getOwnPropertyDescriptor(ctx, name)
-    , _super = function () {};
-
-  if (_get && 'function' === typeof _get.get)
-    _super = _get.get
-
-  Object.defineProperty(ctx, name,
-    { get: function () {
-        var result = getter(_super).call(this);
-        return result === undefined ? this : result;
-      }
-    , configurable: true
-  });
-};
-
-});
-require.register("chai/lib/chai/utils/test.js", function(exports, require, module){
-/*!
- * Chai - test utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Module dependancies
- */
-
-var flag = require('./flag');
-
-/**
- * # test(object, expression)
- *
- * Test and object for expression.
- *
- * @param {Object} object (constructed Assertion)
- * @param {Arguments} chai.Assertion.prototype.assert arguments
- */
-
-module.exports = function (obj, args) {
-  var negate = flag(obj, 'negate')
-    , expr = args[0];
-  return negate ? !expr : expr;
-};
-
-});
-require.register("chai/lib/chai/utils/transferFlags.js", function(exports, require, module){
-/*!
- * Chai - transferFlags utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/**
- * ### transferFlags(assertion, object, includeAll = true)
- *
- * Transfer all the flags for `assertion` to `object`. If
- * `includeAll` is set to `false`, then the base Chai
- * assertion flags (namely `object`, `ssfi`, and `message`)
- * will not be transferred.
- *
- *
- *     var newAssertion = new Assertion();
- *     utils.transferFlags(assertion, newAssertion);
- *
- *     var anotherAsseriton = new Assertion(myObj);
- *     utils.transferFlags(assertion, anotherAssertion, false);
- *
- * @param {Assertion} assertion the assertion to transfer the flags from
- * @param {Object} object the object to transfer the flags too; usually a new assertion
- * @param {Boolean} includeAll
- * @name getAllFlags
- * @api private
- */
-
-module.exports = function (assertion, object, includeAll) {
-  var flags = assertion.__flags || (assertion.__flags = Object.create(null));
-
-  if (!object.__flags) {
-    object.__flags = Object.create(null);
-  }
-
-  includeAll = arguments.length === 3 ? includeAll : true;
-
-  for (var flag in flags) {
-    if (includeAll ||
-        (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {
-      object.__flags[flag] = flags[flag];
-    }
-  }
-};
-
-});
-require.register("chai/lib/chai/utils/type.js", function(exports, require, module){
-/*!
- * Chai - type utility
- * Copyright(c) 2012-2013 Jake Luer <jake@alogicalparadox.com>
- * MIT Licensed
- */
-
-/*!
- * Detectable javascript natives
- */
-
-var natives = {
-    '[object Arguments]': 'arguments'
-  , '[object Array]': 'array'
-  , '[object Date]': 'date'
-  , '[object Function]': 'function'
-  , '[object Number]': 'number'
-  , '[object RegExp]': 'regexp'
-  , '[object String]': 'string'
-};
-
-/**
- * ### type(object)
- *
- * Better implementation of `typeof` detection that can
- * be used cross-browser. Handles the inconsistencies of
- * Array, `null`, and `undefined` detection.
- *
- *     utils.type({}) // 'object'
- *     utils.type(null) // `null'
- *     utils.type(undefined) // `undefined`
- *     utils.type([]) // `array`
- *
- * @param {Mixed} object to detect type of
- * @name type
- * @api private
- */
-
-module.exports = function (obj) {
-  var str = Object.prototype.toString.call(obj);
-  if (natives[str]) return natives[str];
-  if (obj === null) return 'null';
-  if (obj === undefined) return 'undefined';
-  if (obj === Object(obj)) return 'object';
-  return typeof obj;
-};
-
-});
-require.alias("chai/index.js", "chai/index.js");
-
-if (typeof exports == "object") {
-  module.exports = require("chai");
-} else if (typeof define == "function" && define.amd) {
-  define(function(){ return require("chai"); });
-} else {
-  this["chai"] = require("chai");
-}})();
\ No newline at end of file
diff --git a/test/deps/mocha.css b/test/deps/mocha.css
deleted file mode 100644
index e6aa700..0000000
--- a/test/deps/mocha.css
+++ /dev/null
@@ -1,250 +0,0 @@
-@charset "utf-8";
-
-body {
-  margin:0;
-}
-
-#mocha {
-  font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
-  margin: 60px 50px;
-}
-
-#mocha ul, #mocha li {
-  margin: 0;
-  padding: 0;
-}
-
-#mocha ul {
-  list-style: none;
-}
-
-#mocha h1, #mocha h2 {
-  margin: 0;
-}
-
-#mocha h1 {
-  margin-top: 15px;
-  font-size: 1em;
-  font-weight: 200;
-}
-
-#mocha h1 a {
-  text-decoration: none;
-  color: inherit;
-}
-
-#mocha h1 a:hover {
-  text-decoration: underline;
-}
-
-#mocha .suite .suite h1 {
-  margin-top: 0;
-  font-size: .8em;
-}
-
-#mocha .hidden {
-  display: none;
-}
-
-#mocha h2 {
-  font-size: 12px;
-  font-weight: normal;
-  cursor: pointer;
-}
-
-#mocha .suite {
-  margin-left: 15px;
-}
-
-#mocha .test {
-  margin-left: 15px;
-  overflow: hidden;
-}
-
-#mocha .test.pending:hover h2::after {
-  content: '(pending)';
-  font-family: arial, sans-serif;
-}
-
-#mocha .test.pass.medium .duration {
-  background: #C09853;
-}
-
-#mocha .test.pass.slow .duration {
-  background: #B94A48;
-}
-
-#mocha .test.pass::before {
-  content: '✓';
-  font-size: 12px;
-  display: block;
-  float: left;
-  margin-right: 5px;
-  color: #00d6b2;
-}
-
-#mocha .test.pass .duration {
-  font-size: 9px;
-  margin-left: 5px;
-  padding: 2px 5px;
-  color: white;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
-  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
-  box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  -ms-border-radius: 5px;
-  -o-border-radius: 5px;
-  border-radius: 5px;
-}
-
-#mocha .test.pass.fast .duration {
-  display: none;
-}
-
-#mocha .test.pending {
-  color: #0b97c4;
-}
-
-#mocha .test.pending::before {
-  content: '◦';
-  color: #0b97c4;
-}
-
-#mocha .test.fail {
-  color: #c00;
-}
-
-#mocha .test.fail pre {
-  color: black;
-}
-
-#mocha .test.fail::before {
-  content: '✖';
-  font-size: 12px;
-  display: block;
-  float: left;
-  margin-right: 5px;
-  color: #c00;
-}
-
-#mocha .test pre.error {
-  color: #c00;
-  max-height: 300px;
-  overflow: auto;
-}
-
-#mocha .test pre {
-  display: block;
-  float: left;
-  clear: left;
-  font: 12px/1.5 monaco, monospace;
-  margin: 5px;
-  padding: 15px;
-  border: 1px solid #eee;
-  border-bottom-color: #ddd;
-  -webkit-border-radius: 3px;
-  -webkit-box-shadow: 0 1px 3px #eee;
-  -moz-border-radius: 3px;
-  -moz-box-shadow: 0 1px 3px #eee;
-}
-
-#mocha .test h2 {
-  position: relative;
-}
-
-#mocha .test a.replay {
-  position: absolute;
-  top: 3px;
-  right: 0;
-  text-decoration: none;
-  vertical-align: middle;
-  display: block;
-  width: 15px;
-  height: 15px;
-  line-height: 15px;
-  text-align: center;
-  background: #eee;
-  font-size: 15px;
-  -moz-border-radius: 15px;
-  border-radius: 15px;
-  -webkit-transition: opacity 200ms;
-  -moz-transition: opacity 200ms;
-  transition: opacity 200ms;
-  opacity: 0.3;
-  color: #888;
-}
-
-#mocha .test:hover a.replay {
-  opacity: 1;
-}
-
-#mocha-report.pass .test.fail {
-  display: none;
-}
-
-#mocha-report.fail .test.pass {
-  display: none;
-}
-
-#mocha-error {
-  color: #c00;
-  font-size: 1.5em;
-  font-weight: 100;
-  letter-spacing: 1px;
-}
-
-#mocha-stats {
-  position: fixed;
-  top: 15px;
-  right: 10px;
-  font-size: 12px;
-  margin: 0;
-  color: #888;
-}
-
-#mocha-stats .progress {
-  float: right;
-  padding-top: 0;
-}
-
-#mocha-stats em {
-  color: black;
-}
-
-#mocha-stats a {
-  text-decoration: none;
-  color: inherit;
-}
-
-#mocha-stats a:hover {
-  border-bottom: 1px solid #eee;
-}
-
-#mocha-stats li {
-  display: inline-block;
-  margin: 0 5px;
-  list-style: none;
-  padding-top: 11px;
-}
-
-#mocha-stats canvas {
-  width: 40px;
-  height: 40px;
-}
-
-#mocha code .comment { color: #ddd }
-#mocha code .init { color: #2F6FAD }
-#mocha code .string { color: #5890AD }
-#mocha code .keyword { color: #8A6343 }
-#mocha code .number { color: #2F6FAD }
-
-@media screen and (max-device-width: 480px) {
-  #mocha  {
-    margin: 60px 0px;
-  }
-
-  #mocha #stats {
-    position: absolute;
-  }
-}
diff --git a/test/deps/mocha.js b/test/deps/mocha.js
deleted file mode 100644
index 2b35a88..0000000
--- a/test/deps/mocha.js
+++ /dev/null
@@ -1,5373 +0,0 @@
-;(function(){
-
-// CommonJS require()
-
-function require(p){
-    var path = require.resolve(p)
-      , mod = require.modules[path];
-    if (!mod) throw new Error('failed to require "' + p + '"');
-    if (!mod.exports) {
-      mod.exports = {};
-      mod.call(mod.exports, mod, mod.exports, require.relative(path));
-    }
-    return mod.exports;
-  }
-
-require.modules = {};
-
-require.resolve = function (path){
-    var orig = path
-      , reg = path + '.js'
-      , index = path + '/index.js';
-    return require.modules[reg] && reg
-      || require.modules[index] && index
-      || orig;
-  };
-
-require.register = function (path, fn){
-    require.modules[path] = fn;
-  };
-
-require.relative = function (parent) {
-    return function(p){
-      if ('.' != p.charAt(0)) return require(p);
-
-      var path = parent.split('/')
-        , segs = p.split('/');
-      path.pop();
-
-      for (var i = 0; i < segs.length; i++) {
-        var seg = segs[i];
-        if ('..' == seg) path.pop();
-        else if ('.' != seg) path.push(seg);
-      }
-
-      return require(path.join('/'));
-    };
-  };
-
-
-require.register("browser/debug.js", function(module, exports, require){
-
-module.exports = function(type){
-  return function(){
-  }
-};
-
-}); // module: browser/debug.js
-
-require.register("browser/diff.js", function(module, exports, require){
-/* See license.txt for terms of usage */
-
-/*
- * Text diff implementation.
- * 
- * This library supports the following APIS:
- * JsDiff.diffChars: Character by character diff
- * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace
- * JsDiff.diffLines: Line based diff
- * 
- * JsDiff.diffCss: Diff targeted at CSS content
- * 
- * These methods are based on the implementation proposed in
- * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986).
- * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927
- */
-var JsDiff = (function() {
-  function clonePath(path) {
-    return { newPos: path.newPos, components: path.components.slice(0) };
-  }
-  function removeEmpty(array) {
-    var ret = [];
-    for (var i = 0; i < array.length; i++) {
-      if (array[i]) {
-        ret.push(array[i]);
-      }
-    }
-    return ret;
-  }
-  function escapeHTML(s) {
-    var n = s;
-    n = n.replace(/&/g, "&amp;");
-    n = n.replace(/</g, "&lt;");
-    n = n.replace(/>/g, "&gt;");
-    n = n.replace(/"/g, "&quot;");
-
-    return n;
-  }
-
-
-  var fbDiff = function(ignoreWhitespace) {
-    this.ignoreWhitespace = ignoreWhitespace;
-  };
-  fbDiff.prototype = {
-      diff: function(oldString, newString) {
-        // Handle the identity case (this is due to unrolling editLength == 0
-        if (newString == oldString) {
-          return [{ value: newString }];
-        }
-        if (!newString) {
-          return [{ value: oldString, removed: true }];
-        }
-        if (!oldString) {
-          return [{ value: newString, added: true }];
-        }
-
-        newString = this.tokenize(newString);
-        oldString = this.tokenize(oldString);
-
-        var newLen = newString.length, oldLen = oldString.length;
-        var maxEditLength = newLen + oldLen;
-        var bestPath = [{ newPos: -1, components: [] }];
-
-        // Seed editLength = 0
-        var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
-        if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) {
-          return bestPath[0].components;
-        }
-
-        for (var editLength = 1; editLength <= maxEditLength; editLength++) {
-          for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) {
-            var basePath;
-            var addPath = bestPath[diagonalPath-1],
-                removePath = bestPath[diagonalPath+1];
-            oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
-            if (addPath) {
-              // No one else is going to attempt to use this value, clear it
-              bestPath[diagonalPath-1] = undefined;
-            }
-
-            var canAdd = addPath && addPath.newPos+1 < newLen;
-            var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;
-            if (!canAdd && !canRemove) {
-              bestPath[diagonalPath] = undefined;
-              continue;
-            }
-
-            // Select the diagonal that we want to branch from. We select the prior
-            // path whose position in the new string is the farthest from the origin
-            // and does not pass the bounds of the diff graph
-            if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {
-              basePath = clonePath(removePath);
-              this.pushComponent(basePath.components, oldString[oldPos], undefined, true);
-            } else {
-              basePath = clonePath(addPath);
-              basePath.newPos++;
-              this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined);
-            }
-
-            var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath);
-
-            if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) {
-              return basePath.components;
-            } else {
-              bestPath[diagonalPath] = basePath;
-            }
-          }
-        }
-      },
-
-      pushComponent: function(components, value, added, removed) {
-        var last = components[components.length-1];
-        if (last && last.added === added && last.removed === removed) {
-          // We need to clone here as the component clone operation is just
-          // as shallow array clone
-          components[components.length-1] =
-            {value: this.join(last.value, value), added: added, removed: removed };
-        } else {
-          components.push({value: value, added: added, removed: removed });
-        }
-      },
-      extractCommon: function(basePath, newString, oldString, diagonalPath) {
-        var newLen = newString.length,
-            oldLen = oldString.length,
-            newPos = basePath.newPos,
-            oldPos = newPos - diagonalPath;
-        while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) {
-          newPos++;
-          oldPos++;
-          
-          this.pushComponent(basePath.components, newString[newPos], undefined, undefined);
-        }
-        basePath.newPos = newPos;
-        return oldPos;
-      },
-
-      equals: function(left, right) {
-        var reWhitespace = /\S/;
-        if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) {
-          return true;
-        } else {
-          return left == right;
-        }
-      },
-      join: function(left, right) {
-        return left + right;
-      },
-      tokenize: function(value) {
-        return value;
-      }
-  };
-  
-  var CharDiff = new fbDiff();
-  
-  var WordDiff = new fbDiff(true);
-  WordDiff.tokenize = function(value) {
-    return removeEmpty(value.split(/(\s+|\b)/));
-  };
-  
-  var CssDiff = new fbDiff(true);
-  CssDiff.tokenize = function(value) {
-    return removeEmpty(value.split(/([{}:;,]|\s+)/));
-  };
-  
-  var LineDiff = new fbDiff();
-  LineDiff.tokenize = function(value) {
-    return value.split(/^/m);
-  };
-  
-  return {
-    diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); },
-    diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); },
-    diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); },
-
-    diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); },
-
-    createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) {
-      var ret = [];
-
-      ret.push("Index: " + fileName);
-      ret.push("===================================================================");
-      ret.push("--- " + fileName + (typeof oldHeader === "undefined" ? "" : "\t" + oldHeader));
-      ret.push("+++ " + fileName + (typeof newHeader === "undefined" ? "" : "\t" + newHeader));
-
-      var diff = LineDiff.diff(oldStr, newStr);
-      if (!diff[diff.length-1].value) {
-        diff.pop();   // Remove trailing newline add
-      }
-      diff.push({value: "", lines: []});   // Append an empty value to make cleanup easier
-
-      function contextLines(lines) {
-        return lines.map(function(entry) { return ' ' + entry; });
-      }
-      function eofNL(curRange, i, current) {
-        var last = diff[diff.length-2],
-            isLast = i === diff.length-2,
-            isLastOfType = i === diff.length-3 && (current.added === !last.added || current.removed === !last.removed);
-
-        // Figure out if this is the last line for the given file and missing NL
-        if (!/\n$/.test(current.value) && (isLast || isLastOfType)) {
-          curRange.push('\\ No newline at end of file');
-        }
-      }
-
-      var oldRangeStart = 0, newRangeStart = 0, curRange = [],
-          oldLine = 1, newLine = 1;
-      for (var i = 0; i < diff.length; i++) {
-        var current = diff[i],
-            lines = current.lines || current.value.replace(/\n$/, "").split("\n");
-        current.lines = lines;
-
-        if (current.added || current.removed) {
-          if (!oldRangeStart) {
-            var prev = diff[i-1];
-            oldRangeStart = oldLine;
-            newRangeStart = newLine;
-            
-            if (prev) {
-              curRange = contextLines(prev.lines.slice(-4));
-              oldRangeStart -= curRange.length;
-              newRangeStart -= curRange.length;
-            }
-          }
-          curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?"+":"-") + entry; }));
-          eofNL(curRange, i, current);
-
-          if (current.added) {
-            newLine += lines.length;
-          } else {
-            oldLine += lines.length;
-          }
-        } else {
-          if (oldRangeStart) {
-            // Close out any changes that have been output (or join overlapping)
-            if (lines.length <= 8 && i < diff.length-2) {
-              // Overlapping
-              curRange.push.apply(curRange, contextLines(lines));
-            } else {
-              // end the range and output
-              var contextSize = Math.min(lines.length, 4);
-              ret.push(
-                  "@@ -" + oldRangeStart + "," + (oldLine-oldRangeStart+contextSize)
-                  + " +" + newRangeStart + "," + (newLine-newRangeStart+contextSize)
-                  + " @@");
-              ret.push.apply(ret, curRange);
-              ret.push.apply(ret, contextLines(lines.slice(0, contextSize)));
-              if (lines.length <= 4) {
-                eofNL(ret, i, current);
-              }
-
-              oldRangeStart = 0;  newRangeStart = 0; curRange = [];
-            }
-          }
-          oldLine += lines.length;
-          newLine += lines.length;
-        }
-      }
-
-      return ret.join('\n') + '\n';
-    },
-
-    convertChangesToXML: function(changes){
-      var ret = [];
-      for ( var i = 0; i < changes.length; i++) {
-        var change = changes[i];
-        if (change.added) {
-          ret.push("<ins>");
-        } else if (change.removed) {
-          ret.push("<del>");
-        }
-
-        ret.push(escapeHTML(change.value));
-
-        if (change.added) {
-          ret.push("</ins>");
-        } else if (change.removed) {
-          ret.push("</del>");
-        }
-      }
-      return ret.join("");
-    }
-  };
-})();
-
-if (typeof module !== "undefined") {
-    module.exports = JsDiff;
-}
-
-}); // module: browser/diff.js
-
-require.register("browser/events.js", function(module, exports, require){
-
-/**
- * Module exports.
- */
-
-exports.EventEmitter = EventEmitter;
-
-/**
- * Check if `obj` is an array.
- */
-
-function isArray(obj) {
-  return '[object Array]' == {}.toString.call(obj);
-}
-
-/**
- * Event emitter constructor.
- *
- * @api public
- */
-
-function EventEmitter(){};
-
-/**
- * Adds a listener.
- *
- * @api public
- */
-
-EventEmitter.prototype.on = function (name, fn) {
-  if (!this.$events) {
-    this.$events = {};
-  }
-
-  if (!this.$events[name]) {
-    this.$events[name] = fn;
-  } else if (isArray(this.$events[name])) {
-    this.$events[name].push(fn);
-  } else {
-    this.$events[name] = [this.$events[name], fn];
-  }
-
-  return this;
-};
-
-EventEmitter.prototype.addListener = EventEmitter.prototype.on;
-
-/**
- * Adds a volatile listener.
- *
- * @api public
- */
-
-EventEmitter.prototype.once = function (name, fn) {
-  var self = this;
-
-  function on () {
-    self.removeListener(name, on);
-    fn.apply(this, arguments);
-  };
-
-  on.listener = fn;
-  this.on(name, on);
-
-  return this;
-};
-
-/**
- * Removes a listener.
- *
- * @api public
- */
-
-EventEmitter.prototype.removeListener = function (name, fn) {
-  if (this.$events && this.$events[name]) {
-    var list = this.$events[name];
-
-    if (isArray(list)) {
-      var pos = -1;
-
-      for (var i = 0, l = list.length; i < l; i++) {
-        if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {
-          pos = i;
-          break;
-        }
-      }
-
-      if (pos < 0) {
-        return this;
-      }
-
-      list.splice(pos, 1);
-
-      if (!list.length) {
-        delete this.$events[name];
-      }
-    } else if (list === fn || (list.listener && list.listener === fn)) {
-      delete this.$events[name];
-    }
-  }
-
-  return this;
-};
-
-/**
- * Removes all listeners for an event.
- *
- * @api public
- */
-
-EventEmitter.prototype.removeAllListeners = function (name) {
-  if (name === undefined) {
-    this.$events = {};
-    return this;
-  }
-
-  if (this.$events && this.$events[name]) {
-    this.$events[name] = null;
-  }
-
-  return this;
-};
-
-/**
- * Gets all listeners for a certain event.
- *
- * @api public
- */
-
-EventEmitter.prototype.listeners = function (name) {
-  if (!this.$events) {
-    this.$events = {};
-  }
-
-  if (!this.$events[name]) {
-    this.$events[name] = [];
-  }
-
-  if (!isArray(this.$events[name])) {
-    this.$events[name] = [this.$events[name]];
-  }
-
-  return this.$events[name];
-};
-
-/**
- * Emits an event.
- *
- * @api public
- */
-
-EventEmitter.prototype.emit = function (name) {
-  if (!this.$events) {
-    return false;
-  }
-
-  var handler = this.$events[name];
-
-  if (!handler) {
-    return false;
-  }
-
-  var args = [].slice.call(arguments, 1);
-
-  if ('function' == typeof handler) {
-    handler.apply(this, args);
-  } else if (isArray(handler)) {
-    var listeners = handler.slice();
-
-    for (var i = 0, l = listeners.length; i < l; i++) {
-      listeners[i].apply(this, args);
-    }
-  } else {
-    return false;
-  }
-
-  return true;
-};
-}); // module: browser/events.js
-
-require.register("browser/fs.js", function(module, exports, require){
-
-}); // module: browser/fs.js
-
-require.register("browser/path.js", function(module, exports, require){
-
-}); // module: browser/path.js
-
-require.register("browser/progress.js", function(module, exports, require){
-
-/**
- * Expose `Progress`.
- */
-
-module.exports = Progress;
-
-/**
- * Initialize a new `Progress` indicator.
- */
-
-function Progress() {
-  this.percent = 0;
-  this.size(0);
-  this.fontSize(11);
-  this.font('helvetica, arial, sans-serif');
-}
-
-/**
- * Set progress size to `n`.
- *
- * @param {Number} n
- * @return {Progress} for chaining
- * @api public
- */
-
-Progress.prototype.size = function(n){
-  this._size = n;
-  return this;
-};
-
-/**
- * Set text to `str`.
- *
- * @param {String} str
- * @return {Progress} for chaining
- * @api public
- */
-
-Progress.prototype.text = function(str){
-  this._text = str;
-  return this;
-};
-
-/**
- * Set font size to `n`.
- *
- * @param {Number} n
- * @return {Progress} for chaining
- * @api public
- */
-
-Progress.prototype.fontSize = function(n){
-  this._fontSize = n;
-  return this;
-};
-
-/**
- * Set font `family`.
- *
- * @param {String} family
- * @return {Progress} for chaining
- */
-
-Progress.prototype.font = function(family){
-  this._font = family;
-  return this;
-};
-
-/**
- * Update percentage to `n`.
- *
- * @param {Number} n
- * @return {Progress} for chaining
- */
-
-Progress.prototype.update = function(n){
-  this.percent = n;
-  return this;
-};
-
-/**
- * Draw on `ctx`.
- *
- * @param {CanvasRenderingContext2d} ctx
- * @return {Progress} for chaining
- */
-
-Progress.prototype.draw = function(ctx){
-  var percent = Math.min(this.percent, 100)
-    , size = this._size
-    , half = size / 2
-    , x = half
-    , y = half
-    , rad = half - 1
-    , fontSize = this._fontSize;
-
-  ctx.font = fontSize + 'px ' + this._font;
-
-  var angle = Math.PI * 2 * (percent / 100);
-  ctx.clearRect(0, 0, size, size);
-
-  // outer circle
-  ctx.strokeStyle = '#9f9f9f';
-  ctx.beginPath();
-  ctx.arc(x, y, rad, 0, angle, false);
-  ctx.stroke();
-
-  // inner circle
-  ctx.strokeStyle = '#eee';
-  ctx.beginPath();
-  ctx.arc(x, y, rad - 1, 0, angle, true);
-  ctx.stroke();
-
-  // text
-  var text = this._text || (percent | 0) + '%'
-    , w = ctx.measureText(text).width;
-
-  ctx.fillText(
-      text
-    , x - w / 2 + 1
-    , y + fontSize / 2 - 1);
-
-  return this;
-};
-
-}); // module: browser/progress.js
-
-require.register("browser/tty.js", function(module, exports, require){
-
-exports.isatty = function(){
-  return true;
-};
-
-exports.getWindowSize = function(){
-  return [window.innerHeight, window.innerWidth];
-};
-}); // module: browser/tty.js
-
-require.register("context.js", function(module, exports, require){
-
-/**
- * Expose `Context`.
- */
-
-module.exports = Context;
-
-/**
- * Initialize a new `Context`.
- *
- * @api private
- */
-
-function Context(){}
-
-/**
- * Set or get the context `Runnable` to `runnable`.
- *
- * @param {Runnable} runnable
- * @return {Context}
- * @api private
- */
-
-Context.prototype.runnable = function(runnable){
-  if (0 == arguments.length) return this._runnable;
-  this.test = this._runnable = runnable;
-  return this;
-};
-
-/**
- * Set test timeout `ms`.
- *
- * @param {Number} ms
- * @return {Context} self
- * @api private
- */
-
-Context.prototype.timeout = function(ms){
-  this.runnable().timeout(ms);
-  return this;
-};
-
-/**
- * Set test slowness threshold `ms`.
- *
- * @param {Number} ms
- * @return {Context} self
- * @api private
- */
-
-Context.prototype.slow = function(ms){
-  this.runnable().slow(ms);
-  return this;
-};
-
-/**
- * Inspect the context void of `._runnable`.
- *
- * @return {String}
- * @api private
- */
-
-Context.prototype.inspect = function(){
-  return JSON.stringify(this, function(key, val){
-    if ('_runnable' == key) return;
-    if ('test' == key) return;
-    return val;
-  }, 2);
-};
-
-}); // module: context.js
-
-require.register("hook.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Runnable = require('./runnable');
-
-/**
- * Expose `Hook`.
- */
-
-module.exports = Hook;
-
-/**
- * Initialize a new `Hook` with the given `title` and callback `fn`.
- *
- * @param {String} title
- * @param {Function} fn
- * @api private
- */
-
-function Hook(title, fn) {
-  Runnable.call(this, title, fn);
-  this.type = 'hook';
-}
-
-/**
- * Inherit from `Runnable.prototype`.
- */
-
-function F(){};
-F.prototype = Runnable.prototype;
-Hook.prototype = new F;
-Hook.prototype.constructor = Hook;
-
-
-/**
- * Get or set the test `err`.
- *
- * @param {Error} err
- * @return {Error}
- * @api public
- */
-
-Hook.prototype.error = function(err){
-  if (0 == arguments.length) {
-    var err = this._error;
-    this._error = null;
-    return err;
-  }
-
-  this._error = err;
-};
-
-}); // module: hook.js
-
-require.register("interfaces/bdd.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Suite = require('../suite')
-  , Test = require('../test');
-
-/**
- * BDD-style interface:
- *
- *      describe('Array', function(){
- *        describe('#indexOf()', function(){
- *          it('should return -1 when not present', function(){
- *
- *          });
- *
- *          it('should return the index when present', function(){
- *
- *          });
- *        });
- *      });
- *
- */
-
-module.exports = function(suite){
-  var suites = [suite];
-
-  suite.on('pre-require', function(context, file, mocha){
-
-    /**
-     * Execute before running tests.
-     */
-
-    context.before = function(fn){
-      suites[0].beforeAll(fn);
-    };
-
-    /**
-     * Execute after running tests.
-     */
-
-    context.after = function(fn){
-      suites[0].afterAll(fn);
-    };
-
-    /**
-     * Execute before each test case.
-     */
-
-    context.beforeEach = function(fn){
-      suites[0].beforeEach(fn);
-    };
-
-    /**
-     * Execute after each test case.
-     */
-
-    context.afterEach = function(fn){
-      suites[0].afterEach(fn);
-    };
-
-    /**
-     * Describe a "suite" with the given `title`
-     * and callback `fn` containing nested suites
-     * and/or tests.
-     */
-
-    context.describe = context.context = function(title, fn){
-      var suite = Suite.create(suites[0], title);
-      suites.unshift(suite);
-      fn.call(suite);
-      suites.shift();
-      return suite;
-    };
-
-    /**
-     * Pending describe.
-     */
-
-    context.xdescribe =
-    context.xcontext =
-    context.describe.skip = function(title, fn){
-      var suite = Suite.create(suites[0], title);
-      suite.pending = true;
-      suites.unshift(suite);
-      fn.call(suite);
-      suites.shift();
-    };
-
-    /**
-     * Exclusive suite.
-     */
-
-    context.describe.only = function(title, fn){
-      var suite = context.describe(title, fn);
-      mocha.grep(suite.fullTitle());
-    };
-
-    /**
-     * Describe a specification or test-case
-     * with the given `title` and callback `fn`
-     * acting as a thunk.
-     */
-
-    context.it = context.specify = function(title, fn){
-      var suite = suites[0];
-      if (suite.pending) var fn = null;
-      var test = new Test(title, fn);
-      suite.addTest(test);
-      return test;
-    };
-
-    /**
-     * Exclusive test-case.
-     */
-
-    context.it.only = function(title, fn){
-      var test = context.it(title, fn);
-      mocha.grep(test.fullTitle());
-    };
-
-    /**
-     * Pending test case.
-     */
-
-    context.xit =
-    context.xspecify =
-    context.it.skip = function(title){
-      context.it(title);
-    };
-  });
-};
-
-}); // module: interfaces/bdd.js
-
-require.register("interfaces/exports.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Suite = require('../suite')
-  , Test = require('../test');
-
-/**
- * TDD-style interface:
- *
- *     exports.Array = {
- *       '#indexOf()': {
- *         'should return -1 when the value is not present': function(){
- *
- *         },
- *
- *         'should return the correct index when the value is present': function(){
- *
- *         }
- *       }
- *     };
- *
- */
-
-module.exports = function(suite){
-  var suites = [suite];
-
-  suite.on('require', visit);
-
-  function visit(obj) {
-    var suite;
-    for (var key in obj) {
-      if ('function' == typeof obj[key]) {
-        var fn = obj[key];
-        switch (key) {
-          case 'before':
-            suites[0].beforeAll(fn);
-            break;
-          case 'after':
-            suites[0].afterAll(fn);
-            break;
-          case 'beforeEach':
-            suites[0].beforeEach(fn);
-            break;
-          case 'afterEach':
-            suites[0].afterEach(fn);
-            break;
-          default:
-            suites[0].addTest(new Test(key, fn));
-        }
-      } else {
-        var suite = Suite.create(suites[0], key);
-        suites.unshift(suite);
-        visit(obj[key]);
-        suites.shift();
-      }
-    }
-  }
-};
-
-}); // module: interfaces/exports.js
-
-require.register("interfaces/index.js", function(module, exports, require){
-
-exports.bdd = require('./bdd');
-exports.tdd = require('./tdd');
-exports.qunit = require('./qunit');
-exports.exports = require('./exports');
-
-}); // module: interfaces/index.js
-
-require.register("interfaces/qunit.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Suite = require('../suite')
-  , Test = require('../test');
-
-/**
- * QUnit-style interface:
- *
- *     suite('Array');
- *
- *     test('#length', function(){
- *       var arr = [1,2,3];
- *       ok(arr.length == 3);
- *     });
- *
- *     test('#indexOf()', function(){
- *       var arr = [1,2,3];
- *       ok(arr.indexOf(1) == 0);
- *       ok(arr.indexOf(2) == 1);
- *       ok(arr.indexOf(3) == 2);
- *     });
- *
- *     suite('String');
- *
- *     test('#length', function(){
- *       ok('foo'.length == 3);
- *     });
- *
- */
-
-module.exports = function(suite){
-  var suites = [suite];
-
-  suite.on('pre-require', function(context, file, mocha){
-
-    /**
-     * Execute before running tests.
-     */
-
-    context.before = function(fn){
-      suites[0].beforeAll(fn);
-    };
-
-    /**
-     * Execute after running tests.
-     */
-
-    context.after = function(fn){
-      suites[0].afterAll(fn);
-    };
-
-    /**
-     * Execute before each test case.
-     */
-
-    context.beforeEach = function(fn){
-      suites[0].beforeEach(fn);
-    };
-
-    /**
-     * Execute after each test case.
-     */
-
-    context.afterEach = function(fn){
-      suites[0].afterEach(fn);
-    };
-
-    /**
-     * Describe a "suite" with the given `title`.
-     */
-
-    context.suite = function(title){
-      if (suites.length > 1) suites.shift();
-      var suite = Suite.create(suites[0], title);
-      suites.unshift(suite);
-      return suite;
-    };
-
-    /**
-     * Exclusive test-case.
-     */
-
-    context.suite.only = function(title, fn){
-      var suite = context.suite(title, fn);
-      mocha.grep(suite.fullTitle());
-    };
-
-    /**
-     * Describe a specification or test-case
-     * with the given `title` and callback `fn`
-     * acting as a thunk.
-     */
-
-    context.test = function(title, fn){
-      var test = new Test(title, fn);
-      suites[0].addTest(test);
-      return test;
-    };
-
-    /**
-     * Exclusive test-case.
-     */
-
-    context.test.only = function(title, fn){
-      var test = context.test(title, fn);
-      mocha.grep(test.fullTitle());
-    };
-
-    /**
-     * Pending test case.
-     */
-
-    context.test.skip = function(title){
-      context.test(title);
-    };
-  });
-};
-
-}); // module: interfaces/qunit.js
-
-require.register("interfaces/tdd.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Suite = require('../suite')
-  , Test = require('../test');
-
-/**
- * TDD-style interface:
- *
- *      suite('Array', function(){
- *        suite('#indexOf()', function(){
- *          suiteSetup(function(){
- *
- *          });
- *
- *          test('should return -1 when not present', function(){
- *
- *          });
- *
- *          test('should return the index when present', function(){
- *
- *          });
- *
- *          suiteTeardown(function(){
- *
- *          });
- *        });
- *      });
- *
- */
-
-module.exports = function(suite){
-  var suites = [suite];
-
-  suite.on('pre-require', function(context, file, mocha){
-
-    /**
-     * Execute before each test case.
-     */
-
-    context.setup = function(fn){
-      suites[0].beforeEach(fn);
-    };
-
-    /**
-     * Execute after each test case.
-     */
-
-    context.teardown = function(fn){
-      suites[0].afterEach(fn);
-    };
-
-    /**
-     * Execute before the suite.
-     */
-
-    context.suiteSetup = function(fn){
-      suites[0].beforeAll(fn);
-    };
-
-    /**
-     * Execute after the suite.
-     */
-
-    context.suiteTeardown = function(fn){
-      suites[0].afterAll(fn);
-    };
-
-    /**
-     * Describe a "suite" with the given `title`
-     * and callback `fn` containing nested suites
-     * and/or tests.
-     */
-
-    context.suite = function(title, fn){
-      var suite = Suite.create(suites[0], title);
-      suites.unshift(suite);
-      fn.call(suite);
-      suites.shift();
-      return suite;
-    };
-
-    /**
-     * Exclusive test-case.
-     */
-
-    context.suite.only = function(title, fn){
-      var suite = context.suite(title, fn);
-      mocha.grep(suite.fullTitle());
-    };
-
-    /**
-     * Describe a specification or test-case
-     * with the given `title` and callback `fn`
-     * acting as a thunk.
-     */
-
-    context.test = function(title, fn){
-      var test = new Test(title, fn);
-      suites[0].addTest(test);
-      return test;
-    };
-
-    /**
-     * Exclusive test-case.
-     */
-
-    context.test.only = function(title, fn){
-      var test = context.test(title, fn);
-      mocha.grep(test.fullTitle());
-    };
-
-    /**
-     * Pending test case.
-     */
-
-    context.test.skip = function(title){
-      context.test(title);
-    };
-  });
-};
-
-}); // module: interfaces/tdd.js
-
-require.register("mocha.js", function(module, exports, require){
-/*!
- * mocha
- * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var path = require('browser/path')
-  , utils = require('./utils');
-
-/**
- * Expose `Mocha`.
- */
-
-exports = module.exports = Mocha;
-
-/**
- * Expose internals.
- */
-
-exports.utils = utils;
-exports.interfaces = require('./interfaces');
-exports.reporters = require('./reporters');
-exports.Runnable = require('./runnable');
-exports.Context = require('./context');
-exports.Runner = require('./runner');
-exports.Suite = require('./suite');
-exports.Hook = require('./hook');
-exports.Test = require('./test');
-
-/**
- * Return image `name` path.
- *
- * @param {String} name
- * @return {String}
- * @api private
- */
-
-function image(name) {
-  return __dirname + '/../images/' + name + '.png';
-}
-
-/**
- * Setup mocha with `options`.
- *
- * Options:
- *
- *   - `ui` name "bdd", "tdd", "exports" etc
- *   - `reporter` reporter instance, defaults to `mocha.reporters.Dot`
- *   - `globals` array of accepted globals
- *   - `timeout` timeout in milliseconds
- *   - `bail` bail on the first test failure
- *   - `slow` milliseconds to wait before considering a test slow
- *   - `ignoreLeaks` ignore global leaks
- *   - `grep` string or regexp to filter tests with
- *
- * @param {Object} options
- * @api public
- */
-
-function Mocha(options) {
-  options = options || {};
-  this.files = [];
-  this.options = options;
-  this.grep(options.grep);
-  this.suite = new exports.Suite('', new exports.Context);
-  this.ui(options.ui);
-  this.bail(options.bail);
-  this.reporter(options.reporter);
-  if (options.timeout) this.timeout(options.timeout);
-  if (options.slow) this.slow(options.slow);
-}
-
-/**
- * Enable or disable bailing on the first failure.
- *
- * @param {Boolean} [bail]
- * @api public
- */
-
-Mocha.prototype.bail = function(bail){
-  if (0 == arguments.length) bail = true;
-  this.suite.bail(bail);
-  return this;
-};
-
-/**
- * Add test `file`.
- *
- * @param {String} file
- * @api public
- */
-
-Mocha.prototype.addFile = function(file){
-  this.files.push(file);
-  return this;
-};
-
-/**
- * Set reporter to `reporter`, defaults to "dot".
- *
- * @param {String|Function} reporter name or constructor
- * @api public
- */
-
-Mocha.prototype.reporter = function(reporter){
-  if ('function' == typeof reporter) {
-    this._reporter = reporter;
-  } else {
-    reporter = reporter || 'dot';
-    try {
-      this._reporter = require('./reporters/' + reporter);
-    } catch (err) {
-      this._reporter = require(reporter);
-    }
-    if (!this._reporter) throw new Error('invalid reporter "' + reporter + '"');
-  }
-  return this;
-};
-
-/**
- * Set test UI `name`, defaults to "bdd".
- *
- * @param {String} bdd
- * @api public
- */
-
-Mocha.prototype.ui = function(name){
-  name = name || 'bdd';
-  this._ui = exports.interfaces[name];
-  if (!this._ui) throw new Error('invalid interface "' + name + '"');
-  this._ui = this._ui(this.suite);
-  return this;
-};
-
-/**
- * Load registered files.
- *
- * @api private
- */
-
-Mocha.prototype.loadFiles = function(fn){
-  var self = this;
-  var suite = this.suite;
-  var pending = this.files.length;
-  this.files.forEach(function(file){
-    file = path.resolve(file);
-    suite.emit('pre-require', global, file, self);
-    suite.emit('require', require(file), file, self);
-    suite.emit('post-require', global, file, self);
-    --pending || (fn && fn());
-  });
-};
-
-/**
- * Enable growl support.
- *
- * @api private
- */
-
-Mocha.prototype._growl = function(runner, reporter) {
-  var notify = require('growl');
-
-  runner.on('end', function(){
-    var stats = reporter.stats;
-    if (stats.failures) {
-      var msg = stats.failures + ' of ' + runner.total + ' tests failed';
-      notify(msg, { name: 'mocha', title: 'Failed', image: image('error') });
-    } else {
-      notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', {
-          name: 'mocha'
-        , title: 'Passed'
-        , image: image('ok')
-      });
-    }
-  });
-};
-
-/**
- * Add regexp to grep, if `re` is a string it is escaped.
- *
- * @param {RegExp|String} re
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.grep = function(re){
-  this.options.grep = 'string' == typeof re
-    ? new RegExp(utils.escapeRegexp(re))
-    : re;
-  return this;
-};
-
-/**
- * Invert `.grep()` matches.
- *
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.invert = function(){
-  this.options.invert = true;
-  return this;
-};
-
-/**
- * Ignore global leaks.
- *
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.ignoreLeaks = function(){
-  this.options.ignoreLeaks = true;
-  return this;
-};
-
-/**
- * Enable global leak checking.
- *
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.checkLeaks = function(){
-  this.options.ignoreLeaks = false;
-  return this;
-};
-
-/**
- * Enable growl support.
- *
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.growl = function(){
-  this.options.growl = true;
-  return this;
-};
-
-/**
- * Ignore `globals` array or string.
- *
- * @param {Array|String} globals
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.globals = function(globals){
-  this.options.globals = (this.options.globals || []).concat(globals);
-  return this;
-};
-
-/**
- * Set the timeout in milliseconds.
- *
- * @param {Number} timeout
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.timeout = function(timeout){
-  this.suite.timeout(timeout);
-  return this;
-};
-
-/**
- * Set slowness threshold in milliseconds.
- *
- * @param {Number} slow
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.slow = function(slow){
-  this.suite.slow(slow);
-  return this;
-};
-
-/**
- * Makes all tests async (accepting a callback)
- *
- * @return {Mocha}
- * @api public
- */
-
-Mocha.prototype.asyncOnly = function(){
-  this.options.asyncOnly = true;
-  return this;
-};
-
-/**
- * Run tests and invoke `fn()` when complete.
- *
- * @param {Function} fn
- * @return {Runner}
- * @api public
- */
-
-Mocha.prototype.run = function(fn){
-  if (this.files.length) this.loadFiles();
-  var suite = this.suite;
-  var options = this.options;
-  var runner = new exports.Runner(suite);
-  var reporter = new this._reporter(runner);
-  runner.ignoreLeaks = false !== options.ignoreLeaks;
-  runner.asyncOnly = options.asyncOnly;
-  if (options.grep) runner.grep(options.grep, options.invert);
-  if (options.globals) runner.globals(options.globals);
-  if (options.growl) this._growl(runner, reporter);
-  return runner.run(fn);
-};
-
-}); // module: mocha.js
-
-require.register("ms.js", function(module, exports, require){
-
-/**
- * Helpers.
- */
-
-var s = 1000;
-var m = s * 60;
-var h = m * 60;
-var d = h * 24;
-
-/**
- * Parse or format the given `val`.
- *
- * @param {String|Number} val
- * @return {String|Number}
- * @api public
- */
-
-module.exports = function(val){
-  if ('string' == typeof val) return parse(val);
-  return format(val);
-}
-
-/**
- * Parse the given `str` and return milliseconds.
- *
- * @param {String} str
- * @return {Number}
- * @api private
- */
-
-function parse(str) {
-  var m = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str);
-  if (!m) return;
-  var n = parseFloat(m[1]);
-  var type = (m[2] || 'ms').toLowerCase();
-  switch (type) {
-    case 'years':
-    case 'year':
-    case 'y':
-      return n * 31557600000;
-    case 'days':
-    case 'day':
-    case 'd':
-      return n * 86400000;
-    case 'hours':
-    case 'hour':
-    case 'h':
-      return n * 3600000;
-    case 'minutes':
-    case 'minute':
-    case 'm':
-      return n * 60000;
-    case 'seconds':
-    case 'second':
-    case 's':
-      return n * 1000;
-    case 'ms':
-      return n;
-  }
-}
-
-/**
- * Format the given `ms`.
- *
- * @param {Number} ms
- * @return {String}
- * @api public
- */
-
-function format(ms) {
-  if (ms == d) return Math.round(ms / d) + ' day';
-  if (ms > d) return Math.round(ms / d) + ' days';
-  if (ms == h) return Math.round(ms / h) + ' hour';
-  if (ms > h) return Math.round(ms / h) + ' hours';
-  if (ms == m) return Math.round(ms / m) + ' minute';
-  if (ms > m) return Math.round(ms / m) + ' minutes';
-  if (ms == s) return Math.round(ms / s) + ' second';
-  if (ms > s) return Math.round(ms / s) + ' seconds';
-  return ms + ' ms';
-}
-}); // module: ms.js
-
-require.register("reporters/base.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var tty = require('browser/tty')
-  , diff = require('browser/diff')
-  , ms = require('../ms');
-
-/**
- * Save timer references to avoid Sinon interfering (see GH-237).
- */
-
-var Date = global.Date
-  , setTimeout = global.setTimeout
-  , setInterval = global.setInterval
-  , clearTimeout = global.clearTimeout
-  , clearInterval = global.clearInterval;
-
-/**
- * Check if both stdio streams are associated with a tty.
- */
-
-var isatty = tty.isatty(1) && tty.isatty(2);
-
-/**
- * Expose `Base`.
- */
-
-exports = module.exports = Base;
-
-/**
- * Enable coloring by default.
- */
-
-exports.useColors = isatty;
-
-/**
- * Default color map.
- */
-
-exports.colors = {
-    'pass': 90
-  , 'fail': 31
-  , 'bright pass': 92
-  , 'bright fail': 91
-  , 'bright yellow': 93
-  , 'pending': 36
-  , 'suite': 0
-  , 'error title': 0
-  , 'error message': 31
-  , 'error stack': 90
-  , 'checkmark': 32
-  , 'fast': 90
-  , 'medium': 33
-  , 'slow': 31
-  , 'green': 32
-  , 'light': 90
-  , 'diff gutter': 90
-  , 'diff added': 42
-  , 'diff removed': 41
-};
-
-/**
- * Default symbol map.
- */
-
-exports.symbols = {
-  ok: '✓',
-  err: '✖',
-  dot: '․'
-};
-
-// With node.js on Windows: use symbols available in terminal default fonts
-if ('win32' == process.platform) {
-  exports.symbols.ok = '\u221A';
-  exports.symbols.err = '\u00D7';
-  exports.symbols.dot = '.';
-}
-
-/**
- * Color `str` with the given `type`,
- * allowing colors to be disabled,
- * as well as user-defined color
- * schemes.
- *
- * @param {String} type
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var color = exports.color = function(type, str) {
-  if (!exports.useColors) return str;
-  return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m';
-};
-
-/**
- * Expose term window size, with some
- * defaults for when stderr is not a tty.
- */
-
-exports.window = {
-  width: isatty
-    ? process.stdout.getWindowSize
-      ? process.stdout.getWindowSize(1)[0]
-      : tty.getWindowSize()[1]
-    : 75
-};
-
-/**
- * Expose some basic cursor interactions
- * that are common among reporters.
- */
-
-exports.cursor = {
-  hide: function(){
-    process.stdout.write('\u001b[?25l');
-  },
-
-  show: function(){
-    process.stdout.write('\u001b[?25h');
-  },
-
-  deleteLine: function(){
-    process.stdout.write('\u001b[2K');
-  },
-
-  beginningOfLine: function(){
-    process.stdout.write('\u001b[0G');
-  },
-
-  CR: function(){
-    exports.cursor.deleteLine();
-    exports.cursor.beginningOfLine();
-  }
-};
-
-/**
- * Outut the given `failures` as a list.
- *
- * @param {Array} failures
- * @api public
- */
-
-exports.list = function(failures){
-  console.error();
-  failures.forEach(function(test, i){
-    // format
-    var fmt = color('error title', '  %s) %s:\n')
-      + color('error message', '     %s')
-      + color('error stack', '\n%s\n');
-
-    // msg
-    var err = test.err
-      , message = err.message || ''
-      , stack = err.stack || message
-      , index = stack.indexOf(message) + message.length
-      , msg = stack.slice(0, index)
-      , actual = err.actual
-      , expected = err.expected
-      , escape = true;
-
-    // explicitly show diff
-    if (err.showDiff) {
-      escape = false;
-      err.actual = actual = JSON.stringify(actual, null, 2);
-      err.expected = expected = JSON.stringify(expected, null, 2);
-    }
-
-    // actual / expected diff
-    if ('string' == typeof actual && 'string' == typeof expected) {
-      msg = errorDiff(err, 'Words', escape);
-
-      // linenos
-      var lines = msg.split('\n');
-      if (lines.length > 4) {
-        var width = String(lines.length).length;
-        msg = lines.map(function(str, i){
-          return pad(++i, width) + ' |' + ' ' + str;
-        }).join('\n');
-      }
-
-      // legend
-      msg = '\n'
-        + color('diff removed', 'actual')
-        + ' '
-        + color('diff added', 'expected')
-        + '\n\n'
-        + msg
-        + '\n';
-
-      // indent
-      msg = msg.replace(/^/gm, '      ');
-
-      fmt = color('error title', '  %s) %s:\n%s')
-        + color('error stack', '\n%s\n');
-    }
-
-    // indent stack trace without msg
-    stack = stack.slice(index ? index + 1 : index)
-      .replace(/^/gm, '  ');
-
-    console.error(fmt, (i + 1), test.fullTitle(), msg, stack);
-  });
-};
-
-/**
- * Initialize a new `Base` reporter.
- *
- * All other reporters generally
- * inherit from this reporter, providing
- * stats such as test duration, number
- * of tests passed / failed etc.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Base(runner) {
-  var self = this
-    , stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }
-    , failures = this.failures = [];
-
-  if (!runner) return;
-  this.runner = runner;
-
-  runner.stats = stats;
-
-  runner.on('start', function(){
-    stats.start = new Date;
-  });
-
-  runner.on('suite', function(suite){
-    stats.suites = stats.suites || 0;
-    suite.root || stats.suites++;
-  });
-
-  runner.on('test end', function(test){
-    stats.tests = stats.tests || 0;
-    stats.tests++;
-  });
-
-  runner.on('pass', function(test){
-    stats.passes = stats.passes || 0;
-
-    var medium = test.slow() / 2;
-    test.speed = test.duration > test.slow()
-      ? 'slow'
-      : test.duration > medium
-        ? 'medium'
-        : 'fast';
-
-    stats.passes++;
-  });
-
-  runner.on('fail', function(test, err){
-    stats.failures = stats.failures || 0;
-    stats.failures++;
-    test.err = err;
-    failures.push(test);
-  });
-
-  runner.on('end', function(){
-    stats.end = new Date;
-    stats.duration = new Date - stats.start;
-  });
-
-  runner.on('pending', function(){
-    stats.pending++;
-  });
-}
-
-/**
- * Output common epilogue used by many of
- * the bundled reporters.
- *
- * @api public
- */
-
-Base.prototype.epilogue = function(){
-  var stats = this.stats
-    , fmt
-    , tests;
-
-  console.log();
-
-  function pluralize(n) {
-    return 1 == n ? 'test' : 'tests';
-  }
-
-  // failure
-  if (stats.failures) {
-    fmt = color('bright fail', '  ' + exports.symbols.err)
-      + color('fail', ' %d of %d %s failed')
-      + color('light', ':')
-
-    console.error(fmt,
-      stats.failures,
-      this.runner.total,
-      pluralize(this.runner.total));
-
-    Base.list(this.failures);
-    console.error();
-    return;
-  }
-
-  // pass
-  fmt = color('bright pass', ' ')
-    + color('green', ' %d %s complete')
-    + color('light', ' (%s)');
-
-  console.log(fmt,
-    stats.tests || 0,
-    pluralize(stats.tests),
-    ms(stats.duration));
-
-  // pending
-  if (stats.pending) {
-    fmt = color('pending', ' ')
-      + color('pending', ' %d %s pending');
-
-    console.log(fmt, stats.pending, pluralize(stats.pending));
-  }
-
-  console.log();
-};
-
-/**
- * Pad the given `str` to `len`.
- *
- * @param {String} str
- * @param {String} len
- * @return {String}
- * @api private
- */
-
-function pad(str, len) {
-  str = String(str);
-  return Array(len - str.length + 1).join(' ') + str;
-}
-
-/**
- * Return a character diff for `err`.
- *
- * @param {Error} err
- * @return {String}
- * @api private
- */
-
-function errorDiff(err, type, escape) {
-  return diff['diff' + type](err.actual, err.expected).map(function(str){
-    if (escape) {
-      str.value = str.value
-        .replace(/\t/g, '<tab>')
-        .replace(/\r/g, '<CR>')
-        .replace(/\n/g, '<LF>\n');
-    }
-    if (str.added) return colorLines('diff added', str.value);
-    if (str.removed) return colorLines('diff removed', str.value);
-    return str.value;
-  }).join('');
-}
-
-/**
- * Color lines for `str`, using the color `name`.
- *
- * @param {String} name
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-function colorLines(name, str) {
-  return str.split('\n').map(function(str){
-    return color(name, str);
-  }).join('\n');
-}
-
-}); // module: reporters/base.js
-
-require.register("reporters/doc.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , utils = require('../utils');
-
-/**
- * Expose `Doc`.
- */
-
-exports = module.exports = Doc;
-
-/**
- * Initialize a new `Doc` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Doc(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , total = runner.total
-    , indents = 2;
-
-  function indent() {
-    return Array(indents).join('  ');
-  }
-
-  runner.on('suite', function(suite){
-    if (suite.root) return;
-    ++indents;
-    console.log('%s<section class="suite">', indent());
-    ++indents;
-    console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title));
-    console.log('%s<dl>', indent());
-  });
-
-  runner.on('suite end', function(suite){
-    if (suite.root) return;
-    console.log('%s</dl>', indent());
-    --indents;
-    console.log('%s</section>', indent());
-    --indents;
-  });
-
-  runner.on('pass', function(test){
-    console.log('%s  <dt>%s</dt>', indent(), utils.escape(test.title));
-    var code = utils.escape(utils.clean(test.fn.toString()));
-    console.log('%s  <dd><pre><code>%s</code></pre></dd>', indent(), code);
-  });
-}
-
-}); // module: reporters/doc.js
-
-require.register("reporters/dot.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , color = Base.color;
-
-/**
- * Expose `Dot`.
- */
-
-exports = module.exports = Dot;
-
-/**
- * Initialize a new `Dot` matrix test reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Dot(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , width = Base.window.width * .75 | 0
-    , n = 0;
-
-  runner.on('start', function(){
-    process.stdout.write('\n  ');
-  });
-
-  runner.on('pending', function(test){
-    process.stdout.write(color('pending', Base.symbols.dot));
-  });
-
-  runner.on('pass', function(test){
-    if (++n % width == 0) process.stdout.write('\n  ');
-    if ('slow' == test.speed) {
-      process.stdout.write(color('bright yellow', Base.symbols.dot));
-    } else {
-      process.stdout.write(color(test.speed, Base.symbols.dot));
-    }
-  });
-
-  runner.on('fail', function(test, err){
-    if (++n % width == 0) process.stdout.write('\n  ');
-    process.stdout.write(color('fail', Base.symbols.dot));
-  });
-
-  runner.on('end', function(){
-    console.log();
-    self.epilogue();
-  });
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-Dot.prototype = new F;
-Dot.prototype.constructor = Dot;
-
-}); // module: reporters/dot.js
-
-require.register("reporters/html-cov.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var JSONCov = require('./json-cov')
-  , fs = require('browser/fs');
-
-/**
- * Expose `HTMLCov`.
- */
-
-exports = module.exports = HTMLCov;
-
-/**
- * Initialize a new `JsCoverage` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function HTMLCov(runner) {
-  var jade = require('jade')
-    , file = __dirname + '/templates/coverage.jade'
-    , str = fs.readFileSync(file, 'utf8')
-    , fn = jade.compile(str, { filename: file })
-    , self = this;
-
-  JSONCov.call(this, runner, false);
-
-  runner.on('end', function(){
-    process.stdout.write(fn({
-        cov: self.cov
-      , coverageClass: coverageClass
-    }));
-  });
-}
-
-/**
- * Return coverage class for `n`.
- *
- * @return {String}
- * @api private
- */
-
-function coverageClass(n) {
-  if (n >= 75) return 'high';
-  if (n >= 50) return 'medium';
-  if (n >= 25) return 'low';
-  return 'terrible';
-}
-}); // module: reporters/html-cov.js
-
-require.register("reporters/html.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , utils = require('../utils')
-  , Progress = require('../browser/progress')
-  , escape = utils.escape;
-
-/**
- * Save timer references to avoid Sinon interfering (see GH-237).
- */
-
-var Date = global.Date
-  , setTimeout = global.setTimeout
-  , setInterval = global.setInterval
-  , clearTimeout = global.clearTimeout
-  , clearInterval = global.clearInterval;
-
-/**
- * Expose `Doc`.
- */
-
-exports = module.exports = HTML;
-
-/**
- * Stats template.
- */
-
-var statsTemplate = '<ul id="mocha-stats">'
-  + '<li class="progress"><canvas width="40" height="40"></canvas></li>'
-  + '<li class="passes"><a href="#">passes:</a> <em>0</em></li>'
-  + '<li class="failures"><a href="#">failures:</a> <em>0</em></li>'
-  + '<li class="duration">duration: <em>0</em>s</li>'
-  + '</ul>';
-
-/**
- * Initialize a new `Doc` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function HTML(runner, root) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , total = runner.total
-    , stat = fragment(statsTemplate)
-    , items = stat.getElementsByTagName('li')
-    , passes = items[1].getElementsByTagName('em')[0]
-    , passesLink = items[1].getElementsByTagName('a')[0]
-    , failures = items[2].getElementsByTagName('em')[0]
-    , failuresLink = items[2].getElementsByTagName('a')[0]
-    , duration = items[3].getElementsByTagName('em')[0]
-    , canvas = stat.getElementsByTagName('canvas')[0]
-    , report = fragment('<ul id="mocha-report"></ul>')
-    , stack = [report]
-    , progress
-    , ctx
-
-  root = root || document.getElementById('mocha');
-
-  if (canvas.getContext) {
-    var ratio = window.devicePixelRatio || 1;
-    canvas.style.width = canvas.width;
-    canvas.style.height = canvas.height;
-    canvas.width *= ratio;
-    canvas.height *= ratio;
-    ctx = canvas.getContext('2d');
-    ctx.scale(ratio, ratio);
-    progress = new Progress;
-  }
-
-  if (!root) return error('#mocha div missing, add it to your document');
-
-  // pass toggle
-  on(passesLink, 'click', function(){
-    unhide();
-    var name = /pass/.test(report.className) ? '' : ' pass';
-    report.className = report.className.replace(/fail|pass/g, '') + name;
-    if (report.className.trim()) hideSuitesWithout('test pass');
-  });
-
-  // failure toggle
-  on(failuresLink, 'click', function(){
-    unhide();
-    var name = /fail/.test(report.className) ? '' : ' fail';
-    report.className = report.className.replace(/fail|pass/g, '') + name;
-    if (report.className.trim()) hideSuitesWithout('test fail');
-  });
-
-  root.appendChild(stat);
-  root.appendChild(report);
-
-  if (progress) progress.size(40);
-
-  runner.on('suite', function(suite){
-    if (suite.root) return;
-
-    // suite
-    var url = '?grep=' + encodeURIComponent(suite.fullTitle());
-    var el = fragment('<li class="suite"><h1><a href="%s">%s</a></h1></li>', url, escape(suite.title));
-
-    // container
-    stack[0].appendChild(el);
-    stack.unshift(document.createElement('ul'));
-    el.appendChild(stack[0]);
-  });
-
-  runner.on('suite end', function(suite){
-    if (suite.root) return;
-    stack.shift();
-  });
-
-  runner.on('fail', function(test, err){
-    if ('hook' == test.type) runner.emit('test end', test);
-  });
-
-  runner.on('test end', function(test){
-    // TODO: add to stats
-    var percent = stats.tests / this.total * 100 | 0;
-    if (progress) progress.update(percent).draw(ctx);
-
-    // update stats
-    var ms = new Date - stats.start;
-    text(passes, stats.passes);
-    text(failures, stats.failures);
-    text(duration, (ms / 1000).toFixed(2));
-
-    // test
-    if ('passed' == test.state) {
-      var el = fragment('<li class="test pass %e"><h2>%e<span class="duration">%ems</span> <a href="?grep=%e" class="replay">‣</a></h2></li>', test.speed, test.title, test.duration, encodeURIComponent(test.fullTitle()));
-    } else if (test.pending) {
-      var el = fragment('<li class="test pass pending"><h2>%e</h2></li>', test.title);
-    } else {
-      var el = fragment('<li class="test fail"><h2>%e <a href="?grep=%e" class="replay">‣</a></h2></li>', test.title, encodeURIComponent(test.fullTitle()));
-      var str = test.err.stack || test.err.toString();
-
-      // FF / Opera do not add the message
-      if (!~str.indexOf(test.err.message)) {
-        str = test.err.message + '\n' + str;
-      }
-
-      // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we
-      // check for the result of the stringifying.
-      if ('[object Error]' == str) str = test.err.message;
-
-      // Safari doesn't give you a stack. Let's at least provide a source line.
-      if (!test.err.stack && test.err.sourceURL && test.err.line !== undefined) {
-        str += "\n(" + test.err.sourceURL + ":" + test.err.line + ")";
-      }
-
-      el.appendChild(fragment('<pre class="error">%e</pre>', str));
-    }
-
-    // toggle code
-    // TODO: defer
-    if (!test.pending) {
-      var h2 = el.getElementsByTagName('h2')[0];
-
-      on(h2, 'click', function(){
-        pre.style.display = 'none' == pre.style.display
-          ? 'block'
-          : 'none';
-      });
-
-      var pre = fragment('<pre><code>%e</code></pre>', utils.clean(test.fn.toString()));
-      el.appendChild(pre);
-      pre.style.display = 'none';
-    }
-
-    // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack.
-    if (stack[0]) stack[0].appendChild(el);
-  });
-}
-
-/**
- * Display error `msg`.
- */
-
-function error(msg) {
-  document.body.appendChild(fragment('<div id="mocha-error">%s</div>', msg));
-}
-
-/**
- * Return a DOM fragment from `html`.
- */
-
-function fragment(html) {
-  var args = arguments
-    , div = document.createElement('div')
-    , i = 1;
-
-  div.innerHTML = html.replace(/%([se])/g, function(_, type){
-    switch (type) {
-      case 's': return String(args[i++]);
-      case 'e': return escape(args[i++]);
-    }
-  });
-
-  return div.firstChild;
-}
-
-/**
- * Check for suites that do not have elements
- * with `classname`, and hide them.
- */
-
-function hideSuitesWithout(classname) {
-  var suites = document.getElementsByClassName('suite');
-  for (var i = 0; i < suites.length; i++) {
-    var els = suites[i].getElementsByClassName(classname);
-    if (0 == els.length) suites[i].className += ' hidden';
-  }
-}
-
-/**
- * Unhide .hidden suites.
- */
-
-function unhide() {
-  var els = document.getElementsByClassName('suite hidden');
-  for (var i = 0; i < els.length; ++i) {
-    els[i].className = els[i].className.replace('suite hidden', 'suite');
-  }
-}
-
-/**
- * Set `el` text to `str`.
- */
-
-function text(el, str) {
-  if (el.textContent) {
-    el.textContent = str;
-  } else {
-    el.innerText = str;
-  }
-}
-
-/**
- * Listen on `event` with callback `fn`.
- */
-
-function on(el, event, fn) {
-  if (el.addEventListener) {
-    el.addEventListener(event, fn, false);
-  } else {
-    el.attachEvent('on' + event, fn);
-  }
-}
-
-}); // module: reporters/html.js
-
-require.register("reporters/index.js", function(module, exports, require){
-
-exports.Base = require('./base');
-exports.Dot = require('./dot');
-exports.Doc = require('./doc');
-exports.TAP = require('./tap');
-exports.JSON = require('./json');
-exports.HTML = require('./html');
-exports.List = require('./list');
-exports.Min = require('./min');
-exports.Spec = require('./spec');
-exports.Nyan = require('./nyan');
-exports.XUnit = require('./xunit');
-exports.Markdown = require('./markdown');
-exports.Progress = require('./progress');
-exports.Landing = require('./landing');
-exports.JSONCov = require('./json-cov');
-exports.HTMLCov = require('./html-cov');
-exports.JSONStream = require('./json-stream');
-exports.Teamcity = require('./teamcity');
-
-}); // module: reporters/index.js
-
-require.register("reporters/json-cov.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base');
-
-/**
- * Expose `JSONCov`.
- */
-
-exports = module.exports = JSONCov;
-
-/**
- * Initialize a new `JsCoverage` reporter.
- *
- * @param {Runner} runner
- * @param {Boolean} output
- * @api public
- */
-
-function JSONCov(runner, output) {
-  var self = this
-    , output = 1 == arguments.length ? true : output;
-
-  Base.call(this, runner);
-
-  var tests = []
-    , failures = []
-    , passes = [];
-
-  runner.on('test end', function(test){
-    tests.push(test);
-  });
-
-  runner.on('pass', function(test){
-    passes.push(test);
-  });
-
-  runner.on('fail', function(test){
-    failures.push(test);
-  });
-
-  runner.on('end', function(){
-    var cov = global._$jscoverage || {};
-    var result = self.cov = map(cov);
-    result.stats = self.stats;
-    result.tests = tests.map(clean);
-    result.failures = failures.map(clean);
-    result.passes = passes.map(clean);
-    if (!output) return;
-    process.stdout.write(JSON.stringify(result, null, 2 ));
-  });
-}
-
-/**
- * Map jscoverage data to a JSON structure
- * suitable for reporting.
- *
- * @param {Object} cov
- * @return {Object}
- * @api private
- */
-
-function map(cov) {
-  var ret = {
-      instrumentation: 'node-jscoverage'
-    , sloc: 0
-    , hits: 0
-    , misses: 0
-    , coverage: 0
-    , files: []
-  };
-
-  for (var filename in cov) {
-    var data = coverage(filename, cov[filename]);
-    ret.files.push(data);
-    ret.hits += data.hits;
-    ret.misses += data.misses;
-    ret.sloc += data.sloc;
-  }
-
-  ret.files.sort(function(a, b) {
-    return a.filename.localeCompare(b.filename);
-  });
-
-  if (ret.sloc > 0) {
-    ret.coverage = (ret.hits / ret.sloc) * 100;
-  }
-
-  return ret;
-};
-
-/**
- * Map jscoverage data for a single source file
- * to a JSON structure suitable for reporting.
- *
- * @param {String} filename name of the source file
- * @param {Object} data jscoverage coverage data
- * @return {Object}
- * @api private
- */
-
-function coverage(filename, data) {
-  var ret = {
-    filename: filename,
-    coverage: 0,
-    hits: 0,
-    misses: 0,
-    sloc: 0,
-    source: {}
-  };
-
-  data.source.forEach(function(line, num){
-    num++;
-
-    if (data[num] === 0) {
-      ret.misses++;
-      ret.sloc++;
-    } else if (data[num] !== undefined) {
-      ret.hits++;
-      ret.sloc++;
-    }
-
-    ret.source[num] = {
-        source: line
-      , coverage: data[num] === undefined
-        ? ''
-        : data[num]
-    };
-  });
-
-  ret.coverage = ret.hits / ret.sloc * 100;
-
-  return ret;
-}
-
-/**
- * Return a plain-object representation of `test`
- * free of cyclic properties etc.
- *
- * @param {Object} test
- * @return {Object}
- * @api private
- */
-
-function clean(test) {
-  return {
-      title: test.title
-    , fullTitle: test.fullTitle()
-    , duration: test.duration
-  }
-}
-
-}); // module: reporters/json-cov.js
-
-require.register("reporters/json-stream.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , color = Base.color;
-
-/**
- * Expose `List`.
- */
-
-exports = module.exports = List;
-
-/**
- * Initialize a new `List` test reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function List(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , total = runner.total;
-
-  runner.on('start', function(){
-    console.log(JSON.stringify(['start', { total: total }]));
-  });
-
-  runner.on('pass', function(test){
-    console.log(JSON.stringify(['pass', clean(test)]));
-  });
-
-  runner.on('fail', function(test, err){
-    console.log(JSON.stringify(['fail', clean(test)]));
-  });
-
-  runner.on('end', function(){
-    process.stdout.write(JSON.stringify(['end', self.stats]));
-  });
-}
-
-/**
- * Return a plain-object representation of `test`
- * free of cyclic properties etc.
- *
- * @param {Object} test
- * @return {Object}
- * @api private
- */
-
-function clean(test) {
-  return {
-      title: test.title
-    , fullTitle: test.fullTitle()
-    , duration: test.duration
-  }
-}
-}); // module: reporters/json-stream.js
-
-require.register("reporters/json.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , cursor = Base.cursor
-  , color = Base.color;
-
-/**
- * Expose `JSON`.
- */
-
-exports = module.exports = JSONReporter;
-
-/**
- * Initialize a new `JSON` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function JSONReporter(runner) {
-  var self = this;
-  Base.call(this, runner);
-
-  var tests = []
-    , failures = []
-    , passes = [];
-
-  runner.on('test end', function(test){
-    tests.push(test);
-  });
-
-  runner.on('pass', function(test){
-    passes.push(test);
-  });
-
-  runner.on('fail', function(test){
-    failures.push(test);
-  });
-
-  runner.on('end', function(){
-    var obj = {
-        stats: self.stats
-      , tests: tests.map(clean)
-      , failures: failures.map(clean)
-      , passes: passes.map(clean)
-    };
-
-    process.stdout.write(JSON.stringify(obj, null, 2));
-  });
-}
-
-/**
- * Return a plain-object representation of `test`
- * free of cyclic properties etc.
- *
- * @param {Object} test
- * @return {Object}
- * @api private
- */
-
-function clean(test) {
-  return {
-      title: test.title
-    , fullTitle: test.fullTitle()
-    , duration: test.duration
-  }
-}
-}); // module: reporters/json.js
-
-require.register("reporters/landing.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , cursor = Base.cursor
-  , color = Base.color;
-
-/**
- * Expose `Landing`.
- */
-
-exports = module.exports = Landing;
-
-/**
- * Airplane color.
- */
-
-Base.colors.plane = 0;
-
-/**
- * Airplane crash color.
- */
-
-Base.colors['plane crash'] = 31;
-
-/**
- * Runway color.
- */
-
-Base.colors.runway = 90;
-
-/**
- * Initialize a new `Landing` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Landing(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , width = Base.window.width * .75 | 0
-    , total = runner.total
-    , stream = process.stdout
-    , plane = color('plane', '✈')
-    , crashed = -1
-    , n = 0;
-
-  function runway() {
-    var buf = Array(width).join('-');
-    return '  ' + color('runway', buf);
-  }
-
-  runner.on('start', function(){
-    stream.write('\n  ');
-    cursor.hide();
-  });
-
-  runner.on('test end', function(test){
-    // check if the plane crashed
-    var col = -1 == crashed
-      ? width * ++n / total | 0
-      : crashed;
-
-    // show the crash
-    if ('failed' == test.state) {
-      plane = color('plane crash', '✈');
-      crashed = col;
-    }
-
-    // render landing strip
-    stream.write('\u001b[4F\n\n');
-    stream.write(runway());
-    stream.write('\n  ');
-    stream.write(color('runway', Array(col).join('⋅')));
-    stream.write(plane)
-    stream.write(color('runway', Array(width - col).join('⋅') + '\n'));
-    stream.write(runway());
-    stream.write('\u001b[0m');
-  });
-
-  runner.on('end', function(){
-    cursor.show();
-    console.log();
-    self.epilogue();
-  });
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-Landing.prototype = new F;
-Landing.prototype.constructor = Landing;
-
-}); // module: reporters/landing.js
-
-require.register("reporters/list.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , cursor = Base.cursor
-  , color = Base.color;
-
-/**
- * Expose `List`.
- */
-
-exports = module.exports = List;
-
-/**
- * Initialize a new `List` test reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function List(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , n = 0;
-
-  runner.on('start', function(){
-    console.log();
-  });
-
-  runner.on('test', function(test){
-    process.stdout.write(color('pass', '    ' + test.fullTitle() + ': '));
-  });
-
-  runner.on('pending', function(test){
-    var fmt = color('checkmark', '  -')
-      + color('pending', ' %s');
-    console.log(fmt, test.fullTitle());
-  });
-
-  runner.on('pass', function(test){
-    var fmt = color('checkmark', '  '+Base.symbols.dot)
-      + color('pass', ' %s: ')
-      + color(test.speed, '%dms');
-    cursor.CR();
-    console.log(fmt, test.fullTitle(), test.duration);
-  });
-
-  runner.on('fail', function(test, err){
-    cursor.CR();
-    console.log(color('fail', '  %d) %s'), ++n, test.fullTitle());
-  });
-
-  runner.on('end', self.epilogue.bind(self));
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-List.prototype = new F;
-List.prototype.constructor = List;
-
-
-}); // module: reporters/list.js
-
-require.register("reporters/markdown.js", function(module, exports, require){
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , utils = require('../utils');
-
-/**
- * Expose `Markdown`.
- */
-
-exports = module.exports = Markdown;
-
-/**
- * Initialize a new `Markdown` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Markdown(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , level = 0
-    , buf = '';
-
-  function title(str) {
-    return Array(level).join('#') + ' ' + str;
-  }
-
-  function indent() {
-    return Array(level).join('  ');
-  }
-
-  function mapTOC(suite, obj) {
-    var ret = obj;
-    obj = obj[suite.title] = obj[suite.title] || { suite: suite };
-    suite.suites.forEach(function(suite){
-      mapTOC(suite, obj);
-    });
-    return ret;
-  }
-
-  function stringifyTOC(obj, level) {
-    ++level;
-    var buf = '';
-    var link;
-    for (var key in obj) {
-      if ('suite' == key) continue;
-      if (key) link = ' - [' + key + '](#' + utils.slug(obj[key].suite.fullTitle()) + ')\n';
-      if (key) buf += Array(level).join('  ') + link;
-      buf += stringifyTOC(obj[key], level);
-    }
-    --level;
-    return buf;
-  }
-
-  function generateTOC(suite) {
-    var obj = mapTOC(suite, {});
-    return stringifyTOC(obj, 0);
-  }
-
-  generateTOC(runner.suite);
-
-  runner.on('suite', function(suite){
-    ++level;
-    var slug = utils.slug(suite.fullTitle());
-    buf += '<a name="' + slug + '"></a>' + '\n';
-    buf += title(suite.title) + '\n';
-  });
-
-  runner.on('suite end', function(suite){
-    --level;
-  });
-
-  runner.on('pass', function(test){
-    var code = utils.clean(test.fn.toString());
-    buf += test.title + '.\n';
-    buf += '\n```js\n';
-    buf += code + '\n';
-    buf += '```\n\n';
-  });
-
-  runner.on('end', function(){
-    process.stdout.write('# TOC\n');
-    process.stdout.write(generateTOC(runner.suite));
-    process.stdout.write(buf);
-  });
-}
-}); // module: reporters/markdown.js
-
-require.register("reporters/min.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base');
-
-/**
- * Expose `Min`.
- */
-
-exports = module.exports = Min;
-
-/**
- * Initialize a new `Min` minimal test reporter (best used with --watch).
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Min(runner) {
-  Base.call(this, runner);
-
-  runner.on('start', function(){
-    // clear screen
-    process.stdout.write('\u001b[2J');
-    // set cursor position
-    process.stdout.write('\u001b[1;3H');
-  });
-
-  runner.on('end', this.epilogue.bind(this));
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-Min.prototype = new F;
-Min.prototype.constructor = Min;
-
-
-}); // module: reporters/min.js
-
-require.register("reporters/nyan.js", function(module, exports, require){
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , color = Base.color;
-
-/**
- * Expose `Dot`.
- */
-
-exports = module.exports = NyanCat;
-
-/**
- * Initialize a new `Dot` matrix test reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function NyanCat(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , width = Base.window.width * .75 | 0
-    , rainbowColors = this.rainbowColors = self.generateColors()
-    , colorIndex = this.colorIndex = 0
-    , numerOfLines = this.numberOfLines = 4
-    , trajectories = this.trajectories = [[], [], [], []]
-    , nyanCatWidth = this.nyanCatWidth = 11
-    , trajectoryWidthMax = this.trajectoryWidthMax = (width - nyanCatWidth)
-    , scoreboardWidth = this.scoreboardWidth = 5
-    , tick = this.tick = 0
-    , n = 0;
-
-  runner.on('start', function(){
-    Base.cursor.hide();
-    self.draw('start');
-  });
-
-  runner.on('pending', function(test){
-    self.draw('pending');
-  });
-
-  runner.on('pass', function(test){
-    self.draw('pass');
-  });
-
-  runner.on('fail', function(test, err){
-    self.draw('fail');
-  });
-
-  runner.on('end', function(){
-    Base.cursor.show();
-    for (var i = 0; i < self.numberOfLines; i++) write('\n');
-    self.epilogue();
-  });
-}
-
-/**
- * Draw the nyan cat with runner `status`.
- *
- * @param {String} status
- * @api private
- */
-
-NyanCat.prototype.draw = function(status){
-  this.appendRainbow();
-  this.drawScoreboard();
-  this.drawRainbow();
-  this.drawNyanCat(status);
-  this.tick = !this.tick;
-};
-
-/**
- * Draw the "scoreboard" showing the number
- * of passes, failures and pending tests.
- *
- * @api private
- */
-
-NyanCat.prototype.drawScoreboard = function(){
-  var stats = this.stats;
-  var colors = Base.colors;
-
-  function draw(color, n) {
-    write(' ');
-    write('\u001b[' + color + 'm' + n + '\u001b[0m');
-    write('\n');
-  }
-
-  draw(colors.green, stats.passes);
-  draw(colors.fail, stats.failures);
-  draw(colors.pending, stats.pending);
-  write('\n');
-
-  this.cursorUp(this.numberOfLines);
-};
-
-/**
- * Append the rainbow.
- *
- * @api private
- */
-
-NyanCat.prototype.appendRainbow = function(){
-  var segment = this.tick ? '_' : '-';
-  var rainbowified = this.rainbowify(segment);
-
-  for (var index = 0; index < this.numberOfLines; index++) {
-    var trajectory = this.trajectories[index];
-    if (trajectory.length >= this.trajectoryWidthMax) trajectory.shift();
-    trajectory.push(rainbowified);
-  }
-};
-
-/**
- * Draw the rainbow.
- *
- * @api private
- */
-
-NyanCat.prototype.drawRainbow = function(){
-  var self = this;
-
-  this.trajectories.forEach(function(line, index) {
-    write('\u001b[' + self.scoreboardWidth + 'C');
-    write(line.join(''));
-    write('\n');
-  });
-
-  this.cursorUp(this.numberOfLines);
-};
-
-/**
- * Draw the nyan cat with `status`.
- *
- * @param {String} status
- * @api private
- */
-
-NyanCat.prototype.drawNyanCat = function(status) {
-  var self = this;
-  var startWidth = this.scoreboardWidth + this.trajectories[0].length;
-  var color = '\u001b[' + startWidth + 'C';
-  var padding = '';
-  
-  write(color);
-  write('_,------,');
-  write('\n');
-  
-  write(color);
-  padding = self.tick ? '  ' : '   ';
-  write('_|' + padding + '/\\_/\\ ');
-  write('\n');
-  
-  write(color);
-  padding = self.tick ? '_' : '__';
-  var tail = self.tick ? '~' : '^';
-  var face;
-  switch (status) {
-    case 'pass':
-      face = '( ^ .^)';
-      break;
-    case 'fail':
-      face = '( o .o)';
-      break;
-    default:
-      face = '( - .-)';
-  }
-  write(tail + '|' + padding + face + ' ');
-  write('\n');
-  
-  write(color);
-  padding = self.tick ? ' ' : '  ';
-  write(padding + '""  "" ');
-  write('\n');
-
-  this.cursorUp(this.numberOfLines);
-};
-
-/**
- * Move cursor up `n`.
- *
- * @param {Number} n
- * @api private
- */
-
-NyanCat.prototype.cursorUp = function(n) {
-  write('\u001b[' + n + 'A');
-};
-
-/**
- * Move cursor down `n`.
- *
- * @param {Number} n
- * @api private
- */
-
-NyanCat.prototype.cursorDown = function(n) {
-  write('\u001b[' + n + 'B');
-};
-
-/**
- * Generate rainbow colors.
- *
- * @return {Array}
- * @api private
- */
-
-NyanCat.prototype.generateColors = function(){
-  var colors = [];
-
-  for (var i = 0; i < (6 * 7); i++) {
-    var pi3 = Math.floor(Math.PI / 3);
-    var n = (i * (1.0 / 6));
-    var r = Math.floor(3 * Math.sin(n) + 3);
-    var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3);
-    var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3);
-    colors.push(36 * r + 6 * g + b + 16);
-  }
-
-  return colors;
-};
-
-/**
- * Apply rainbow to the given `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-NyanCat.prototype.rainbowify = function(str){
-  var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length];
-  this.colorIndex += 1;
-  return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m';
-};
-
-/**
- * Stdout helper.
- */
-
-function write(string) {
-  process.stdout.write(string);
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-NyanCat.prototype = new F;
-NyanCat.prototype.constructor = NyanCat;
-
-
-}); // module: reporters/nyan.js
-
-require.register("reporters/progress.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , cursor = Base.cursor
-  , color = Base.color;
-
-/**
- * Expose `Progress`.
- */
-
-exports = module.exports = Progress;
-
-/**
- * General progress bar color.
- */
-
-Base.colors.progress = 90;
-
-/**
- * Initialize a new `Progress` bar test reporter.
- *
- * @param {Runner} runner
- * @param {Object} options
- * @api public
- */
-
-function Progress(runner, options) {
-  Base.call(this, runner);
-
-  var self = this
-    , options = options || {}
-    , stats = this.stats
-    , width = Base.window.width * .50 | 0
-    , total = runner.total
-    , complete = 0
-    , max = Math.max;
-
-  // default chars
-  options.open = options.open || '[';
-  options.complete = options.complete || '▬';
-  options.incomplete = options.incomplete || Base.symbols.dot;
-  options.close = options.close || ']';
-  options.verbose = false;
-
-  // tests started
-  runner.on('start', function(){
-    console.log();
-    cursor.hide();
-  });
-
-  // tests complete
-  runner.on('test end', function(){
-    complete++;
-    var incomplete = total - complete
-      , percent = complete / total
-      , n = width * percent | 0
-      , i = width - n;
-
-    cursor.CR();
-    process.stdout.write('\u001b[J');
-    process.stdout.write(color('progress', '  ' + options.open));
-    process.stdout.write(Array(n).join(options.complete));
-    process.stdout.write(Array(i).join(options.incomplete));
-    process.stdout.write(color('progress', options.close));
-    if (options.verbose) {
-      process.stdout.write(color('progress', ' ' + complete + ' of ' + total));
-    }
-  });
-
-  // tests are complete, output some stats
-  // and the failures if any
-  runner.on('end', function(){
-    cursor.show();
-    console.log();
-    self.epilogue();
-  });
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-Progress.prototype = new F;
-Progress.prototype.constructor = Progress;
-
-
-}); // module: reporters/progress.js
-
-require.register("reporters/spec.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , cursor = Base.cursor
-  , color = Base.color;
-
-/**
- * Expose `Spec`.
- */
-
-exports = module.exports = Spec;
-
-/**
- * Initialize a new `Spec` test reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Spec(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , indents = 0
-    , n = 0;
-
-  function indent() {
-    return Array(indents).join('  ')
-  }
-
-  runner.on('start', function(){
-    console.log();
-  });
-
-  runner.on('suite', function(suite){
-    ++indents;
-    console.log(color('suite', '%s%s'), indent(), suite.title);
-  });
-
-  runner.on('suite end', function(suite){
-    --indents;
-    if (1 == indents) console.log();
-  });
-
-  runner.on('test', function(test){
-    process.stdout.write(indent() + color('pass', '  ◦ ' + test.title + ': '));
-  });
-
-  runner.on('pending', function(test){
-    var fmt = indent() + color('pending', '  - %s');
-    console.log(fmt, test.title);
-  });
-
-  runner.on('pass', function(test){
-    if ('fast' == test.speed) {
-      var fmt = indent()
-        + color('checkmark', '  ' + Base.symbols.ok)
-        + color('pass', ' %s ');
-      cursor.CR();
-      console.log(fmt, test.title);
-    } else {
-      var fmt = indent()
-        + color('checkmark', '  ' + Base.symbols.ok)
-        + color('pass', ' %s ')
-        + color(test.speed, '(%dms)');
-      cursor.CR();
-      console.log(fmt, test.title, test.duration);
-    }
-  });
-
-  runner.on('fail', function(test, err){
-    cursor.CR();
-    console.log(indent() + color('fail', '  %d) %s'), ++n, test.title);
-  });
-
-  runner.on('end', self.epilogue.bind(self));
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-Spec.prototype = new F;
-Spec.prototype.constructor = Spec;
-
-
-}); // module: reporters/spec.js
-
-require.register("reporters/tap.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , cursor = Base.cursor
-  , color = Base.color;
-
-/**
- * Expose `TAP`.
- */
-
-exports = module.exports = TAP;
-
-/**
- * Initialize a new `TAP` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function TAP(runner) {
-  Base.call(this, runner);
-
-  var self = this
-    , stats = this.stats
-    , n = 1
-    , passes = 0
-    , failures = 0;
-
-  runner.on('start', function(){
-    var total = runner.grepTotal(runner.suite);
-    console.log('%d..%d', 1, total);
-  });
-
-  runner.on('test end', function(){
-    ++n;
-  });
-
-  runner.on('pending', function(test){
-    console.log('ok %d %s # SKIP -', n, title(test));
-  });
-
-  runner.on('pass', function(test){
-    passes++;
-    console.log('ok %d %s', n, title(test));
-  });
-
-  runner.on('fail', function(test, err){
-    failures++;
-    console.log('not ok %d %s', n, title(test));
-    if (err.stack) console.log(err.stack.replace(/^/gm, '  '));
-  });
-
-  runner.on('end', function(){
-    console.log('# tests ' + (passes + failures));
-    console.log('# pass ' + passes);
-    console.log('# fail ' + failures);
-  });
-}
-
-/**
- * Return a TAP-safe title of `test`
- *
- * @param {Object} test
- * @return {String}
- * @api private
- */
-
-function title(test) {
-  return test.fullTitle().replace(/#/g, '');
-}
-
-}); // module: reporters/tap.js
-
-require.register("reporters/teamcity.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base');
-
-/**
- * Expose `Teamcity`.
- */
-
-exports = module.exports = Teamcity;
-
-/**
- * Initialize a new `Teamcity` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function Teamcity(runner) {
-  Base.call(this, runner);
-  var stats = this.stats;
-
-  runner.on('start', function() {
-    console.log("##teamcity[testSuiteStarted name='mocha.suite']");
-  });
-
-  runner.on('test', function(test) {
-    console.log("##teamcity[testStarted name='" + escape(test.fullTitle()) + "']");
-  });
-
-  runner.on('fail', function(test, err) {
-    console.log("##teamcity[testFailed name='" + escape(test.fullTitle()) + "' message='" + escape(err.message) + "']");
-  });
-
-  runner.on('pending', function(test) {
-    console.log("##teamcity[testIgnored name='" + escape(test.fullTitle()) + "' message='pending']");
-  });
-
-  runner.on('test end', function(test) {
-    console.log("##teamcity[testFinished name='" + escape(test.fullTitle()) + "' duration='" + test.duration + "']");
-  });
-
-  runner.on('end', function() {
-    console.log("##teamcity[testSuiteFinished name='mocha.suite' duration='" + stats.duration + "']");
-  });
-}
-
-/**
- * Escape the given `str`.
- */
-
-function escape(str) {
-  return str
-    .replace(/\|/g, "||")
-    .replace(/\n/g, "|n")
-    .replace(/\r/g, "|r")
-    .replace(/\[/g, "|[")
-    .replace(/\]/g, "|]")
-    .replace(/\u0085/g, "|x")
-    .replace(/\u2028/g, "|l")
-    .replace(/\u2029/g, "|p")
-    .replace(/'/g, "|'");
-}
-
-}); // module: reporters/teamcity.js
-
-require.register("reporters/xunit.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Base = require('./base')
-  , utils = require('../utils')
-  , escape = utils.escape;
-
-/**
- * Save timer references to avoid Sinon interfering (see GH-237).
- */
-
-var Date = global.Date
-  , setTimeout = global.setTimeout
-  , setInterval = global.setInterval
-  , clearTimeout = global.clearTimeout
-  , clearInterval = global.clearInterval;
-
-/**
- * Expose `XUnit`.
- */
-
-exports = module.exports = XUnit;
-
-/**
- * Initialize a new `XUnit` reporter.
- *
- * @param {Runner} runner
- * @api public
- */
-
-function XUnit(runner) {
-  Base.call(this, runner);
-  var stats = this.stats
-    , tests = []
-    , self = this;
-
-  runner.on('pass', function(test){
-    tests.push(test);
-  });
-
-  runner.on('fail', function(test){
-    tests.push(test);
-  });
-
-  runner.on('end', function(){
-    console.log(tag('testsuite', {
-        name: 'Mocha Tests'
-      , tests: stats.tests
-      , failures: stats.failures
-      , errors: stats.failures
-      , skip: stats.tests - stats.failures - stats.passes
-      , timestamp: (new Date).toUTCString()
-      , time: stats.duration / 1000
-    }, false));
-
-    tests.forEach(test);
-    console.log('</testsuite>');
-  });
-}
-
-/**
- * Inherit from `Base.prototype`.
- */
-
-function F(){};
-F.prototype = Base.prototype;
-XUnit.prototype = new F;
-XUnit.prototype.constructor = XUnit;
-
-
-/**
- * Output tag for the given `test.`
- */
-
-function test(test) {
-  var attrs = {
-      classname: test.parent.fullTitle()
-    , name: test.title
-    , time: test.duration / 1000
-  };
-
-  if ('failed' == test.state) {
-    var err = test.err;
-    attrs.message = escape(err.message);
-    console.log(tag('testcase', attrs, false, tag('failure', attrs, false, cdata(err.stack))));
-  } else if (test.pending) {
-    console.log(tag('testcase', attrs, false, tag('skipped', {}, true)));
-  } else {
-    console.log(tag('testcase', attrs, true) );
-  }
-}
-
-/**
- * HTML tag helper.
- */
-
-function tag(name, attrs, close, content) {
-  var end = close ? '/>' : '>'
-    , pairs = []
-    , tag;
-
-  for (var key in attrs) {
-    pairs.push(key + '="' + escape(attrs[key]) + '"');
-  }
-
-  tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end;
-  if (content) tag += content + '</' + name + end;
-  return tag;
-}
-
-/**
- * Return cdata escaped CDATA `str`.
- */
-
-function cdata(str) {
-  return '<![CDATA[' + escape(str) + ']]>';
-}
-
-}); // module: reporters/xunit.js
-
-require.register("runnable.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = require('browser/events').EventEmitter
-  , debug = require('browser/debug')('mocha:runnable')
-  , milliseconds = require('./ms');
-
-/**
- * Save timer references to avoid Sinon interfering (see GH-237).
- */
-
-var Date = global.Date
-  , setTimeout = global.setTimeout
-  , setInterval = global.setInterval
-  , clearTimeout = global.clearTimeout
-  , clearInterval = global.clearInterval;
-
-/**
- * Object#toString().
- */
-
-var toString = Object.prototype.toString;
-
-/**
- * Expose `Runnable`.
- */
-
-module.exports = Runnable;
-
-/**
- * Initialize a new `Runnable` with the given `title` and callback `fn`.
- *
- * @param {String} title
- * @param {Function} fn
- * @api private
- */
-
-function Runnable(title, fn) {
-  this.title = title;
-  this.fn = fn;
-  this.async = fn && fn.length;
-  this.sync = ! this.async;
-  this._timeout = 2000;
-  this._slow = 75;
-  this.timedOut = false;
-}
-
-/**
- * Inherit from `EventEmitter.prototype`.
- */
-
-function F(){};
-F.prototype = EventEmitter.prototype;
-Runnable.prototype = new F;
-Runnable.prototype.constructor = Runnable;
-
-
-/**
- * Set & get timeout `ms`.
- *
- * @param {Number|String} ms
- * @return {Runnable|Number} ms or self
- * @api private
- */
-
-Runnable.prototype.timeout = function(ms){
-  if (0 == arguments.length) return this._timeout;
-  if ('string' == typeof ms) ms = milliseconds(ms);
-  debug('timeout %d', ms);
-  this._timeout = ms;
-  if (this.timer) this.resetTimeout();
-  return this;
-};
-
-/**
- * Set & get slow `ms`.
- *
- * @param {Number|String} ms
- * @return {Runnable|Number} ms or self
- * @api private
- */
-
-Runnable.prototype.slow = function(ms){
-  if (0 === arguments.length) return this._slow;
-  if ('string' == typeof ms) ms = milliseconds(ms);
-  debug('timeout %d', ms);
-  this._slow = ms;
-  return this;
-};
-
-/**
- * Return the full title generated by recursively
- * concatenating the parent's full title.
- *
- * @return {String}
- * @api public
- */
-
-Runnable.prototype.fullTitle = function(){
-  return this.parent.fullTitle() + ' ' + this.title;
-};
-
-/**
- * Clear the timeout.
- *
- * @api private
- */
-
-Runnable.prototype.clearTimeout = function(){
-  clearTimeout(this.timer);
-};
-
-/**
- * Inspect the runnable void of private properties.
- *
- * @return {String}
- * @api private
- */
-
-Runnable.prototype.inspect = function(){
-  return JSON.stringify(this, function(key, val){
-    if ('_' == key[0]) return;
-    if ('parent' == key) return '#<Suite>';
-    if ('ctx' == key) return '#<Context>';
-    return val;
-  }, 2);
-};
-
-/**
- * Reset the timeout.
- *
- * @api private
- */
-
-Runnable.prototype.resetTimeout = function(){
-  var self = this
-    , ms = this.timeout();
-
-  this.clearTimeout();
-  if (ms) {
-    this.timer = setTimeout(function(){
-      self.callback(new Error('timeout of ' + ms + 'ms exceeded'));
-      self.timedOut = true;
-    }, ms);
-  }
-};
-
-/**
- * Run the test and invoke `fn(err)`.
- *
- * @param {Function} fn
- * @api private
- */
-
-Runnable.prototype.run = function(fn){
-  var self = this
-    , ms = this.timeout()
-    , start = new Date
-    , ctx = this.ctx
-    , finished
-    , emitted;
-
-  if (ctx) ctx.runnable(this);
-
-  // timeout
-  if (this.async) {
-    if (ms) {
-      this.timer = setTimeout(function(){
-        done(new Error('timeout of ' + ms + 'ms exceeded'));
-        self.timedOut = true;
-      }, ms);
-    }
-  }
-
-  // called multiple times
-  function multiple(err) {
-    if (emitted) return;
-    emitted = true;
-    self.emit('error', err || new Error('done() called multiple times'));
-  }
-
-  // finished
-  function done(err) {
-    if (self.timedOut) return;
-    if (finished) return multiple(err);
-    self.clearTimeout();
-    self.duration = new Date - start;
-    finished = true;
-    fn(err);
-  }
-
-  // for .resetTimeout()
-  this.callback = done;
-
-  // async
-  if (this.async) {
-    try {
-      this.fn.call(ctx, function(err){
-        if (err instanceof Error || toString.call(err) === "[object Error]") return done(err);
-        if (null != err) return done(new Error('done() invoked with non-Error: ' + err));
-        done();
-      });
-    } catch (err) {
-      done(err);
-    }
-    return;
-  }
-
-  if (this.asyncOnly) {
-    return done(new Error('--async-only option in use without declaring `done()`'));
-  }
-
-  // sync
-  try {
-    if (!this.pending) this.fn.call(ctx);
-    this.duration = new Date - start;
-    fn();
-  } catch (err) {
-    fn(err);
-  }
-};
-
-}); // module: runnable.js
-
-require.register("runner.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = require('browser/events').EventEmitter
-  , debug = require('browser/debug')('mocha:runner')
-  , Test = require('./test')
-  , utils = require('./utils')
-  , filter = utils.filter
-  , keys = utils.keys;
-
-/**
- * Non-enumerable globals.
- */
-
-var globals = [
-  'setTimeout',
-  'clearTimeout',
-  'setInterval',
-  'clearInterval',
-  'XMLHttpRequest',
-  'Date'
-];
-
-/**
- * Expose `Runner`.
- */
-
-module.exports = Runner;
-
-/**
- * Initialize a `Runner` for the given `suite`.
- *
- * Events:
- *
- *   - `start`  execution started
- *   - `end`  execution complete
- *   - `suite`  (suite) test suite execution started
- *   - `suite end`  (suite) all tests (and sub-suites) have finished
- *   - `test`  (test) test execution started
- *   - `test end`  (test) test completed
- *   - `hook`  (hook) hook execution started
- *   - `hook end`  (hook) hook complete
- *   - `pass`  (test) test passed
- *   - `fail`  (test, err) test failed
- *
- * @api public
- */
-
-function Runner(suite) {
-  var self = this;
-  this._globals = [];
-  this.suite = suite;
-  this.total = suite.total();
-  this.failures = 0;
-  this.on('test end', function(test){ self.checkGlobals(test); });
-  this.on('hook end', function(hook){ self.checkGlobals(hook); });
-  this.grep(/.*/);
-  this.globals(this.globalProps().concat(['errno']));
-}
-
-/**
- * Wrapper for setImmediate, process.nextTick, or browser polyfill.
- *
- * @param {Function} fn
- * @api private
- */
-
-Runner.immediately = global.setImmediate || process.nextTick;
-
-/**
- * Inherit from `EventEmitter.prototype`.
- */
-
-function F(){};
-F.prototype = EventEmitter.prototype;
-Runner.prototype = new F;
-Runner.prototype.constructor = Runner;
-
-
-/**
- * Run tests with full titles matching `re`. Updates runner.total
- * with number of tests matched.
- *
- * @param {RegExp} re
- * @param {Boolean} invert
- * @return {Runner} for chaining
- * @api public
- */
-
-Runner.prototype.grep = function(re, invert){
-  debug('grep %s', re);
-  this._grep = re;
-  this._invert = invert;
-  this.total = this.grepTotal(this.suite);
-  return this;
-};
-
-/**
- * Returns the number of tests matching the grep search for the
- * given suite.
- *
- * @param {Suite} suite
- * @return {Number}
- * @api public
- */
-
-Runner.prototype.grepTotal = function(suite) {
-  var self = this;
-  var total = 0;
-
-  suite.eachTest(function(test){
-    var match = self._grep.test(test.fullTitle());
-    if (self._invert) match = !match;
-    if (match) total++;
-  });
-
-  return total;
-};
-
-/**
- * Return a list of global properties.
- *
- * @return {Array}
- * @api private
- */
-
-Runner.prototype.globalProps = function() {
-  var props = utils.keys(global);
-
-  // non-enumerables
-  for (var i = 0; i < globals.length; ++i) {
-    if (~utils.indexOf(props, globals[i])) continue;
-    props.push(globals[i]);
-  }
-
-  return props;
-};
-
-/**
- * Allow the given `arr` of globals.
- *
- * @param {Array} arr
- * @return {Runner} for chaining
- * @api public
- */
-
-Runner.prototype.globals = function(arr){
-  if (0 == arguments.length) return this._globals;
-  debug('globals %j', arr);
-  utils.forEach(arr, function(arr){
-    this._globals.push(arr);
-  }, this);
-  return this;
-};
-
-/**
- * Check for global variable leaks.
- *
- * @api private
- */
-
-Runner.prototype.checkGlobals = function(test){
-  if (this.ignoreLeaks) return;
-  var ok = this._globals;
-  var globals = this.globalProps();
-  var isNode = process.kill;
-  var leaks;
-
-  // check length - 2 ('errno' and 'location' globals)
-  if (isNode && 1 == ok.length - globals.length) return
-  else if (2 == ok.length - globals.length) return;
-
-  leaks = filterLeaks(ok, globals);
-  this._globals = this._globals.concat(leaks);
-
-  if (leaks.length > 1) {
-    this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + ''));
-  } else if (leaks.length) {
-    this.fail(test, new Error('global leak detected: ' + leaks[0]));
-  }
-};
-
-/**
- * Fail the given `test`.
- *
- * @param {Test} test
- * @param {Error} err
- * @api private
- */
-
-Runner.prototype.fail = function(test, err){
-  ++this.failures;
-  test.state = 'failed';
-
-  if ('string' == typeof err) {
-    err = new Error('the string "' + err + '" was thrown, throw an Error :)');
-  }
-
-  this.emit('fail', test, err);
-};
-
-/**
- * Fail the given `hook` with `err`.
- *
- * Hook failures (currently) hard-end due
- * to that fact that a failing hook will
- * surely cause subsequent tests to fail,
- * causing jumbled reporting.
- *
- * @param {Hook} hook
- * @param {Error} err
- * @api private
- */
-
-Runner.prototype.failHook = function(hook, err){
-  this.fail(hook, err);
-  this.emit('end');
-};
-
-/**
- * Run hook `name` callbacks and then invoke `fn()`.
- *
- * @param {String} name
- * @param {Function} function
- * @api private
- */
-
-Runner.prototype.hook = function(name, fn){
-  var suite = this.suite
-    , hooks = suite['_' + name]
-    , self = this
-    , timer;
-
-  function next(i) {
-    var hook = hooks[i];
-    if (!hook) return fn();
-    self.currentRunnable = hook;
-
-    self.emit('hook', hook);
-
-    hook.on('error', function(err){
-      self.failHook(hook, err);
-    });
-
-    hook.run(function(err){
-      hook.removeAllListeners('error');
-      var testError = hook.error();
-      if (testError) self.fail(self.test, testError);
-      if (err) return self.failHook(hook, err);
-      self.emit('hook end', hook);
-      next(++i);
-    });
-  }
-
-  Runner.immediately(function(){
-    next(0);
-  });
-};
-
-/**
- * Run hook `name` for the given array of `suites`
- * in order, and callback `fn(err)`.
- *
- * @param {String} name
- * @param {Array} suites
- * @param {Function} fn
- * @api private
- */
-
-Runner.prototype.hooks = function(name, suites, fn){
-  var self = this
-    , orig = this.suite;
-
-  function next(suite) {
-    self.suite = suite;
-
-    if (!suite) {
-      self.suite = orig;
-      return fn();
-    }
-
-    self.hook(name, function(err){
-      if (err) {
-        self.suite = orig;
-        return fn(err);
-      }
-
-      next(suites.pop());
-    });
-  }
-
-  next(suites.pop());
-};
-
-/**
- * Run hooks from the top level down.
- *
- * @param {String} name
- * @param {Function} fn
- * @api private
- */
-
-Runner.prototype.hookUp = function(name, fn){
-  var suites = [this.suite].concat(this.parents()).reverse();
-  this.hooks(name, suites, fn);
-};
-
-/**
- * Run hooks from the bottom up.
- *
- * @param {String} name
- * @param {Function} fn
- * @api private
- */
-
-Runner.prototype.hookDown = function(name, fn){
-  var suites = [this.suite].concat(this.parents());
-  this.hooks(name, suites, fn);
-};
-
-/**
- * Return an array of parent Suites from
- * closest to furthest.
- *
- * @return {Array}
- * @api private
- */
-
-Runner.prototype.parents = function(){
-  var suite = this.suite
-    , suites = [];
-  while (suite = suite.parent) suites.push(suite);
-  return suites;
-};
-
-/**
- * Run the current test and callback `fn(err)`.
- *
- * @param {Function} fn
- * @api private
- */
-
-Runner.prototype.runTest = function(fn){
-  var test = this.test
-    , self = this;
-
-  if (this.asyncOnly) test.asyncOnly = true;
-
-  try {
-    test.on('error', function(err){
-      self.fail(test, err);
-    });
-    test.run(fn);
-  } catch (err) {
-    fn(err);
-  }
-};
-
-/**
- * Run tests in the given `suite` and invoke
- * the callback `fn()` when complete.
- *
- * @param {Suite} suite
- * @param {Function} fn
- * @api private
- */
-
-Runner.prototype.runTests = function(suite, fn){
-  var self = this
-    , tests = suite.tests.slice()
-    , test;
-
-  function next(err) {
-    // if we bail after first err
-    if (self.failures && suite._bail) return fn();
-
-    // next test
-    test = tests.shift();
-
-    // all done
-    if (!test) return fn();
-
-    // grep
-    var match = self._grep.test(test.fullTitle());
-    if (self._invert) match = !match;
-    if (!match) return next();
-
-    // pending
-    if (test.pending) {
-      self.emit('pending', test);
-      self.emit('test end', test);
-      return next();
-    }
-
-    // execute test and hook(s)
-    self.emit('test', self.test = test);
-    self.hookDown('beforeEach', function(){
-      self.currentRunnable = self.test;
-      self.runTest(function(err){
-        test = self.test;
-
-        if (err) {
-          self.fail(test, err);
-          self.emit('test end', test);
-          return self.hookUp('afterEach', next);
-        }
-
-        test.state = 'passed';
-        self.emit('pass', test);
-        self.emit('test end', test);
-        self.hookUp('afterEach', next);
-      });
-    });
-  }
-
-  this.next = next;
-  next();
-};
-
-/**
- * Run the given `suite` and invoke the
- * callback `fn()` when complete.
- *
- * @param {Suite} suite
- * @param {Function} fn
- * @api private
- */
-
-Runner.prototype.runSuite = function(suite, fn){
-  var total = this.grepTotal(suite)
-    , self = this
-    , i = 0;
-
-  debug('run suite %s', suite.fullTitle());
-
-  if (!total) return fn();
-
-  this.emit('suite', this.suite = suite);
-
-  function next() {
-    var curr = suite.suites[i++];
-    if (!curr) return done();
-    self.runSuite(curr, next);
-  }
-
-  function done() {
-    self.suite = suite;
-    self.hook('afterAll', function(){
-      self.emit('suite end', suite);
-      fn();
-    });
-  }
-
-  this.hook('beforeAll', function(){
-    self.runTests(suite, next);
-  });
-};
-
-/**
- * Handle uncaught exceptions.
- *
- * @param {Error} err
- * @api private
- */
-
-Runner.prototype.uncaught = function(err){
-  debug('uncaught exception %s', err.message);
-  var runnable = this.currentRunnable;
-  if (!runnable || 'failed' == runnable.state) return;
-  runnable.clearTimeout();
-  err.uncaught = true;
-  this.fail(runnable, err);
-
-  // recover from test
-  if ('test' == runnable.type) {
-    this.emit('test end', runnable);
-    this.hookUp('afterEach', this.next);
-    return;
-  }
-
-  // bail on hooks
-  this.emit('end');
-};
-
-/**
- * Run the root suite and invoke `fn(failures)`
- * on completion.
- *
- * @param {Function} fn
- * @return {Runner} for chaining
- * @api public
- */
-
-Runner.prototype.run = function(fn){
-  var self = this
-    , fn = fn || function(){};
-
-  function uncaught(err){
-    self.uncaught(err);
-  }
-
-  debug('start');
-
-  // callback
-  this.on('end', function(){
-    debug('end');
-    process.removeListener('uncaughtException', uncaught);
-    fn(self.failures);
-  });
-
-  // run suites
-  this.emit('start');
-  this.runSuite(this.suite, function(){
-    debug('finished running');
-    self.emit('end');
-  });
-
-  // uncaught exception
-  process.on('uncaughtException', uncaught);
-
-  return this;
-};
-
-/**
- * Filter leaks with the given globals flagged as `ok`.
- *
- * @param {Array} ok
- * @param {Array} globals
- * @return {Array}
- * @api private
- */
-
-function filterLeaks(ok, globals) {
-  return filter(globals, function(key){
-    // Firefox and Chrome exposes iframes as index inside the window object
-    if (/^d+/.test(key)) return false;
-    var matched = filter(ok, function(ok){
-      if (~ok.indexOf('*')) return 0 == key.indexOf(ok.split('*')[0]);
-      // Opera and IE expose global variables for HTML element IDs (issue #243)
-      if (/^mocha-/.test(key)) return true;
-      return key == ok;
-    });
-    return matched.length == 0 && (!global.navigator || 'onerror' !== key);
-  });
-}
-
-}); // module: runner.js
-
-require.register("suite.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = require('browser/events').EventEmitter
-  , debug = require('browser/debug')('mocha:suite')
-  , milliseconds = require('./ms')
-  , utils = require('./utils')
-  , Hook = require('./hook');
-
-/**
- * Expose `Suite`.
- */
-
-exports = module.exports = Suite;
-
-/**
- * Create a new `Suite` with the given `title`
- * and parent `Suite`. When a suite with the
- * same title is already present, that suite
- * is returned to provide nicer reporter
- * and more flexible meta-testing.
- *
- * @param {Suite} parent
- * @param {String} title
- * @return {Suite}
- * @api public
- */
-
-exports.create = function(parent, title){
-  var suite = new Suite(title, parent.ctx);
-  suite.parent = parent;
-  if (parent.pending) suite.pending = true;
-  title = suite.fullTitle();
-  parent.addSuite(suite);
-  return suite;
-};
-
-/**
- * Initialize a new `Suite` with the given
- * `title` and `ctx`.
- *
- * @param {String} title
- * @param {Context} ctx
- * @api private
- */
-
-function Suite(title, ctx) {
-  this.title = title;
-  this.ctx = ctx;
-  this.suites = [];
-  this.tests = [];
-  this.pending = false;
-  this._beforeEach = [];
-  this._beforeAll = [];
-  this._afterEach = [];
-  this._afterAll = [];
-  this.root = !title;
-  this._timeout = 2000;
-  this._slow = 75;
-  this._bail = false;
-}
-
-/**
- * Inherit from `EventEmitter.prototype`.
- */
-
-function F(){};
-F.prototype = EventEmitter.prototype;
-Suite.prototype = new F;
-Suite.prototype.constructor = Suite;
-
-
-/**
- * Return a clone of this `Suite`.
- *
- * @return {Suite}
- * @api private
- */
-
-Suite.prototype.clone = function(){
-  var suite = new Suite(this.title);
-  debug('clone');
-  suite.ctx = this.ctx;
-  suite.timeout(this.timeout());
-  suite.slow(this.slow());
-  suite.bail(this.bail());
-  return suite;
-};
-
-/**
- * Set timeout `ms` or short-hand such as "2s".
- *
- * @param {Number|String} ms
- * @return {Suite|Number} for chaining
- * @api private
- */
-
-Suite.prototype.timeout = function(ms){
-  if (0 == arguments.length) return this._timeout;
-  if ('string' == typeof ms) ms = milliseconds(ms);
-  debug('timeout %d', ms);
-  this._timeout = parseInt(ms, 10);
-  return this;
-};
-
-/**
- * Set slow `ms` or short-hand such as "2s".
- *
- * @param {Number|String} ms
- * @return {Suite|Number} for chaining
- * @api private
- */
-
-Suite.prototype.slow = function(ms){
-  if (0 === arguments.length) return this._slow;
-  if ('string' == typeof ms) ms = milliseconds(ms);
-  debug('slow %d', ms);
-  this._slow = ms;
-  return this;
-};
-
-/**
- * Sets whether to bail after first error.
- *
- * @parma {Boolean} bail
- * @return {Suite|Number} for chaining
- * @api private
- */
-
-Suite.prototype.bail = function(bail){
-  if (0 == arguments.length) return this._bail;
-  debug('bail %s', bail);
-  this._bail = bail;
-  return this;
-};
-
-/**
- * Run `fn(test[, done])` before running tests.
- *
- * @param {Function} fn
- * @return {Suite} for chaining
- * @api private
- */
-
-Suite.prototype.beforeAll = function(fn){
-  if (this.pending) return this;
-  var hook = new Hook('"before all" hook', fn);
-  hook.parent = this;
-  hook.timeout(this.timeout());
-  hook.slow(this.slow());
-  hook.ctx = this.ctx;
-  this._beforeAll.push(hook);
-  this.emit('beforeAll', hook);
-  return this;
-};
-
-/**
- * Run `fn(test[, done])` after running tests.
- *
- * @param {Function} fn
- * @return {Suite} for chaining
- * @api private
- */
-
-Suite.prototype.afterAll = function(fn){
-  if (this.pending) return this;
-  var hook = new Hook('"after all" hook', fn);
-  hook.parent = this;
-  hook.timeout(this.timeout());
-  hook.slow(this.slow());
-  hook.ctx = this.ctx;
-  this._afterAll.push(hook);
-  this.emit('afterAll', hook);
-  return this;
-};
-
-/**
- * Run `fn(test[, done])` before each test case.
- *
- * @param {Function} fn
- * @return {Suite} for chaining
- * @api private
- */
-
-Suite.prototype.beforeEach = function(fn){
-  if (this.pending) return this;
-  var hook = new Hook('"before each" hook', fn);
-  hook.parent = this;
-  hook.timeout(this.timeout());
-  hook.slow(this.slow());
-  hook.ctx = this.ctx;
-  this._beforeEach.push(hook);
-  this.emit('beforeEach', hook);
-  return this;
-};
-
-/**
- * Run `fn(test[, done])` after each test case.
- *
- * @param {Function} fn
- * @return {Suite} for chaining
- * @api private
- */
-
-Suite.prototype.afterEach = function(fn){
-  if (this.pending) return this;
-  var hook = new Hook('"after each" hook', fn);
-  hook.parent = this;
-  hook.timeout(this.timeout());
-  hook.slow(this.slow());
-  hook.ctx = this.ctx;
-  this._afterEach.push(hook);
-  this.emit('afterEach', hook);
-  return this;
-};
-
-/**
- * Add a test `suite`.
- *
- * @param {Suite} suite
- * @return {Suite} for chaining
- * @api private
- */
-
-Suite.prototype.addSuite = function(suite){
-  suite.parent = this;
-  suite.timeout(this.timeout());
-  suite.slow(this.slow());
-  suite.bail(this.bail());
-  this.suites.push(suite);
-  this.emit('suite', suite);
-  return this;
-};
-
-/**
- * Add a `test` to this suite.
- *
- * @param {Test} test
- * @return {Suite} for chaining
- * @api private
- */
-
-Suite.prototype.addTest = function(test){
-  test.parent = this;
-  test.timeout(this.timeout());
-  test.slow(this.slow());
-  test.ctx = this.ctx;
-  this.tests.push(test);
-  this.emit('test', test);
-  return this;
-};
-
-/**
- * Return the full title generated by recursively
- * concatenating the parent's full title.
- *
- * @return {String}
- * @api public
- */
-
-Suite.prototype.fullTitle = function(){
-  if (this.parent) {
-    var full = this.parent.fullTitle();
-    if (full) return full + ' ' + this.title;
-  }
-  return this.title;
-};
-
-/**
- * Return the total number of tests.
- *
- * @return {Number}
- * @api public
- */
-
-Suite.prototype.total = function(){
-  return utils.reduce(this.suites, function(sum, suite){
-    return sum + suite.total();
-  }, 0) + this.tests.length;
-};
-
-/**
- * Iterates through each suite recursively to find
- * all tests. Applies a function in the format
- * `fn(test)`.
- *
- * @param {Function} fn
- * @return {Suite}
- * @api private
- */
-
-Suite.prototype.eachTest = function(fn){
-  utils.forEach(this.tests, fn);
-  utils.forEach(this.suites, function(suite){
-    suite.eachTest(fn);
-  });
-  return this;
-};
-
-}); // module: suite.js
-
-require.register("test.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var Runnable = require('./runnable');
-
-/**
- * Expose `Test`.
- */
-
-module.exports = Test;
-
-/**
- * Initialize a new `Test` with the given `title` and callback `fn`.
- *
- * @param {String} title
- * @param {Function} fn
- * @api private
- */
-
-function Test(title, fn) {
-  Runnable.call(this, title, fn);
-  this.pending = !fn;
-  this.type = 'test';
-}
-
-/**
- * Inherit from `Runnable.prototype`.
- */
-
-function F(){};
-F.prototype = Runnable.prototype;
-Test.prototype = new F;
-Test.prototype.constructor = Test;
-
-
-}); // module: test.js
-
-require.register("utils.js", function(module, exports, require){
-
-/**
- * Module dependencies.
- */
-
-var fs = require('browser/fs')
-  , path = require('browser/path')
-  , join = path.join
-  , debug = require('browser/debug')('mocha:watch');
-
-/**
- * Ignored directories.
- */
-
-var ignore = ['node_modules', '.git'];
-
-/**
- * Escape special characters in the given string of html.
- *
- * @param  {String} html
- * @return {String}
- * @api private
- */
-
-exports.escape = function(html){
-  return String(html)
-    .replace(/&/g, '&amp;')
-    .replace(/"/g, '&quot;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;');
-};
-
-/**
- * Array#forEach (<=IE8)
- *
- * @param {Array} array
- * @param {Function} fn
- * @param {Object} scope
- * @api private
- */
-
-exports.forEach = function(arr, fn, scope){
-  for (var i = 0, l = arr.length; i < l; i++)
-    fn.call(scope, arr[i], i);
-};
-
-/**
- * Array#indexOf (<=IE8)
- *
- * @parma {Array} arr
- * @param {Object} obj to find index of
- * @param {Number} start
- * @api private
- */
-
-exports.indexOf = function(arr, obj, start){
-  for (var i = start || 0, l = arr.length; i < l; i++) {
-    if (arr[i] === obj)
-      return i;
-  }
-  return -1;
-};
-
-/**
- * Array#reduce (<=IE8)
- *
- * @param {Array} array
- * @param {Function} fn
- * @param {Object} initial value
- * @api private
- */
-
-exports.reduce = function(arr, fn, val){
-  var rval = val;
-
-  for (var i = 0, l = arr.length; i < l; i++) {
-    rval = fn(rval, arr[i], i, arr);
-  }
-
-  return rval;
-};
-
-/**
- * Array#filter (<=IE8)
- *
- * @param {Array} array
- * @param {Function} fn
- * @api private
- */
-
-exports.filter = function(arr, fn){
-  var ret = [];
-
-  for (var i = 0, l = arr.length; i < l; i++) {
-    var val = arr[i];
-    if (fn(val, i, arr)) ret.push(val);
-  }
-
-  return ret;
-};
-
-/**
- * Object.keys (<=IE8)
- *
- * @param {Object} obj
- * @return {Array} keys
- * @api private
- */
-
-exports.keys = Object.keys || function(obj) {
-  var keys = []
-    , has = Object.prototype.hasOwnProperty // for `window` on <=IE8
-
-  for (var key in obj) {
-    if (has.call(obj, key)) {
-      keys.push(key);
-    }
-  }
-
-  return keys;
-};
-
-/**
- * Watch the given `files` for changes
- * and invoke `fn(file)` on modification.
- *
- * @param {Array} files
- * @param {Function} fn
- * @api private
- */
-
-exports.watch = function(files, fn){
-  var options = { interval: 100 };
-  files.forEach(function(file){
-    debug('file %s', file);
-    fs.watchFile(file, options, function(curr, prev){
-      if (prev.mtime < curr.mtime) fn(file);
-    });
-  });
-};
-
-/**
- * Ignored files.
- */
-
-function ignored(path){
-  return !~ignore.indexOf(path);
-}
-
-/**
- * Lookup files in the given `dir`.
- *
- * @return {Array}
- * @api private
- */
-
-exports.files = function(dir, ret){
-  ret = ret || [];
-
-  fs.readdirSync(dir)
-  .filter(ignored)
-  .forEach(function(path){
-    path = join(dir, path);
-    if (fs.statSync(path).isDirectory()) {
-      exports.files(path, ret);
-    } else if (path.match(/\.(js|coffee)$/)) {
-      ret.push(path);
-    }
-  });
-
-  return ret;
-};
-
-/**
- * Compute a slug from the given `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-exports.slug = function(str){
-  return str
-    .toLowerCase()
-    .replace(/ +/g, '-')
-    .replace(/[^-\w]/g, '');
-};
-
-/**
- * Strip the function definition from `str`,
- * and re-indent for pre whitespace.
- */
-
-exports.clean = function(str) {
-  str = str
-    .replace(/^function *\(.*\) *{/, '')
-    .replace(/\s+\}$/, '');
-
-  var spaces = str.match(/^\n?( *)/)[1].length
-    , re = new RegExp('^ {' + spaces + '}', 'gm');
-
-  str = str.replace(re, '');
-
-  return exports.trim(str);
-};
-
-/**
- * Escape regular expression characters in `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-exports.escapeRegexp = function(str){
-  return str.replace(/[-\\^$*+?.()|[\]{}]/g, "\\$&");
-};
-
-/**
- * Trim the given `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-exports.trim = function(str){
-  return str.replace(/^\s+|\s+$/g, '');
-};
-
-/**
- * Parse the given `qs`.
- *
- * @param {String} qs
- * @return {Object}
- * @api private
- */
-
-exports.parseQuery = function(qs){
-  return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair){
-    var i = pair.indexOf('=')
-      , key = pair.slice(0, i)
-      , val = pair.slice(++i);
-
-    obj[key] = decodeURIComponent(val);
-    return obj;
-  }, {});
-};
-
-/**
- * Highlight the given string of `js`.
- *
- * @param {String} js
- * @return {String}
- * @api private
- */
-
-function highlight(js) {
-  return js
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;')
-    .replace(/\/\/(.*)/gm, '<span class="comment">//$1</span>')
-    .replace(/('.*?')/gm, '<span class="string">$1</span>')
-    .replace(/(\d+\.\d+)/gm, '<span class="number">$1</span>')
-    .replace(/(\d+)/gm, '<span class="number">$1</span>')
-    .replace(/\bnew *(\w+)/gm, '<span class="keyword">new</span> <span class="init">$1</span>')
-    .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '<span class="keyword">$1</span>')
-}
-
-/**
- * Highlight the contents of tag `name`.
- *
- * @param {String} name
- * @api private
- */
-
-exports.highlightTags = function(name) {
-  var code = document.getElementsByTagName(name);
-  for (var i = 0, len = code.length; i < len; ++i) {
-    code[i].innerHTML = highlight(code[i].innerHTML);
-  }
-};
-
-}); // module: utils.js
-
-/**
- * Save timer references to avoid Sinon interfering (see GH-237).
- */
-
-var Date = window.Date;
-var setTimeout = window.setTimeout;
-var setInterval = window.setInterval;
-var clearTimeout = window.clearTimeout;
-var clearInterval = window.clearInterval;
-
-/**
- * Node shims.
- *
- * These are meant only to allow
- * mocha.js to run untouched, not
- * to allow running node code in
- * the browser.
- */
-
-var process = {};
-process.exit = function(status){};
-process.stdout = {};
-global = window;
-
-/**
- * Remove uncaughtException listener.
- */
-
-process.removeListener = function(e){
-  if ('uncaughtException' == e) {
-    window.onerror = null;
-  }
-};
-
-/**
- * Implements uncaughtException listener.
- */
-
-process.on = function(e, fn){
-  if ('uncaughtException' == e) {
-    window.onerror = function(err, url, line){
-      fn(new Error(err + ' (' + url + ':' + line + ')'));
-    };
-  }
-};
-
-/**
- * Expose mocha.
- */
-
-var Mocha = window.Mocha = require('mocha'),
-    mocha = window.mocha = new Mocha({ reporter: 'html' });
-
-var immediateQueue = []
-  , immediateTimeout;
-
-function timeslice() {
-  var immediateStart = new Date().getTime();
-  while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) {
-    immediateQueue.shift()();
-  }
-  if (immediateQueue.length) {
-    immediateTimeout = setTimeout(timeslice, 0);
-  } else {
-    immediateTimeout = null;
-  }
-}
-
-/**
- * High-performance override of Runner.immediately.
- */
-
-Mocha.Runner.immediately = function(callback) {
-  immediateQueue.push(callback);
-  if (!immediateTimeout) {
-    immediateTimeout = setTimeout(timeslice, 0);
-  }
-};
-
-/**
- * Override ui to ensure that the ui functions are initialized.
- * Normally this would happen in Mocha.prototype.loadFiles.
- */
-
-mocha.ui = function(ui){
-  Mocha.prototype.ui.call(this, ui);
-  this.suite.emit('pre-require', window, null, this);
-  return this;
-};
-
-/**
- * Setup mocha with the given setting options.
- */
-
-mocha.setup = function(opts){
-  if ('string' == typeof opts) opts = { ui: opts };
-  for (var opt in opts) this[opt](opts[opt]);
-  return this;
-};
-
-/**
- * Run mocha, returning the Runner.
- */
-
-mocha.run = function(fn){
-  var options = mocha.options;
-  mocha.globals('location');
-
-  var query = Mocha.utils.parseQuery(window.location.search || '');
-  if (query.grep) mocha.grep(query.grep);
-  if (query.invert) mocha.invert();
-
-  return Mocha.prototype.run.call(mocha, function(){
-    Mocha.utils.highlightTags('code');
-    if (fn) fn();
-  });
-};
-})();
\ No newline at end of file
diff --git a/test/deps/proclaim.js b/test/deps/proclaim.js
deleted file mode 100644
index 6287d9b..0000000
--- a/test/deps/proclaim.js
+++ /dev/null
@@ -1,473 +0,0 @@
-/* global define */
-(function (root, proclaim) {
-    'use strict';
-
-
-    // Utilities
-    // ---------
-
-    // Utility for checking whether a value is undefined or null
-    function isUndefinedOrNull (val) {
-        return (val === null || typeof val === 'undefined');
-    }
-
-    // Utility for checking whether a value is an arguments object
-    function isArgumentsObject (val) {
-        return (Object.prototype.toString.call(val) === '[object Arguments]');
-    }
-
-    // Utility for checking whether a value is plain object
-    function isPlainObject (val) {
-        return Object.prototype.toString.call(val) === '[object Object]';
-    }
-
-    // Utility for checking whether an object contains another object
-    function includes (haystack, needle) {
-        /* jshint maxdepth: 3*/
-        var i;
-
-        // Array#indexOf, but ie...
-        if (isArray(haystack)) {
-            for (i = haystack.length - 1; i >= 0; i = i - 1) {
-                if (haystack[i] === needle) {
-                    return true;
-                }
-            }
-        }
-
-        // String#indexOf
-        if (typeof haystack === 'string') {
-            if (haystack.indexOf(needle) !== -1) {
-                return true;
-            }
-        }
-
-        // Object#hasOwnProperty
-        if (isPlainObject(haystack)) {
-            if (haystack.hasOwnProperty(needle)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    // Utility for checking whether a value is an array
-    var isArray = Array.isArray || function (val) {
-        return (Object.prototype.toString.call(val) === '[object Array]');
-    };
-
-    // Utility for getting object keys
-    function getObjectKeys (obj) {
-        var key, keys = [];
-        for (key in obj) {
-            if (obj.hasOwnProperty(key)) {
-                keys.push(key);
-            }
-        }
-        return keys;
-    }
-
-    // Utility for deep equality testing of objects
-    // Note: this function does an awful lot, look into sorting this
-    function objectsEqual (obj1, obj2) {
-        /* jshint eqeqeq: false */
-
-        // Check for undefined or null
-        if (isUndefinedOrNull(obj1) || isUndefinedOrNull(obj2)) {
-            return false;
-        }
-
-        // Object prototypes must be the same
-        if (obj1.prototype !== obj2.prototype) {
-            return false;
-        }
-
-        // Handle argument objects
-        if (isArgumentsObject(obj1)) {
-            if (!isArgumentsObject(obj2)) {
-                return false;
-            }
-            obj1 = Array.prototype.slice.call(obj1);
-            obj2 = Array.prototype.slice.call(obj2);
-        }
-
-        // Check number of own properties
-        var obj1Keys = getObjectKeys(obj1);
-        var obj2Keys = getObjectKeys(obj2);
-        if (obj1Keys.length !== obj2Keys.length) {
-            return false;
-        }
-
-        obj1Keys.sort();
-        obj2Keys.sort();
-
-        // Cheap initial key test (see https://github.com/joyent/node/blob/master/lib/assert.js)
-        var key, i, len = obj1Keys.length;
-        for (i = 0; i < len; i += 1) {
-            if (obj1Keys[i] != obj2Keys[i]) {
-                return false;
-            }
-        }
-
-        // Expensive deep test
-        for (i = 0; i < len; i += 1) {
-            key = obj1Keys[i];
-            if (!isDeepEqual(obj1[key], obj2[key])) {
-                return false;
-            }
-        }
-
-        // If it got this far...
-        return true;
-    }
-
-    // Utility for deep equality testing
-    function isDeepEqual (actual, expected) {
-        /* jshint eqeqeq: false */
-        if (actual === expected) {
-            return true;
-        }
-        if (expected instanceof Date && actual instanceof Date) {
-            return actual.getTime() === expected.getTime();
-        }
-        if (typeof actual !== 'object' && typeof expected !== 'object') {
-            return actual == expected;
-        }
-        return objectsEqual(actual, expected);
-    }
-
-    // Utility for testing whether a function throws an error
-    function functionThrows (fn, expected) {
-
-        // Try/catch
-        var thrown = false;
-        var thrownError;
-        try {
-            fn();
-        } catch (err) {
-            thrown = true;
-            thrownError = err;
-        }
-
-        // Check error
-        if (thrown && expected) {
-            thrown = errorMatches(thrownError, expected);
-        }
-
-        return thrown;
-    }
-
-    // Utility for checking whether an error matches a given constructor, regexp or string
-    function errorMatches (actual, expected) {
-        if (typeof expected === 'string') {
-            return actual.message === expected;
-        }
-        if (Object.prototype.toString.call(expected) === '[object RegExp]') {
-            return expected.test(actual.message);
-        }
-        if (actual instanceof expected) {
-            return true;
-        }
-        return false;
-    }
-
-
-    // Error handling
-    // --------------
-
-    // Assertion error class
-    function AssertionError (opts) {
-        opts = opts || {};
-        this.name = 'AssertionError';
-        this.actual = opts.actual;
-        this.expected = opts.expected;
-        this.operator = opts.operator || '';
-        this.message = opts.message;
-
-        if (Error.captureStackTrace) {
-            Error.captureStackTrace(this, opts.stackStartFunction || fail);
-        }
-    }
-    AssertionError.prototype = (Object.create ? Object.create(Error.prototype) : new Error());
-    AssertionError.prototype.name = 'AssertionError';
-    AssertionError.prototype.constructor = AssertionError;
-
-    // Assertion error to string
-    AssertionError.prototype.toString = function () {
-        if (this.message) {
-            return this.name + ': ' +this.message;
-        } else {
-            return this.name + ': ' +
-                this.actual + ' ' +
-                this.operator + ' ' +
-                this.expected;
-        }
-    };
-
-    // Fail a test
-    function fail (actual, expected, message, operator, stackStartFunction) {
-        throw new AssertionError({
-            message: message,
-            actual: actual,
-            expected: expected,
-            operator: operator,
-            stackStartFunction: stackStartFunction
-        });
-    }
-
-    // Expose error handling tools
-    proclaim.AssertionError = AssertionError;
-    proclaim.fail = fail;
-
-
-    // Assertions as outlined in
-    // http://wiki.commonjs.org/wiki/Unit_Testing/1.0#Assert
-    // -----------------------------------------------------
-
-    // Assert that a value is truthy
-    proclaim.ok = function (val, msg) {
-        if (!!!val) {
-            fail(val, true, msg, '==');
-        }
-    };
-
-    // Assert that two values are equal
-    proclaim.equal = function (actual, expected, msg) {
-        /* jshint eqeqeq: false */
-        if (actual != expected) {
-            fail(actual, expected, msg, '==');
-        }
-    };
-
-    // Assert that two values are not equal
-    proclaim.notEqual = function (actual, expected, msg) {
-        /* jshint eqeqeq: false */
-        if (actual == expected) {
-            fail(actual, expected, msg, '!=');
-        }
-    };
-
-    // Assert that two values are equal with strict comparison
-    proclaim.strictEqual = function (actual, expected, msg) {
-        if (actual !== expected) {
-            fail(actual, expected, msg, '===');
-        }
-    };
-
-    // Assert that two values are not equal with strict comparison
-    proclaim.notStrictEqual = function (actual, expected, msg) {
-        if (actual === expected) {
-            fail(actual, expected, msg, '!==');
-        }
-    };
-
-    // Assert that two values are deeply equal
-    proclaim.deepEqual = function (actual, expected, msg) {
-        if (!isDeepEqual(actual, expected)) {
-            fail(actual, expected, msg, 'deepEqual');
-        }
-    };
-
-    // Assert that two values are not deeply equal
-    proclaim.notDeepEqual = function (actual, expected, msg) {
-        if (isDeepEqual(actual, expected)) {
-            fail(actual, expected, msg, '!deepEqual');
-        }
-    };
-
-    // Assert that a function throws an error
-    proclaim.throws = function (fn, expected, msg) {
-        if (!functionThrows(fn, expected)) {
-            fail(fn, expected, msg, 'throws');
-        }
-    };
-
-
-    // Additional assertions
-    // ---------------------
-
-    // Assert that a function does not throw an error
-    proclaim.doesNotThrow = function (fn, expected, msg) {
-        if (functionThrows(fn, expected)) {
-            fail(fn, expected, msg, '!throws');
-        }
-    };
-
-    // Assert that a value is a specific type
-    proclaim.isTypeOf = function (val, type, msg) {
-        proclaim.strictEqual(typeof val, type, msg);
-    };
-
-    // Assert that a value is not a specific type
-    proclaim.isNotTypeOf = function (val, type, msg) {
-        proclaim.notStrictEqual(typeof val, type, msg);
-    };
-
-    // Assert that a value is an instance of a constructor
-    proclaim.isInstanceOf = function (val, constructor, msg) {
-        if (!(val instanceof constructor)) {
-            fail(val, constructor, msg, 'instanceof');
-        }
-    };
-
-    // Assert that a value not an instance of a constructor
-    proclaim.isNotInstanceOf = function (val, constructor, msg) {
-        if (val instanceof constructor) {
-            fail(val, constructor, msg, '!instanceof');
-        }
-    };
-
-    // Assert that a value is an array
-    proclaim.isArray = function (val, msg) {
-        if (!isArray(val)) {
-            fail(typeof val, 'array', msg, '===');
-        }
-    };
-
-    // Assert that a value is not an array
-    proclaim.isNotArray = function (val, msg) {
-        if (isArray(val)) {
-            fail(typeof val, 'array', msg, '!==');
-        }
-    };
-
-    // Assert that a value is a boolean
-    proclaim.isBoolean = function (val, msg) {
-        proclaim.isTypeOf(val, 'boolean', msg);
-    };
-
-    // Assert that a value is not a boolean
-    proclaim.isNotBoolean = function (val, msg) {
-        proclaim.isNotTypeOf(val, 'boolean', msg);
-    };
-
-    // Assert that a value is true
-    proclaim.isTrue = function (val, msg) {
-        proclaim.strictEqual(val, true, msg);
-    };
-
-    // Assert that a value is false
-    proclaim.isFalse = function (val, msg) {
-        proclaim.strictEqual(val, false, msg);
-    };
-
-    // Assert that a value is a function
-    proclaim.isFunction = function (val, msg) {
-        proclaim.isTypeOf(val, 'function', msg);
-    };
-
-    // Assert that a value is not a function
-    proclaim.isNotFunction = function (val, msg) {
-        proclaim.isNotTypeOf(val, 'function', msg);
-    };
-
-    // Assert that a value is null
-    proclaim.isNull = function (val, msg) {
-        proclaim.strictEqual(val, null, msg);
-    };
-
-    // Assert that a value is not null
-    proclaim.isNotNull = function (val, msg) {
-        proclaim.notStrictEqual(val, null, msg);
-    };
-
-    // Assert that a value is a number
-    proclaim.isNumber = function (val, msg) {
-        proclaim.isTypeOf(val, 'number', msg);
-    };
-
-    // Assert that a value is not a number
-    proclaim.isNotNumber = function (val, msg) {
-        proclaim.isNotTypeOf(val, 'number', msg);
-    };
-
-    // Assert that a value is an object
-    proclaim.isObject = function (val, msg) {
-        proclaim.isTypeOf(val, 'object', msg);
-    };
-
-    // Assert that a value is not an object
-    proclaim.isNotObject = function (val, msg) {
-        proclaim.isNotTypeOf(val, 'object', msg);
-    };
-
-    // Assert that a value is a string
-    proclaim.isString = function (val, msg) {
-        proclaim.isTypeOf(val, 'string', msg);
-    };
-
-    // Assert that a value is not a string
-    proclaim.isNotString = function (val, msg) {
-        proclaim.isNotTypeOf(val, 'string', msg);
-    };
-
-    // Assert that a value is undefined
-    proclaim.isUndefined = function (val, msg) {
-        proclaim.isTypeOf(val, 'undefined', msg);
-    };
-
-    // Assert that a value is defined
-    proclaim.isDefined = function (val, msg) {
-        proclaim.isNotTypeOf(val, 'undefined', msg);
-    };
-
-    // Assert that a value matches a regular expression
-    proclaim.match = function (actual, expected, msg) {
-        if (!expected.test(actual)) {
-            fail(actual, expected, msg, 'match');
-        }
-    };
-
-    // Assert that a value does not match a regular expression
-    proclaim.notMatch = function (actual, expected, msg) {
-        if (expected.test(actual)) {
-            fail(actual, expected, msg, '!match');
-        }
-    };
-
-    // Assert that an object includes something
-    proclaim.includes = function (haystack, needle, msg) {
-        if (!includes(haystack, needle)) {
-            fail(haystack, needle, msg, 'include');
-        }
-    };
-
-    // Assert that an object does not include something
-    proclaim.doesNotInclude = function (haystack, needle, msg) {
-        if (includes(haystack, needle)) {
-            fail(haystack, needle, msg, '!include');
-        }
-    };
-
-    // Assert that an object (Array, String, etc.) has an expected length
-    proclaim.length = function (obj, expected, msg) {
-        if (isUndefinedOrNull(obj)) {
-            return fail(void 0, expected, msg, 'length');
-        }
-        if (obj.length !== expected) {
-            fail(obj.length, expected, msg, 'length');
-        }
-    };
-
-
-    // Exports
-    // -------
-
-    // AMD
-    if (typeof define !== 'undefined' && define.amd) {
-        define([], function () {
-            return proclaim;
-        });
-    }
-    // CommonJS
-    else if (typeof module !== 'undefined' && module.exports) {
-        module.exports = proclaim;
-    }
-    // Script tag
-    else {
-        root.proclaim = proclaim;
-    }
-
-
-} (this, {}));
diff --git a/test/index-amd.html b/test/index-amd.html
deleted file mode 100644
index 8356dfd..0000000
--- a/test/index-amd.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>tv4</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <link rel="stylesheet" href="./deps/mocha.css"/>
-    <script src="./deps/jquery.js"></script>
-    <script src="./deps/mocha.js"></script>
-    <script src="./deps/proclaim.js"></script>
-    <script src="../node_modules/requirejs/require.js"></script>
-    <script>
-        mocha.setup('bdd');
-        window.onload = function () {
-            if (navigator.userAgent.indexOf('PhantomJS') < 0) {
-                mocha.run();
-            }
-        };
-
-        describe("tv4 amd loading", function () {
-            it("should load tv4 using require", function (done) {
-                require(['../tv4'], function (tv4) {
-                    proclaim.isDefined(tv4);
-                    var schema = {
-                        properties: {
-                            intKey: {"type": "integer"},
-                            stringKey: {"type": "string"}
-                        }
-                    };
-                    proclaim.isTrue(tv4.validate({intKey: 1, stringKey: "one"}, schema));
-                    proclaim.isFalse(tv4.validate({intKey: false, stringKey: "one"}, schema));
-                    done();
-                });
-            });
-            it("should load german language as AMD module", function (done) {
-                require(['../lang/de'], function (tv4) {
-                    proclaim.isDefined(tv4);
-
-                    tv4.language('de');
-
-                    var schema = {
-                        properties: {
-                            intKey: {"type": "integer"}
-                        }
-                    };
-                    var res = tv4.validateResult({intKey: 'bad'}, schema);
-                    proclaim.isFalse(res.valid);
-                    proclaim.equal(res.error.message, 'Ungültiger Typ: string (erwartet wurde: integer)');
-                    done();
-                });
-            });
-        });
-    </script>
-</head>
-<body>
-<div id="mocha"></div>
-</body>
-</html>
diff --git a/test/index-component.html b/test/index-component.html
deleted file mode 100644
index 00b02bf..0000000
--- a/test/index-component.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>tv4-component</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <link rel="stylesheet" href="./deps/mocha.css"/>
-    <script src="./deps/jquery.js"></script>
-    <script src="./deps/mocha.js"></script>
-    <script src="./deps/proclaim.js"></script>
-    <script src="../build/build.js"></script>
-    <script>
-        var tv4 = require('tv4');
-
-        //save globals so tests can be shared between node an browsers
-        window.refs = {tv4:tv4, assert:proclaim};
-        mocha.setup('bdd');
-        window.onload = function () {
-            if (navigator.userAgent.indexOf('PhantomJS') < 0) {
-                mocha.run();
-            }
-        };
-    </script>
-    <script src="./all_concat.js"></script>
-</head>
-<body>
-<p style="font-family:sans-serif;padding:10px;"><strong>Note:</strong> this test requires grunt to build the required files.</p>
-<div id="mocha">
-
-</div>
-</body>
-</html>
diff --git a/test/index-globals.html b/test/index-globals.html
deleted file mode 100644
index 29c3120..0000000
--- a/test/index-globals.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>tv4</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <link rel="stylesheet" href="./deps/mocha.css"/>
-    <script src="./deps/jquery.js"></script>
-    <script src="./deps/mocha.js"></script>
-    <script src="./deps/proclaim.js"></script>
-    <script src="../tv4.js"></script>
-    <script src="../lang/de.js"></script>
-    <script>
-        mocha.setup('bdd');
-        window.onload = function () {
-            if (navigator.userAgent.indexOf('PhantomJS') < 0) {
-                mocha.run();
-            }
-        };
-
-        describe("tv4 globals", function () {
-            it("should have global tv4", function () {
-                proclaim.isDefined(tv4);
-                var schema = {
-                    properties: {
-                        intKey: {"type": "integer"},
-                        stringKey: {"type": "string"}
-                    }
-                };
-                proclaim.isTrue(tv4.validate({intKey: 1, stringKey: "one"}, schema));
-                proclaim.isFalse(tv4.validate({intKey: false, stringKey: "one"}, schema));
-            });
-            it("should have german language added to global", function () {
-                proclaim.isDefined(tv4);
-
-                tv4 = tv4.freshApi();
-
-                tv4.language('de');
-
-                var schema = {
-                    properties: {
-                        intKey: {"type": "integer"}
-                    }
-                };
-                var res = tv4.validateResult({intKey: 'bad'}, schema);
-                proclaim.isFalse(res.valid);
-                proclaim.equal(res.error.message, 'Ungültiger Typ: string (erwartet wurde: integer)');
-            });
-        });
-    </script>
-</head>
-<body>
-<div id="mocha"></div>
-</body>
-</html>
diff --git a/test/index-min.html b/test/index-min.html
deleted file mode 100644
index 0ba6b3f..0000000
--- a/test/index-min.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>tv4-min</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <link rel="stylesheet" href="./deps/mocha.css"/>
-    <script src="./deps/jquery.js"></script>
-    <script src="./deps/mocha.js"></script>
-    <script src="./deps/proclaim.js"></script>
-    <script src="../tv4.min.js"></script>
-    <script>
-        //save globals so tests can be shared between node an browsers
-        window.refs = {tv4:tv4, assert:proclaim};
-        mocha.setup('bdd');
-        window.onload = function () {
-            if (navigator.userAgent.indexOf('PhantomJS') < 0) {
-                mocha.run();
-            }
-        };
-    </script>
-    <script src="./all_concat.js"></script>
-</head>
-<body>
-<div id="mocha"></div>
-</body>
-</html>
diff --git a/test/index.html b/test/index.html
deleted file mode 100644
index a181378..0000000
--- a/test/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>tv4</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <link rel="stylesheet" href="./deps/mocha.css"/>
-    <script src="./deps/jquery.js"></script>
-    <script src="./deps/mocha.js"></script>
-    <script src="./deps/proclaim.js"></script>
-    <script src="../tv4.js"></script>
-    <script>
-        //save globals so tests can be shared between node an browsers
-        window.refs = {tv4:tv4, assert:proclaim};
-        mocha.setup('bdd');
-        window.onload = function () {
-            if (navigator.userAgent.indexOf('PhantomJS') < 0) {
-                mocha.run();
-            }
-        };
-    </script>
-    <script src="./all_concat.js"></script>
-</head>
-<body>
-<div id="mocha"></div>
-</body>
-</html>
diff --git a/test/mocha.opts b/test/mocha.opts
deleted file mode 100644
index e7d37c6..0000000
--- a/test/mocha.opts
+++ /dev/null
@@ -1,2 +0,0 @@
---reporter Spec
-test/all_concat
\ No newline at end of file
diff --git a/test/tests/00 - Core/01 - utils.js b/test/tests/00 - Core/01 - utils.js
deleted file mode 100644
index aa9d890..0000000
--- a/test/tests/00 - Core/01 - utils.js	
+++ /dev/null
@@ -1,25 +0,0 @@
-describe("Core 01", function () {
-
-	it("getDocumentUri returns only location part of url", function () {
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com"), "http://example.com");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main"), "http://example.com/main");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/"), "http://example.com/main/");
-		//assert.strictEqual(tv4.getDocumentUri("http://example.com/main//"), "http://example.com/main/");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/sub"), "http://example.com/main/sub");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/sub/"), "http://example.com/main/sub/");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main#"), "http://example.com/main");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/sub/#"), "http://example.com/main/sub/");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main?"), "http://example.com/main?");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main?q=1"), "http://example.com/main?q=1");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main?q=1#abc"), "http://example.com/main?q=1");
-
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/#"), "http://example.com/main/");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/#?"), "http://example.com/main/");
-		assert.strictEqual(tv4.getDocumentUri("http://example.com/main/#?q=a/b/c"), "http://example.com/main/");
-	});
-});
diff --git a/test/tests/00 - Core/02 - duplicateApi.js b/test/tests/00 - Core/02 - duplicateApi.js
deleted file mode 100644
index 5419234..0000000
--- a/test/tests/00 - Core/02 - duplicateApi.js	
+++ /dev/null
@@ -1,24 +0,0 @@
-describe("Core 02", function () {
-
-	it("tv4.freshApi() produces working copy", function () {
-		var duplicate = tv4.freshApi();
-		assert.isObject(duplicate);
-		// Basic sanity checks
-		assert.isTrue(duplicate.validate({}, {type: "object"}));
-		assert.isObject(duplicate.validateMultiple("string", {}));
-	});
-
-	it("tv4.freshApi() has separate schema store", function () {
-		var duplicate = tv4.freshApi();
-		
-		var schemaUrl1 = "http://example.com/schema/schema1";
-		var schemaUrl2 = "http://example.com/schema/schema2";
-		duplicate.addSchema(schemaUrl1, {});
-		tv4.addSchema(schemaUrl2, {});
-		
-		assert.isObject(duplicate.getSchema(schemaUrl1));
-		assert.isUndefined(tv4.getSchema(schemaUrl1));
-		assert.isUndefined(duplicate.getSchema(schemaUrl2));
-		assert.isObject(tv4.getSchema(schemaUrl2));
-	});
-});
diff --git a/test/tests/00 - Core/03 - resetAndDrop.js b/test/tests/00 - Core/03 - resetAndDrop.js
deleted file mode 100644
index ef57424..0000000
--- a/test/tests/00 - Core/03 - resetAndDrop.js	
+++ /dev/null
@@ -1,36 +0,0 @@
-describe("Core 03", function () {
-
-	it("tv4.dropSchemas() drops stored schemas", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema/items#"},
-			"maxItems": 2
-		};
-		tv4.addSchema("http://example.com/schema", schema);
-		assert.strictEqual(tv4.getSchema("http://example.com/schema"), schema, "has schema");
-
-		tv4.dropSchemas();
-		assert.isUndefined(tv4.getSchema("http://example.com/schema"), "doesn't have schema");
-	});
-
-	it("tv4.reset() clears errors, valid and missing", function () {
-		it("must be string, is integer", function () {
-			var data = 5;
-			var schema = {"type": "array", "items" : {"$ref" : "http://example.com"}};
-
-			assert.notOk(tv4.error, "starts with no error");
-			assert.isTrue(tv4.valid, "starts valid");
-			assert.length(tv4.missing, 0, "starts with 0 missing");
-
-			var valid = tv4.validate(data, schema);
-			assert.isFalse(valid);
-			assert.ok(tv4.error, "has error");
-			assert.isFalse(tv4.valid, "is invalid");
-			assert.length(tv4.missing, 1, "missing 1");
-
-			tv4.reset();
-			assert.notOk(tv4.error, "reset to no error");
-			assert.isTrue(tv4.valid, "reset to valid");
-			assert.length(tv4.missing, 0, "reset to 0 missing");
-		});
-	});
-});
diff --git a/test/tests/00 - Core/04 - error.js b/test/tests/00 - Core/04 - error.js
deleted file mode 100644
index d0c8c88..0000000
--- a/test/tests/00 - Core/04 - error.js	
+++ /dev/null
@@ -1,32 +0,0 @@
-describe("Core 04", function () {
-
-	var schema = {
-		"type": "string"
-	};
-
-	it("ValidationError is Error subtype", function () {
-		var res = tv4.validateResult(123, schema);
-		assert.isObject(res);
-		assert.isObject(res.error);
-		assert.isInstanceOf(res.error, Error);
-		assert.isString(res.error.stack);
-	});
-
-	it("ValidationError has own stack trace", function () {
-		function errorA() {
-			var res = tv4.validateResult(123, schema);
-			assert.isFalse(res.valid);
-			assert.isString(res.error.stack);
-			assert.ok(res.error.stack.indexOf('errorA') > -1, 'has own stack trace A');
-		}
-
-		function errorB() {
-			var res = tv4.validateResult(123, schema);
-			assert.isFalse(res.valid);
-			assert.isString(res.error.stack);
-			assert.ok(res.error.stack.indexOf('errorB') > -1, 'has own stack trace B');
-		}
-		errorA();
-		errorB();
-	});
-});
diff --git a/test/tests/01 - Any types/01 - type.js b/test/tests/01 - Any types/01 - type.js
deleted file mode 100644
index 4a231ff..0000000
--- a/test/tests/01 - Any types/01 - type.js	
+++ /dev/null
@@ -1,65 +0,0 @@
-describe("Any types 01", function () {
-
-	it("no type specified", function () {
-		var data = {};
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("must be object, is object", function () {
-		var data = {};
-		var schema = {"type": "object"};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("must be object or string, is object", function () {
-		var data = {};
-		var schema = {"type": ["object", "string"]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("must be object or string, is array", function () {
-		var data = [];
-		var schema = {"type": ["object", "string"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be array, is object", function () {
-		var data = {};
-		var schema = {"type": ["array"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be string, is integer", function () {
-		var data = 5;
-		var schema = {"type": ["string"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be object, is null", function () {
-		var data = null;
-		var schema = {"type": ["object"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("must be null, is null", function () {
-		var data = null;
-		var schema = {"type": "null"};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("doesn't crash on invalid type", function () {
-		var data = null;
-		var schema = {"type": {"foo": "bar"}};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/01 - Any types/02 - enum.js b/test/tests/01 - Any types/02 - enum.js
deleted file mode 100644
index d3c1fcf..0000000
--- a/test/tests/01 - Any types/02 - enum.js	
+++ /dev/null
@@ -1,76 +0,0 @@
-describe("Any types 01", function () {
-
-	it("enum [1], was 1", function () {
-		var data = 1;
-		var schema = {"enum": [1]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("enum [1], was \"1\"", function () {
-		var data = "1";
-		var schema = {"enum": [1]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("enum [{}], was {}", function () {
-		var data = {};
-		var schema = {"enum": [
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("enum [{\"key\":\"value\"], was {}", function () {
-		var data = {};
-		var schema = {"enum": [
-			{"key": "value"}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("enum [{\"key\":\"value\"], was {\"key\": \"value\"}", function () {
-		var data = {};
-		var schema = {"enum": [
-			{"key": "value"}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("Enum with array value - success", function () {
-		var data = [1, true, 0];
-		var schema = {"enum": [
-			[1, true, 0],
-			5,
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("Enum with array value - failure 1", function () {
-		var data = [1, true, 0, 5];
-		var schema = {"enum": [
-			[1, true, 0],
-			5,
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("Enum with array value - failure 2", function () {
-		var data = [1, true, 5];
-		var schema = {"enum": [
-			[1, true, 0],
-			5,
-			{}
-		]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/02 - Numeric/01 - multipleOf.js b/test/tests/02 - Numeric/01 - multipleOf.js
deleted file mode 100644
index a54b4c4..0000000
--- a/test/tests/02 - Numeric/01 - multipleOf.js	
+++ /dev/null
@@ -1,30 +0,0 @@
-describe("Numeric - multipleOf", function () {
-
-	it("pass", function () {
-		var data = 5;
-		var schema = {"multipleOf": 2.5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("fail", function () {
-		var data = 5;
-		var schema = {"multipleOf": 0.75};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("floating-point pass 6.6/2.2", function () {
-		var data = 6.6;
-		var schema = {"multipleOf": 2.2};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("floating-point pass 6.6666/2.2222", function () {
-		var data = 6.6666;
-		var schema = {"multipleOf": 2.2222};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-});
\ No newline at end of file
diff --git a/test/tests/02 - Numeric/02 - min-max.js b/test/tests/02 - Numeric/02 - min-max.js
deleted file mode 100644
index d4c87b5..0000000
--- a/test/tests/02 - Numeric/02 - min-max.js	
+++ /dev/null
@@ -1,58 +0,0 @@
-describe("Numberic 02", function () {
-
-	it("minimum success", function () {
-		var data = 5;
-		var schema = {minimum: 2.5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum failure", function () {
-		var data = 5;
-		var schema = {minimum: 7};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("minimum equality success", function () {
-		var data = 5;
-		var schema = {minimum: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum equality failure", function () {
-		var data = 5;
-		var schema = {minimum: 5, exclusiveMinimum: true};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum success", function () {
-		var data = 5;
-		var schema = {maximum: 7};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum failure", function () {
-		var data = -5;
-		var schema = {maximum: -10};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum equality success", function () {
-		var data = 5;
-		var schema = {maximum: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum equality failure", function () {
-		var data = 5;
-		var schema = {maximum: 5, exclusiveMaximum: true};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/02 - Numeric/03 - NaN.js b/test/tests/02 - Numeric/03 - NaN.js
deleted file mode 100644
index 147bf2f..0000000
--- a/test/tests/02 - Numeric/03 - NaN.js	
+++ /dev/null
@@ -1,53 +0,0 @@
-describe("Numeric 03", function () {
-
-	it("NaN failure", function() {
-		var data = NaN;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("Infinity failure", function() {
-		var data = Infinity;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("-Infinity failure", function() {
-		var data = -Infinity;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("string to number failure", function() {
-		var data = Number('foo');
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-	it("string to number success", function() {
-		var data = Number('123');
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-	
-	it("max value success", function() {
-		var data = Number.MAX_VALUE;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-	
-	/* Travis reports: Bad number '1.798e+308' (which is a good thing, as it should be Infinity)
-	it("big number failure", function() {
-		var data = 1.798e+308;
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	*/
-});
diff --git a/test/tests/03 - Strings/01 - min-max length.js b/test/tests/03 - Strings/01 - min-max length.js
deleted file mode 100644
index a9a3b2b..0000000
--- a/test/tests/03 - Strings/01 - min-max length.js	
+++ /dev/null
@@ -1,46 +0,0 @@
-describe("Strings 01", function () {
-
-	it("no length constraints", function () {
-		var data = "test";
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length success", function () {
-		var data = "test";
-		var schema = {minLength: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length failure", function () {
-		var data = "test";
-		var schema = {minLength: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum length success", function () {
-		var data = "test1234";
-		var schema = {maxLength: 10};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum length failure", function () {
-		var data = "test1234";
-		var schema = {maxLength: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("check error message", function () {
-		var data = "test1234";
-		var schema = {maxLength: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-		//return typeof tv4.error.message !== "undefined";
-		assert.ok(tv4.error.message);
-	});
-});
diff --git a/test/tests/03 - Strings/02 - pattern.js b/test/tests/03 - Strings/02 - pattern.js
deleted file mode 100644
index 307a586..0000000
--- a/test/tests/03 - Strings/02 - pattern.js	
+++ /dev/null
@@ -1,30 +0,0 @@
-describe("Strings 02", function () {
-
-	it("pattern success", function () {
-		var data = "9test";
-		var schema = {"pattern": "^[0-9][a-zA-Z]*$"};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("pattern failure", function () {
-		var data = "9test9";
-		var schema = {"pattern": "^[0-9][a-zA-Z]*$"};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-	
-  it("accepts RegExp object", function () {
-    var data = "9test";
-    var schema = {"pattern": /^[0-9][a-zA-Z]*$/};
-    var valid = tv4.validate(data, schema);
-    assert.isTrue(valid);
-  });
-
-  it("accepts RegExp literal", function () {
-    var data = "9TEST";
-    var schema = {"pattern": "/^[0-9][a-z]*$/i"};
-    var valid = tv4.validate(data, schema);
-    assert.isTrue(valid);
-  });
-});
\ No newline at end of file
diff --git a/test/tests/04 - Arrays/01 - min-max length.js b/test/tests/04 - Arrays/01 - min-max length.js
deleted file mode 100644
index 7687597..0000000
--- a/test/tests/04 - Arrays/01 - min-max length.js	
+++ /dev/null
@@ -1,37 +0,0 @@
-describe("Arrays 01", function () {
-
-	it("no length constraints", function () {
-		var data = [1, 2, 3];
-		var schema = {};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length success", function () {
-		var data = [1, 2, 3];
-		var schema = {minItems: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length failure", function () {
-		var data = [1, 2, 3];
-		var schema = {minItems: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum length success", function () {
-		var data = [1, 2, 3, 4, 5];
-		var schema = {maxItems: 10};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum length failure", function () {
-		var data = [1, 2, 3, 4, 5];
-		var schema = {maxItems: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/04 - Arrays/02 - uniqueItems.js b/test/tests/04 - Arrays/02 - uniqueItems.js
deleted file mode 100644
index 35ec51b..0000000
--- a/test/tests/04 - Arrays/02 - uniqueItems.js	
+++ /dev/null
@@ -1,16 +0,0 @@
-describe("Arrays 02", function () {
-
-	it("uniqueItems success", function () {
-		var data = [1, true, "1"];
-		var schema = {uniqueItems: true};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("uniqueItems failure", function () {
-		var data = [1, true, "1", 1];
-		var schema = {uniqueItems: true};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/04 - Arrays/03 - items (plain).js b/test/tests/04 - Arrays/03 - items (plain).js
deleted file mode 100644
index addf863..0000000
--- a/test/tests/04 - Arrays/03 - items (plain).js	
+++ /dev/null
@@ -1,24 +0,0 @@
-describe("Arrays 03", function () {
-
-	it("plain items success", function () {
-		var data = [1, 2, 3, 4];
-		var schema = {
-			"items": {
-				"type": "integer"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("plain items failure", function () {
-		var data = [1, 2, true, 3];
-		var schema = {
-			"items": {
-				"type": "integer"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/04 - Arrays/04 - items (tuple-typing).js b/test/tests/04 - Arrays/04 - items (tuple-typing).js
deleted file mode 100644
index 4ae4cfd..0000000
--- a/test/tests/04 - Arrays/04 - items (tuple-typing).js	
+++ /dev/null
@@ -1,26 +0,0 @@
-describe("Arrays 04", function () {
-
-	it("plain items success", function () {
-		var data = [1, true, "one"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("plain items failure", function () {
-		var data = [1, null, "one"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/04 - Arrays/05 - additionalItems.js b/test/tests/04 - Arrays/05 - additionalItems.js
deleted file mode 100644
index ec137ce..0000000
--- a/test/tests/04 - Arrays/05 - additionalItems.js	
+++ /dev/null
@@ -1,54 +0,0 @@
-describe("Arrays 05", function () {
-
-	it("additional items schema success", function () {
-		var data = [1, true, "one", "uno"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("additional items schema failure", function () {
-		var data = [1, true, "one", 1];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("additional items boolean success", function () {
-		var data = [1, true, "one", "uno"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": true
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("additional items boolean failure", function () {
-		var data = [1, true, "one", "uno"];
-		var schema = {
-			"items": [
-				{"type": "integer"},
-				{"type": "boolean"}
-			],
-			"additionalItems": false
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/05 - Objects/01 - min-max properties.js b/test/tests/05 - Objects/01 - min-max properties.js
deleted file mode 100644
index e2ee43b..0000000
--- a/test/tests/05 - Objects/01 - min-max properties.js	
+++ /dev/null
@@ -1,30 +0,0 @@
-describe("Objects 01", function () {
-
-	it("minimum length success", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {minProperties: 3};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("minimum length failure", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {minProperties: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("maximum length success", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {maxProperties: 5};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("maximum length failure", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {maxProperties: 2};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/05 - Objects/02 - required.js b/test/tests/05 - Objects/02 - required.js
deleted file mode 100644
index 99ff780..0000000
--- a/test/tests/05 - Objects/02 - required.js	
+++ /dev/null
@@ -1,16 +0,0 @@
-describe("Objects 02", function () {
-
-	it("required success", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {required: ["key1", "key2"]};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("required failure", function () {
-		var data = {key1: 1, key2: 2, key3: 3};
-		var schema = {required: ["key1", "notDefined"]};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/05 - Objects/03 - properties.js b/test/tests/05 - Objects/03 - properties.js
deleted file mode 100644
index 753c865..0000000
--- a/test/tests/05 - Objects/03 - properties.js	
+++ /dev/null
@@ -1,26 +0,0 @@
-describe("Objects 03", function () {
-
-	it("properties success", function () {
-		var data = {intKey: 1, stringKey: "one"};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"},
-				stringKey: {"type": "string"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("properties failure", function () {
-		var data = {intKey: 1, stringKey: false};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"},
-				stringKey: {"type": "string"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/05 - Objects/04 - patternProperties.js b/test/tests/05 - Objects/04 - patternProperties.js
deleted file mode 100644
index 3299569..0000000
--- a/test/tests/05 - Objects/04 - patternProperties.js	
+++ /dev/null
@@ -1,44 +0,0 @@
-describe("Objects 04", function () {
-
-	it("patternProperties success", function () {
-		var data = {intKey: 1, intKey2: 5};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"}
-			},
-			patternProperties: {
-				"^int": {minimum: 0}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("patternProperties failure 1", function () {
-		var data = {intKey: 1, intKey2: 5};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("patternProperties failure 2", function () {
-		var data = {intKey: 10, intKey2: "string value"};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/05 - Objects/05 - additionalProperties.js b/test/tests/05 - Objects/05 - additionalProperties.js
deleted file mode 100644
index 6fea2ef..0000000
--- a/test/tests/05 - Objects/05 - additionalProperties.js	
+++ /dev/null
@@ -1,62 +0,0 @@
-describe("Objects 05", function () {
-
-	it("additionalProperties schema success", function () {
-		var data = {intKey: 1, intKey2: 5, stringKey: "string"};
-		var schema = {
-			properties: {
-				intKey: {"type": "integer"}
-			},
-			patternProperties: {
-				"^int": {minimum: 0}
-			},
-			additionalProperties: {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("patternProperties schema failure", function () {
-		var data = {intKey: 10, intKey2: 5, stringKey: null};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			},
-			additionalProperties: {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("patternProperties boolean success", function () {
-		var data = {intKey: 10, intKey2: 5, stringKey: null};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			},
-			additionalProperties: true
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("patternProperties boolean failure", function () {
-		var data = {intKey: 10, intKey2: 5, stringKey: null};
-		var schema = {
-			properties: {
-				intKey: {minimum: 5}
-			},
-			patternProperties: {
-				"^int": {"type": "integer"}
-			},
-			additionalProperties: false
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
\ No newline at end of file
diff --git a/test/tests/05 - Objects/06 - dependencies.js b/test/tests/05 - Objects/06 - dependencies.js
deleted file mode 100644
index 5659fd1..0000000
--- a/test/tests/05 - Objects/06 - dependencies.js	
+++ /dev/null
@@ -1,76 +0,0 @@
-describe("Objects 06", function () {
-
-	it("string dependency success", function () {
-		var data = {key1: 5, key2: "string"};
-		var schema = {
-			dependencies: {
-				key1: "key2"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("string dependency failure", function () {
-		var data = {key1: 5};
-		var schema = {
-			dependencies: {
-				key1: "key2"
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("array dependency success", function () {
-		var data = {key1: 5, key2: "string"};
-		var schema = {
-			dependencies: {
-				key1: ["key2"]
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("array dependency failure", function () {
-		var data = {key1: 5};
-		var schema = {
-			dependencies: {
-				key1: ["key2"]
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("schema dependency success", function () {
-		var data = {key1: 5, key2: "string"};
-		var schema = {
-			dependencies: {
-				key1: {
-					properties: {
-						key2: {"type": "string"}
-					}
-				}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("schema dependency failure", function () {
-		var data = {key1: 5, key2: 5};
-		var schema = {
-			dependencies: {
-				key1: {
-					properties: {
-						key2: {"type": "string"}
-					}
-				}
-			}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/06 - Combinations/01 - allOf.js b/test/tests/06 - Combinations/01 - allOf.js
deleted file mode 100644
index bc5b755..0000000
--- a/test/tests/06 - Combinations/01 - allOf.js	
+++ /dev/null
@@ -1,26 +0,0 @@
-describe("Combinators 01", function () {
-
-	it("allOf success", function () {
-		var data = 10;
-		var schema = {
-			"allOf": [
-				{"type": "integer"},
-				{"minimum": 5}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("allOf failure", function () {
-		var data = 1;
-		var schema = {
-			"allOf": [
-				{"type": "integer"},
-				{"minimum": 5}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/06 - Combinations/02- anyOf.js b/test/tests/06 - Combinations/02- anyOf.js
deleted file mode 100644
index b2570e8..0000000
--- a/test/tests/06 - Combinations/02- anyOf.js	
+++ /dev/null
@@ -1,27 +0,0 @@
-describe("Combinators 02", function () {
-
-	it("anyOf success", function () {
-	var data = "hello";
-	var schema = {
-		"anyOf": [
-			{"type": "integer"},
-			{"type": "string"},
-			{"minLength": 1}
-		]
-	};
-	var valid = tv4.validate(data, schema);
-	assert.isTrue(valid);
-});
-
-it("anyOf failure", function () {
-	var data = true;
-	var schema = {
-		"anyOf": [
-			{"type": "integer"},
-			{"type": "string"}
-		]
-	};
-	var valid = tv4.validate(data, schema);
-	assert.isFalse(valid);
-});
-});
diff --git a/test/tests/06 - Combinations/03 - oneOf.js b/test/tests/06 - Combinations/03 - oneOf.js
deleted file mode 100644
index dbcbbce..0000000
--- a/test/tests/06 - Combinations/03 - oneOf.js	
+++ /dev/null
@@ -1,41 +0,0 @@
-describe("Combinators 03", function () {
-
-	it("oneOf success", function () {
-		var data = 5;
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "string"},
-				{"type": "string", minLength: 1}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("oneOf failure (too many)", function () {
-		var data = "string";
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "string"},
-				{"minLength": 1}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-
-	it("oneOf failure (no matches)", function () {
-		var data = false;
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "string"},
-				{"type": "string", "minLength": 1}
-			]
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/06 - Combinations/04 - not.js b/test/tests/06 - Combinations/04 - not.js
deleted file mode 100644
index 7da5069..0000000
--- a/test/tests/06 - Combinations/04 - not.js	
+++ /dev/null
@@ -1,20 +0,0 @@
-describe("Combinators 04", function () {
-
-	it("not success", function () {
-		var data = 5;
-		var schema = {
-			"not": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-	});
-
-	it("not failure", function () {
-		var data = "test";
-		var schema = {
-			"not": {"type": "string"}
-		};
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/07 - $ref/01 - normalise.js b/test/tests/07 - $ref/01 - normalise.js
deleted file mode 100644
index 6136550..0000000
--- a/test/tests/07 - $ref/01 - normalise.js	
+++ /dev/null
@@ -1,68 +0,0 @@
-describe("$ref 01", function () {
-
-	it("normalise - untouched immediate $ref", function () {
-		var schema = {
-			"items": {"$ref": "#"}
-		};
-		tv4.normSchema(schema);
-		assert.propertyVal(schema.items, '$ref', "#");
-		//return schema.items['$ref'] == "#";
-	});
-
-	it("normalise - id as base", function () {
-		var schema = {
-			"id": "baseUrl",
-			"items": {"$ref": "#"}
-		};
-		tv4.normSchema(schema);
-		assert.propertyVal(schema.items, '$ref', "baseUrl#");
-		//return schema.items['$ref'] == "baseUrl#";
-	});
-
-	it("normalise - id relative to parent", function () {
-		var schema = {
-			"id": "http://example.com/schema",
-			"items": {
-				"id": "otherSchema",
-				"items": {
-					"$ref": "#"
-				}
-			}
-		};
-		tv4.normSchema(schema);
-		assert.strictEqual(schema.items.id, "http://example.com/otherSchema", "schema.items.id");
-		assert.strictEqual(schema.items.items['$ref'], "http://example.com/otherSchema#", "$ref");
-		//this.assert(schema.items.id == "http://example.com/otherSchema", "schema.items.id");
-		//this.assert(schema.items.items['$ref'] == "http://example.com/otherSchema#", "$ref");
-	});
-
-	it("normalise - do not touch contents of \"enum\"", function () {
-		var schema = {
-			"id": "http://example.com/schema",
-			"items": {
-				"id": "otherSchema",
-				"enum": [
-					{
-						"$ref": "#"
-					}
-				]
-			}
-		};
-		tv4.normSchema(schema);
-		assert.strictEqual(schema.items['enum'][0]['$ref'], "#");
-		//this.assert(schema.items['enum'][0]['$ref'] == "#");
-	});
-
-	it("Only normalise id and $ref if they are strings", function () {
-		var schema = {
-			"properties": {
-				"id": {"type": "integer"},
-				"$ref": {"type": "integer"}
-			}
-		};
-		var data = {"id": "test", "$ref": "test"};
-		tv4.normSchema(schema);
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid);
-	});
-});
diff --git a/test/tests/07 - $ref/02 - list missing URLs.js b/test/tests/07 - $ref/02 - list missing URLs.js
deleted file mode 100644
index 505fe9a..0000000
--- a/test/tests/07 - $ref/02 - list missing URLs.js	
+++ /dev/null
@@ -1,32 +0,0 @@
-describe("$ref 02", function () {
-
-	it("skip unneeded", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema#"}
-		};
-		tv4.validate([], schema);
-		assert.notProperty(tv4.missing, "http://example.com/schema");
-		assert.length(tv4.missing, 0);
-		//return !tv4.missing["http://example.com/schema"]
-		//	&& tv4.missing.length == 0;
-	});
-
-	it("list missing (map)", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema#"}
-		};
-		tv4.validate([1, 2, 3], schema);
-		assert.property(tv4.missing, "http://example.com/schema");
-		//return !!tv4.missing["http://example.com/schema"];
-	});
-
-	it("list missing (index)", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema#"}
-		};
-		tv4.validate([1, 2, 3], schema);
-		assert.length(tv4.missing, 1);
-		assert.strictEqual(tv4.missing[0], "http://example.com/schema");
-		//return tv4.missing[0] == "http://example.com/schema";
-	});
-});
\ No newline at end of file
diff --git a/test/tests/07 - $ref/03 - getSchema.js b/test/tests/07 - $ref/03 - getSchema.js
deleted file mode 100644
index f77c339..0000000
--- a/test/tests/07 - $ref/03 - getSchema.js	
+++ /dev/null
@@ -1,91 +0,0 @@
-describe("$ref 03", function () {
-
-	it("addSchema(), getSchema()", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"test": "value"
-		};
-		tv4.addSchema(url, schema);
-		var fetched = tv4.getSchema(url);
-		assert.strictEqual(fetched.test, "value");
-		//return fetched.test == "value";
-	});
-
-	it("addSchema(), getSchema() with blank fragment", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"test": "value"
-		};
-		tv4.addSchema(url, schema);
-		var fetched = tv4.getSchema(url + "#");
-		assert.strictEqual(fetched.test, "value");
-		//return fetched.test == "value";
-	});
-
-	it("addSchema(), getSchema() with pointer path fragment", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"items": {
-				"properties": {
-					"key[]": {
-						"inner/key~": "value"
-					}
-				}
-			}
-		};
-		tv4.addSchema(url, schema);
-		var fetched = tv4.getSchema(url + "#/items/properties/key%5B%5D/inner~1key~0");
-		assert.strictEqual(fetched, "value");
-		//return fetched == "value";
-	});
-
-	it("addSchema(), getSchema() adds referred schemas", function () {
-		tv4 = tv4.freshApi();
-
-		var data = [123, true];
-		var valid;
-		var url = "http://example.com/schema";
-		var schema = {
-			"type": "array",
-			"items": {"$ref": "http://example.com/schema/sub#item"}
-		};
-		tv4.addSchema(url, schema);
-
-		//test missing
-		valid = tv4.validate(data, schema);
-		assert.isTrue(valid);
-		assert.length(tv4.missing, 1);
-		assert.isUndefined(tv4.getSchema('http://example.com/schema/sub'));
-
-		var item = {
-			"id": "#item",
-			"type": "boolean"
-		};
-		var sub = {
-			"id": "http://example.com/schema/sub",
-			"type": "object",
-			"lib": {
-				"item": item
-			}
-		};
-		tv4.addSchema(sub);
-
-		//added it?
-		assert.equal(tv4.getSchema(url), schema);
-		assert.equal(tv4.getSchema('http://example.com/schema/sub'), sub);
-		assert.equal(tv4.getSchema('http://example.com/schema/sub#item'), item);
-
-		//now use it
-		valid = tv4.validate(data, schema);
-		assert.length(tv4.missing, 0);
-		assert.isFalse(valid);
-
-		var error = {
-			code: 0,
-			message: 'Invalid type: number (expected boolean)',
-			dataPath: '/0',
-			schemaPath: '/items/type',
-			subErrors: null };
-		assert.propertyValues(tv4.error, error);
-	});
-});
\ No newline at end of file
diff --git a/test/tests/07 - $ref/04 - ref.js b/test/tests/07 - $ref/04 - ref.js
deleted file mode 100644
index 91ffdb0..0000000
--- a/test/tests/07 - $ref/04 - ref.js	
+++ /dev/null
@@ -1,40 +0,0 @@
-describe("$ref 04", function () {
-
-	it("addSchema(), $ref", function () {
-		var url = "http://example.com/schema";
-		var schema = {
-			"test": "value"
-		};
-		tv4.addSchema(url, schema);
-
-		var otherSchema = {
-			"items": {"$ref": url}
-		};
-		var valid = tv4.validate([0,1,2,3], otherSchema);
-
-		assert.isTrue(valid, "should be valid");
-		assert.length(tv4.missing, 0, "should have no missing schemas");
-
-		//this.assert(valid, "should be valid");
-		//this.assert(tv4.missing.length == 0, "should have no missing schemas");
-	});
-
-	it("internal $ref", function () {
-		var schema = {
-			"type": "array",
-			"items": {"$ref": "#"}
-		};
-
-		assert.isTrue(tv4.validate([[],[[]]], schema), "List of lists should be valid");
-		assert.isTrue(!tv4.validate([0,1,2,3], schema), "List of ints should not");
-		assert.isTrue(!tv4.validate([[true], []], schema), "List of list with boolean should not");
-
-		assert.length(tv4.missing, 0, "should have no missing schemas");
-
-		//this.assert(tv4.validate([[],[[]]], schema), "List of lists should be valid");
-		//this.assert(!tv4.validate([0,1,2,3], schema), "List of ints should not");
-		//this.assert(!tv4.validate([[true], []], schema), "List of list with boolean should not");
-
-		//this.assert(tv4.missing.length == 0, "should have no missing schemas");
-	});
-});
diff --git a/test/tests/07 - $ref/05 - inline addressing.js b/test/tests/07 - $ref/05 - inline addressing.js
deleted file mode 100644
index 5182064..0000000
--- a/test/tests/07 - $ref/05 - inline addressing.js	
+++ /dev/null
@@ -1,50 +0,0 @@
-describe("$ref 05", function () {
-
-	it("inline addressing for fragments", function () {
-		var schema = {
-			"type": "array",
-			"items": {"$ref": "#test"},
-			"testSchema": {
-				"id": "#test",
-				"type": "boolean"
-			}
-		};
-		var error = {
-			code: 0,
-			message: 'Invalid type: number (expected boolean)',
-			dataPath: '/0',
-			schemaPath: '/items/type',
-			subErrors: null
-		};
-
-		var data = [0, false];
-		var valid = tv4.validate(data, schema);
-		assert.isFalse(valid, 'inline addressing invalid 0, false');
-		assert.propertyValues(tv4.error, error, 'errors equal');
-	});
-
-	it("don't trust non sub-paths", function () {
-		var examplePathBase = "http://example.com/schema";
-		var examplePath = examplePathBase + "/schema";
-		var schema = {
-			"id": examplePath,
-			"type": "array",
-			"items": {"$ref": "other-schema"},
-			"testSchema": {
-				"id": "/other-schema",
-				"type": "boolean"
-			}
-		};
-		tv4.addSchema(examplePath, schema);
-		var data = [0, false];
-		var valid = tv4.validate(data, examplePath);
-
-		assert.length(tv4.missing, 1, "should have missing schema");
-		assert.strictEqual(tv4.missing[0], examplePathBase + "/other-schema", "incorrect schema missing: " + tv4.missing[0]);
-		assert.isTrue(valid, "should pass, as remote schema not found");
-
-		//this.assert(tv4.missing.length == 1, "should have missing schema");
-		//this.assert(tv4.missing[0] == examplePathBase + "/other-schema", "incorrect schema missing: " + tv4.missing[0]);
-		//this.assert(valid, "should pass, as remote schema not found");
-	});
-});
diff --git a/test/tests/07 - $ref/06 - multiple refs.js b/test/tests/07 - $ref/06 - multiple refs.js
deleted file mode 100644
index 22d583a..0000000
--- a/test/tests/07 - $ref/06 - multiple refs.js	
+++ /dev/null
@@ -1,31 +0,0 @@
-describe("$refs to $refs", function () {
-	it("addSchema(), $ref", function () {
-		var schema = {
-			id: "http://example.com/schema",
-			some: {
-				other: {type: "number"}
-			},
-			data: {'$ref': "#/some/other"}
-		};
-		
-		tv4.addSchema(schema);
-		assert.isTrue(tv4.validate(42, {"$ref": "http://example.com/schema#/data"}), "42 valid");
-		//assert.isFalse(tv4.validate(42, {"$ref": "http://example.com/schema#/data"}), "\"42\" invalid");
-		
-		assert.length(tv4.missing, 0, "should have no missing schemas");
-	});
-
-	it("Don't hang on circle", function () {
-		var schema = {
-			id: "http://example.com/schema",
-			ref1: {"$ref": "#/ref2"},
-			ref2: {"$ref": "#/ref1"}
-		};
-		
-		tv4.addSchema(schema);
-		var result = tv4.validateResult(42, "http://example.com/schema#/ref1");
-		
-		assert.isFalse(result.valid, "not valid");
-		assert.equal(result.error.code, tv4.errorCodes.CIRCULAR_REFERENCE, 'Error code correct');
-	});
-});
diff --git a/test/tests/08 - API/01 - validateResult.js b/test/tests/08 - API/01 - validateResult.js
deleted file mode 100644
index 23784b8..0000000
--- a/test/tests/08 - API/01 - validateResult.js	
+++ /dev/null
@@ -1,20 +0,0 @@
-describe("API 01", function () {
-
-	it("validateResult returns object with appropriate properties", function () {
-		var data = {};
-		var schema = {"type": "array"};
-		tv4.error = null;
-		tv4.missing = [];
-		var result = tv4.validateResult(data, schema);
-
-		assert.isFalse(result.valid, "result.valid === false");
-		assert.isTypeOf(result.error, "object", "result.error is object");
-		assert.isArray(result.missing, "result.missing is array");
-		assert.isFalse(!!tv4.error, "tv4.error == null");
-
-		//this.assert(result.valid === false, "result.valid === false");
-		//this.assert(typeof result.error == "object", "result.error is object");
-		//this.assert(Array.isArray(result.missing), "result.missing is array");
-		//this.assert(tv4.error == null, "tv4.error == null");
-	});
-});
diff --git a/test/tests/08 - API/02 - errorCodes existence.js b/test/tests/08 - API/02 - errorCodes existence.js
deleted file mode 100644
index 99d1781..0000000
--- a/test/tests/08 - API/02 - errorCodes existence.js	
+++ /dev/null
@@ -1,7 +0,0 @@
-describe("API 02", function () {
-
-	it("tv4.errorCodes exists", function () {
-		assert.isObject(tv4.errorCodes);
-		//return typeof tv4.errorCodes == "object";
-	});
-});
diff --git a/test/tests/08 - API/03 - get schema URIs.js b/test/tests/08 - API/03 - get schema URIs.js
deleted file mode 100644
index db48baf..0000000
--- a/test/tests/08 - API/03 - get schema URIs.js	
+++ /dev/null
@@ -1,132 +0,0 @@
-describe("API 03", function () {
-
-	it("getSchemaUris() on clean tv4 returns an empty array", function () {
-		var list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 0);
-	});
-
-	it("getSchemaUris() returns newly added schema urls", function () {
-		tv4.addSchema("http://example.com/schema", {type: "object"});
-		var list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.strictEqual(list[0], "http://example.com/schema");
-	});
-
-	it("getMissingUris() returns only missing items", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema/item#"}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-
-		var item = {
-			"id": "http://example.com/schema/item",
-			"type": "boolean"
-		};
-
-		var list;
-		list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.includes(list, "http://example.com/schema/main", 'map has main uri');
-
-		list = tv4.getMissingUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.includes(list, "http://example.com/schema/item", 'map has item uri');
-
-		tv4.addSchema(item);
-
-		list = tv4.getMissingUris();
-		assert.isArray(list);
-		assert.length(list, 0);
-	});
-
-	it("getSchemaUris() optionally return filtered items", function () {
-		var schema = {
-			"items": {"$ref": "http://example.com/schema/item#"}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-
-		var list;
-		list = tv4.getSchemaUris(/schema\/main/);
-		assert.isArray(list);
-		assert.length(list, 1, 'list 1 main');
-		assert.includes(list, "http://example.com/schema/main");
-
-		list = tv4.getMissingUris(/^https?/);
-		assert.isArray(list);
-		assert.length(list, 1, 'list 1 item');
-		assert.includes(list, "http://example.com/schema/item");
-	});
-
-	it("getSchemaUris() returns unique uris without fragment", function () {
-		var schema = {
-			"properties": {
-				"alpha": {
-					"$ref": "http://example.com/schema/lib#alpha"
-				},
-				"beta": {
-					"$ref": "http://example.com/schema/lib#beta"
-				}
-			}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-		var sub = {
-			"id": "http://example.com/schema/item",
-			"items": {
-				"type": "boolean"
-			}
-		};
-		tv4.addSchema(sub);
-
-		var list;
-		list = tv4.getSchemaUris();
-		assert.isArray(list);
-		assert.length(list, 2);
-		assert.includes(list, "http://example.com/schema/main");
-		assert.includes(list, "http://example.com/schema/item");
-
-		list = tv4.getMissingUris();
-		assert.isArray(list);
-		assert.length(list, 1);
-		assert.includes(list, "http://example.com/schema/lib");
-	});
-
-
-	it("getSchemaMap() on clean tv4 returns an empty object", function () {
-		var map = tv4.getSchemaMap();
-		assert.isObject(map);
-		assert.isNotArray(map);
-		var list = Object.keys(map);
-		assert.length(list, 0);
-	});
-
-	it("getSchemaMap() returns an object mapping uris to schemas", function () {
-		var schema = {
-			"properties": {
-				"alpha": {
-					"$ref": "http://example.com/schema/lib#alpha"
-				},
-				"beta": {
-					"$ref": "http://example.com/schema/lib#beta"
-				}
-			}
-		};
-		tv4.addSchema("http://example.com/schema/main", schema);
-		var sub = {
-			"id": "http://example.com/schema/item",
-			"items": {
-				"type": "boolean"
-			}
-		};
-		tv4.addSchema(sub);
-
-		var map;
-		map = tv4.getSchemaMap();
-		assert.length(Object.keys(map), 2);
-		assert.ownPropertyVal(map, "http://example.com/schema/main", schema);
-		assert.ownPropertyVal(map, "http://example.com/schema/item", sub);
-	});
-});
diff --git a/test/tests/09 - Multiple errors/01 - validateMultiple.js b/test/tests/09 - Multiple errors/01 - validateMultiple.js
deleted file mode 100644
index e8ae810..0000000
--- a/test/tests/09 - Multiple errors/01 - validateMultiple.js	
+++ /dev/null
@@ -1,105 +0,0 @@
-describe("Multiple errors 01", function () {
-
-	it("validateMultiple returns array of errors", function () {
-		var data = {};
-		var schema = {"type": "array"};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "data should not be valid");
-		assert.strictEqual(typeof result.errors, "object", "result.errors must be object");
-		assert.isNumber(result.errors.length, "result.errors have numberic length");
-
-		//-> weird: test says be object but it's an array
-
-		//assert.isArray(result.errors, "result.errors must be array-like");
-		//assert.isObject(result.errors, "result.errors must be object");
-
-		//this.assert(result.valid == false, "data should not be valid");
-		//this.assert(typeof result.errors == "object" && typeof result.errors.length == "number", "result.errors must be array-like");
-	});
-
-	it("validateMultiple has multiple entries", function () {
-		var data = {"a": 1, "b": 2};
-		var schema = {"additionalProperties": {"type": "string"}};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.length(result.errors, 2, "should return two errors");
-		//this.assert(result.errors.length == 2, "should return two errors");
-	});
-
-	it("validateMultiple correctly fails anyOf", function () {
-		var data = {};
-		var schema = {
-			"anyOf": [
-				{"type": "string"},
-				{"type": "integer"}
-			]
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 1, "should list one error");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 1, "should list one error");
-	});
-
-	it("validateMultiple correctly fails not", function () {
-		var data = {};
-		var schema = {
-			"not": {"type": "object"}
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 1, "should list one error");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 1, "should list one error");
-	});
-
-	it("validateMultiple correctly passes not", function () {
-		var data = {};
-		var schema = {
-			"not": {"type": "string"}
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isTrue(result.valid, "should validate");
-		assert.length(result.errors, 0, "no errors");
-
-		//this.assert(result.valid == true, "should validate");
-		//this.assert(result.errors.length == 0, "no errors");
-	});
-
-	it("validateMultiple correctly fails multiple oneOf", function () {
-		var data = 5;
-		var schema = {
-			"oneOf": [
-				{"type": "integer"},
-				{"type": "number"}
-			]
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 1, "only one error");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 1, "only one error");
-	});
-
-	it("validateMultiple handles multiple missing properties", function () {
-		var data = {};
-		var schema = {
-			required: ["one", "two"]
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isFalse(result.valid, "should not validate");
-		assert.length(result.errors, 2, "two errors");
-
-		//this.assert(result.valid == false, "should not validate");
-		//this.assert(result.errors.length == 2, "exactly two errors, not " + result.errors.length);
-	});
-});
\ No newline at end of file
diff --git a/test/tests/09 - Multiple errors/02 - validateMultiple 2.js b/test/tests/09 - Multiple errors/02 - validateMultiple 2.js
deleted file mode 100644
index d22b512..0000000
--- a/test/tests/09 - Multiple errors/02 - validateMultiple 2.js	
+++ /dev/null
@@ -1,65 +0,0 @@
-describe("Multiple errors 02", function () {
-
-	it("validateMultiple returns array of errors", function () {
-		var data = {
-			"alternatives": {
-				"option1": "pattern for option 1"
-			}
-		};
-
-		var schema = {
-			"type": "object",
-			"properties": {
-				"alternatives": {
-					"type": "object",
-					"description": "Some options",
-					"oneOf": [
-						{
-							"properties": {
-								"option1": {
-									"type": "string",
-									"pattern": "^pattern for option 1$"
-								}
-							},
-							"additionalProperties": false,
-							"required": [
-								"option1"
-							]
-						},
-						{
-							"properties": {
-								"option2": {
-									"type": "string",
-									"pattern": "^pattern for option 2$"
-								}
-							},
-							"additionalProperties": false,
-							"required": [
-								"option2"
-							]
-						},
-						{
-							"properties": {
-								"option3": {
-									"type": "string",
-									"pattern": "^pattern for option 3$"
-								}
-							},
-							"additionalProperties": false,
-							"required": [
-								"option3"
-							]
-						}
-					]
-				}
-			}
-		};
-		var result = tv4.validateMultiple(data, schema);
-
-		assert.isTrue(result.valid, "data should be valid");
-		assert.length(result.errors, 0, "should have no errors");
-
-		//this.assert(result.valid == true, "data should be valid");
-		//this.assert(result.errors.length == 0, "should have no errors");
-	});
-});
\ No newline at end of file
diff --git a/test/tests/10 - Recursive objects/01 - validate.js b/test/tests/10 - Recursive objects/01 - validate.js
deleted file mode 100644
index 526d113..0000000
--- a/test/tests/10 - Recursive objects/01 - validate.js	
+++ /dev/null
@@ -1,15 +0,0 @@
-describe("Recursive objects 01", function () {
-	it("validate and variants do not choke on recursive objects", function () {
-		var itemA = {};
-		var itemB = { a: itemA };
-		itemA.b = itemB;
-		var aSchema = { properties: { b: { $ref: 'bSchema' }}};
-		var bSchema = { properties: { a: { $ref: 'aSchema' }}};
-		tv4.addSchema('aSchema', aSchema);
-		tv4.addSchema('bSchema', bSchema);
-		tv4.validate(itemA, aSchema, true);
-		tv4.validate(itemA, aSchema, function () {}, true);
-		tv4.validateResult(itemA, aSchema, true);
-		tv4.validateMultiple(itemA, aSchema, true);
-	});
-});
diff --git a/test/tests/10 - Recursive objects/02 - scan.js b/test/tests/10 - Recursive objects/02 - scan.js
deleted file mode 100644
index f60b844..0000000
--- a/test/tests/10 - Recursive objects/02 - scan.js	
+++ /dev/null
@@ -1,14 +0,0 @@
-// We don't handle this in general (atm), but some users have had particular problems with things added to the Array prototype
-describe("Recursive schemas", function () {
-	it("due to extra Array.prototype entries", function () {
-		var testSchema = {
-			items: []
-		};
-		Array.prototype._testSchema = testSchema;
-		
-		// Failure mode will be a RangeError (stack size limit)
-		tv4.addSchema('testSchema', testSchema);
-		
-		delete Array.prototype._testSchema;
-	});
-});
diff --git a/test/tests/11 - format/01 - register validator.js b/test/tests/11 - format/01 - register validator.js
deleted file mode 100644
index 8f7b638..0000000
--- a/test/tests/11 - format/01 - register validator.js	
+++ /dev/null
@@ -1,61 +0,0 @@
-describe("Registering custom validator", function () {
-	it("Allows registration of custom validator codes for \"format\" values", function () {
-		tv4.addFormat('test-format', function () {
-			return null;
-		});
-	});
-
-	it("Custom validator is correctly selected", function () {
-		tv4.addFormat('test-format', function (data) {
-			if (data !== "test string") {
-				return "string does not match";
-			}
-		});
-		
-		var schema = {format: 'test-format'};
-		var data1 = "test string";
-		var data2 = "other string";
-		
-		assert.isTrue(tv4.validate(data1, schema));
-		assert.isFalse(tv4.validate(data2, schema));
-		assert.includes(tv4.error.message, 'string does not match');
-	});
-
-	it("Custom validator object error format", function () {
-		tv4.addFormat('test-format', function (data) {
-			if (data !== "test string") {
-				return {
-					dataPath: "",
-					schemaPath: "/flah",
-					message: "Error message"
-				};
-			}
-		});
-		
-		var schema = {format: 'test-format'};
-		var data1 = "test string";
-		var data2 = "other string";
-		
-		assert.isTrue(tv4.validate(data1, schema));
-		assert.isFalse(tv4.validate(data2, schema));
-		assert.includes(tv4.error.message, 'Error message');
-		assert.equal(tv4.error.schemaPath, '/flah');
-	});
-
-	it("Register multiple using object", function () {
-		tv4.addFormat({
-			'test1': function () {return 'break 1';},
-			'test2': function () {return 'break 2';}
-		});
-		
-		var schema1 = {format: 'test1'};
-		var result1 = tv4.validateResult("test string", schema1);
-		assert.isFalse(result1.valid);
-		assert.includes(result1.error.message, 'break 1');
-
-		var schema2 = {format: 'test2'};
-		var result2 = tv4.validateResult("test string", schema2);
-		assert.isFalse(result2.valid);
-		assert.includes(result2.error.message, 'break 2');
-	});
-});
diff --git a/test/tests/12 - banUnknownProperties/01 - simple case.js b/test/tests/12 - banUnknownProperties/01 - simple case.js
deleted file mode 100644
index de1e213..0000000
--- a/test/tests/12 - banUnknownProperties/01 - simple case.js	
+++ /dev/null
@@ -1,68 +0,0 @@
-describe("Ban unknown properties 01", function () {
-	it("Additional argument to ban additional properties", function () {
-		var schema = {
-			properties: {
-				propA: {},
-				propB: {}
-			}
-		};
-		var data = {
-			propA: true,
-			propUnknown: true
-		};
-		var data2 = {
-			propA: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateMultiple(data2, schema, false, true);
-		assert.isTrue(result2.valid, "Must still validate");
-	});
-
-	it("Works with validateResult()", function () {
-		var schema = {
-			properties: {
-				propA: {},
-				propB: {}
-			}
-		};
-		var data = {
-			propA: true,
-			propUnknown: true
-		};
-		var data2 = {
-			propA: true
-		};
-		
-		var result = tv4.validateResult(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateResult(data2, schema, false, true);
-		assert.isTrue(result2.valid, "Must be valid");
-	});
-
-	it("Do not complain if additionalArguments is specified", function () {
-		var schema = {
-			properties: {
-				propA: {},
-				propB: {}
-			},
-			additionalProperties: true
-		};
-		var data = {
-			propA: true,
-			propUnknown: true
-		};
-		var data2 = {
-			propA: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isTrue(result.valid, "Must be valid");
-
-		var result2 = tv4.validateMultiple(data2, schema, false, true);
-		assert.isTrue(result2.valid, "Must still validate");
-	});
-});
diff --git a/test/tests/12 - banUnknownProperties/02 - composite behaviour.js b/test/tests/12 - banUnknownProperties/02 - composite behaviour.js
deleted file mode 100644
index cfb275f..0000000
--- a/test/tests/12 - banUnknownProperties/02 - composite behaviour.js	
+++ /dev/null
@@ -1,76 +0,0 @@
-describe("Ban unknown properties 02", function () {
-	it("Do not track property definitions from \"not\"", function () {
-		var schema = {
-			"not": {
-				properties: {
-					propA: {"type": "string"},
-				}
-			}
-		};
-		var data = {
-			propA: true,
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-	});
-
-	it("Do not track property definitions from unselected \"oneOf\"", function () {
-		var schema = {
-			"oneOf": [
-				{
-					"type": "object",
-					"properties": {
-						"propA": {"type": "string"}
-					}
-				},
-				{
-					"type": "object",
-					"properties": {
-						"propB": {"type": "boolean"}
-					}
-				}
-			]
-		};
-		var data = {
-			propA: true,
-			propB: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateMultiple(data, schema, false);
-		assert.isTrue(result2.valid, "Must still be valid without flag");
-	});
-
-
-	it("Do not track property definitions from unselected \"anyOf\"", function () {
-		var schema = {
-			"anyOf": [
-				{
-					"type": "object",
-					"properties": {
-						"propA": {"type": "string"}
-					}
-				},
-				{
-					"type": "object",
-					"properties": {
-						"propB": {"type": "boolean"}
-					}
-				}
-			]
-		};
-		var data = {
-			propA: true,
-			propB: true
-		};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-
-		var result2 = tv4.validateMultiple(data, schema, false);
-		assert.isTrue(result2.valid, "Must still be valid without flag");
-	});
-});
diff --git a/test/tests/13 - error reporting/01 - required dataPath.js b/test/tests/13 - error reporting/01 - required dataPath.js
deleted file mode 100644
index 246e53b..0000000
--- a/test/tests/13 - error reporting/01 - required dataPath.js	
+++ /dev/null
@@ -1,27 +0,0 @@
-describe("Fill dataPath for \"required\" (GitHub Issue #103)", function () {
-	it("Blank for first-level properties", function () {
-		var schema = {
-			required: ['A']
-		};
-		var data = {};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].dataPath, '');
-	});
-
-	it("Filled for second-level properties", function () {
-		var schema = {
-			properties: {
-				"foo": {
-					required: ["bar"]
-				}
-			}
-		};
-		var data = {"foo": {}};
-		
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].dataPath, '/foo');
-	});
-});
diff --git a/test/tests/13 - error reporting/02 - oneOf schemaPath.js b/test/tests/13 - error reporting/02 - oneOf schemaPath.js
deleted file mode 100644
index 35b85fd..0000000
--- a/test/tests/13 - error reporting/02 - oneOf schemaPath.js	
+++ /dev/null
@@ -1,49 +0,0 @@
-describe("Valid schemaPath for \"oneOf\" (GitHub Issue #117)", function () {
-    it("valid schemaPath in error (simple types)", function () {
-        var data = {};
-        var schema = {
-            "oneOf": [
-                { "type": "string" },
-                { "type": "bool" }
-            ]
-        };
-        
-        var result = tv4.validateMultiple(data, schema);
-        var suberr = result.errors[0].subErrors;
-        assert.equal(suberr[0].schemaPath, '/oneOf/0/type');
-        assert.equal(suberr[1].schemaPath, '/oneOf/1/type');
-    });
-    
-    it("valid schemaPath in error (required properties)", function () {
-        /* Test case provided on GitHub Issue #117 */
-        var data = {};
-        var schema = {
-            "$schema": "http://json-schema.org/draft-04/schema#",
-            "oneOf": [
-                {
-                    "type": "object",
-                    "properties": {
-                        "data": {
-                            "type": "object"
-                        }
-                    },
-                    "required": ["data"]
-                },
-                {
-                    "type": "object",
-                    "properties": {
-                        "error": {
-                            "type": "object"
-                        }
-                    },
-                    "required": ["error"]
-                }
-            ]
-        };
-        
-        var result = tv4.validateMultiple(data, schema);
-        var suberr = result.errors[0].subErrors;
-        assert.equal(suberr[0].schemaPath, "/oneOf/0/required/0");
-        assert.equal(suberr[1].schemaPath, "/oneOf/1/required/0");
-    });
-});
diff --git a/test/tests/14 - custom validation/01 - custom keywords.js b/test/tests/14 - custom validation/01 - custom keywords.js
deleted file mode 100644
index 3935949..0000000
--- a/test/tests/14 - custom validation/01 - custom keywords.js	
+++ /dev/null
@@ -1,154 +0,0 @@
-describe("Register custom keyword", function () {
-	it("function called", function () {
-		var schema = {
-			customKeyword: "A"
-		};
-		var data = {};
-
-		tv4.defineKeyword('customKeyword', function () {
-			return "Custom failure";
-		});
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].message, 'Keyword failed: customKeyword (Custom failure)');
-	});
-
-	it("custom error code", function () {
-		var schema = {
-			customKeywordFoo: "A"
-		};
-		var data = "test test test";
-
-		tv4.defineKeyword('customKeywordFoo', function (data, value) {
-			return {
-				code: 'CUSTOM_KEYWORD_FOO',
-				message: {data: data, value: value}
-			};
-		});
-		tv4.defineError('CUSTOM_KEYWORD_FOO', 123456789, "{value}: {data}");
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].message, 'A: test test test');
-		assert.deepEqual(result.errors[0].code, 123456789);
-	});
-	
-	it("custom error code (numeric)", function () {
-		var schema = {
-			customKeywordBar: "A"
-		};
-		var data = "test test test";
-
-		tv4.defineKeyword('customKeywordBar', function (data, value) {
-			return {
-				code: 1234567890,
-				message: {data: data, value: value}
-			};
-		});
-		tv4.defineError('CUSTOM_KEYWORD_BAR', 1234567890, "{value}: {data}");
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.isFalse(result.valid, "Must not be valid");
-		assert.deepEqual(result.errors[0].message, 'A: test test test');
-		assert.deepEqual(result.errors[0].code, 1234567890);
-	});
-
-	it("restrict custom error codes", function () {
-		assert.throws(function () {
-			tv4.defineError('CUSTOM_KEYWORD_BLAH', 9999, "{value}: {data}");
-		});
-	});
-
-	it("restrict custom error names", function () {
-		assert.throws(function () {
-			tv4.defineError('doesnotmatchpattern', 10002, "{value}: {data}");
-		});
-	});
-
-	it("can't defined the same code twice", function () {
-		assert.throws(function () {
-			tv4.defineError('CUSTOM_ONE', 10005, "{value}: {data}");
-			tv4.defineError('CUSTOM_TWO', 10005, "{value}: {data}");
-		});
-	});
-
-	it("function can return existing (non-custom) codes", function () {
-		var schema = {
-			"type": "object",
-			"properties": {
-				"aStringValue": {
-					"type": "string",
-					"my-custom-keyword": "something"
-				},
-				"aBooleanValue": {
-					"type": "boolean"
-				}
-			}
-		};
-		var data = {
-			"aStringValue": "a string",
-			"aBooleanValue": true
-		};
-
-		tv4.defineKeyword('my-custom-keyword', function () {
-			return {code: 0, message: "test"};
-		});
-
-		var result = tv4.validateMultiple(data, schema, false, true);
-		assert.equal(result.errors[0].code, tv4.errorCodes.INVALID_TYPE);
-	});
-
-	it("function only called when keyword present", function () {
-		var schema = {
-			"type": "object",
-			"properties": {
-				"aStringValue": {
-					"type": "string",
-					"my-custom-keyword": "something"
-				},
-				"aBooleanValue": {
-					"type": "boolean"
-				}
-			}
-		};
-		var data = {
-			"aStringValue": "a string",
-			"aBooleanValue": true
-		};
-
-		var callCount = 0;
-		tv4.defineKeyword('my-custom-keyword', function () {
-			callCount++;
-		});
-
-		tv4.validateMultiple(data, schema, false, true);
-		assert.deepEqual(callCount, 1, "custom function must be called exactly once");
-	});
-
-	it("function knows dataPointerPath", function () {
-		var schema = {
-			"type": "object",
-			"properties": {
-				"obj": {
-					"type": "object",
-					"properties":{
-						"test":{
-							"my-custom-keyword": "something",
-							"type":"string"
-						}
-					}
-				}
-			}
-		};
-		var data = { "obj":{ "test": "a string"} };
-
-		var path = null;
-		tv4.defineKeyword('my-custom-keyword', function (data,value,schema,dataPointerPath) {
-			path = dataPointerPath;
-		});
-
-		tv4.validateMultiple(data, schema, false, true);
-		assert.strictEqual(path, "/obj/test", "custom function must know its context path");
-	});
-});
diff --git a/test/tests/15 - language/01 - language file.js b/test/tests/15 - language/01 - language file.js
deleted file mode 100644
index da2112b..0000000
--- a/test/tests/15 - language/01 - language file.js	
+++ /dev/null
@@ -1,23 +0,0 @@
-describe("Load language file", function () {
-	if (typeof process !== 'object' || typeof require !== 'function') {
-		it.skip("commonjs language", function () {
-			// dummy
-		});
-	}
-	else {
-		it("commonjs language: de", function () {
-			var tv4 = require('../lang/de');
-
-			tv4.language('de');
-
-			var schema = {
-				properties: {
-					intKey: {"type": "integer"}
-				}
-			};
-			var res = tv4.validateResult({intKey: 'bad'}, schema);
-			assert.isFalse(res.valid);
-			assert.equal(res.error.message, 'Ungültiger Typ: string (erwartet wurde: integer)');
-		});
-	}
-});
diff --git a/test/tests/15 - language/02 - custom reporter.js b/test/tests/15 - language/02 - custom reporter.js
deleted file mode 100644
index ec717e5..0000000
--- a/test/tests/15 - language/02 - custom reporter.js	
+++ /dev/null
@@ -1,29 +0,0 @@
-describe("Custom error reporting", function () {
-	it('provides custom message', function () {
-		var api = tv4.freshApi();
-
-		api.setErrorReporter(function (error, data, schema) {
-			assert.deepEqual(data, 5);
-			assert.deepEqual(schema, {minimum: 10});
-			return 'Code: ' + error.code;
-		});
-
-		var res = api.validateResult(5, {minimum: 10});
-		assert.isFalse(res.valid);
-		assert.equal(res.error.message, 'Code: 101');
-	});
-
-	it('falls back to default', function () {
-		var api = tv4.freshApi();
-
-		api.setErrorReporter(function (error, data, schema) {
-			assert.deepEqual(data, 5);
-			assert.deepEqual(schema, {minimum: 10});
-			return null;
-		});
-
-		var res = api.validateResult(5, {minimum: 10});
-		assert.isFalse(res.valid);
-		assert.isString(res.error.message);
-	});
-});
diff --git a/test/tests/16 - hypermedia/02 - describedby link.js b/test/tests/16 - hypermedia/02 - describedby link.js
deleted file mode 100644
index c0ed75b..0000000
--- a/test/tests/16 - hypermedia/02 - describedby link.js	
+++ /dev/null
@@ -1,35 +0,0 @@
-describe("Load language file", function () {
-	it("commonjs language: de", function () {
-		var freshTv4 = tv4.freshApi();
-		
-		freshTv4.addSchema('/polymorphic', {
-			type: "object",
-			properties: {
-				"type": {type: "string"}
-			},
-			required: ["type"],
-			links: [{
-				rel: "describedby",
-				href: "/schemas/{type}.json"
-			}]
-		});
-
-		var res = freshTv4.validateResult({type: 'monkey'}, "/polymorphic");
-		assert.isTrue(res.valid);
-		assert.includes(res.missing, "/schemas/monkey.json");
-		
-		freshTv4.addSchema('/schemas/tiger.json', {
-			properties: {
-				"stripes": {"type": "integer", "minimum": 1}
-			},
-			required: ["stripes"]
-		});
-		
-		var res2 = freshTv4.validateResult({type: 'tiger', stripes: -1}, "/polymorphic");
-		assert.isFalse(res2.valid);
-		assert.deepEqual(res2.missing.length, 0, "no schemas should be missing");
-
-		var res3 = freshTv4.validateResult({type: 'tiger', stripes: 50}, "/polymorphic");
-		assert.isTrue(res3.valid);
-	});
-});
diff --git a/test/tests/Misc/Issue 108.js b/test/tests/Misc/Issue 108.js
deleted file mode 100644
index 077f4b5..0000000
--- a/test/tests/Misc/Issue 108.js	
+++ /dev/null
@@ -1,26 +0,0 @@
-describe("Issue 108", function () {
-
-	it("Normalise schemas even inside $ref", function () {
-	
-		var schema = {
-			"id": "http://example.com/schema" + Math.random(),
-			"$ref": "#whatever",
-			"properties": {
-				"foo": {
-					"id": "#test",
-					"type": "string"
-				}
-			}
-		};
-
-		tv4.addSchema(schema);
-
-		var result = tv4.validateMultiple("test data", schema.id + '#test');		
-		assert.isTrue(result.valid, 'validateMultiple() should return valid');
-		assert.deepEqual(result.missing.length, 0, 'should have no missing schemas');
-
-		var result2 = tv4.validateMultiple({"foo":"bar"}, schema.id + '#test');
-		assert.isFalse(result2.valid, 'validateMultiple() should return invalid');
-		assert.deepEqual(result2.missing.length, 0, 'should have no missing schemas');
-	});
-});
\ No newline at end of file
diff --git a/test/tests/Misc/Issue 109.js b/test/tests/Misc/Issue 109.js
deleted file mode 100644
index d461a01..0000000
--- a/test/tests/Misc/Issue 109.js	
+++ /dev/null
@@ -1,21 +0,0 @@
-describe("Issue 109", function () {
-
-	it("Don't break on null values with banUnknownProperties", function () {
-	
-		var schema = {
-			"type": "object",
-			"properties": {
-				"foo": {
-					"type": "object",
-					"additionalProperties": {"type": "string"}
-				}
-			}
-		};
-
-		var data = {foo: null};
-		
-		var result = tv4.validateMultiple(data, schema, true, true);
-		
-		assert.isFalse(result.valid, 'validateMultiple() should return invalid');
-	});
-});
\ No newline at end of file
diff --git a/test/tests/Misc/Issue 32.js b/test/tests/Misc/Issue 32.js
deleted file mode 100644
index 321bc41..0000000
--- a/test/tests/Misc/Issue 32.js	
+++ /dev/null
@@ -1,61 +0,0 @@
-describe("Issue 32", function () {
-
-	it("Example from GitHub issue #32", function () {
-		var subSchema = {
-			"title": "SubSchema",
-			"type": "object",
-			"properties": {
-				"attribute": {"type": "string"}
-			},
-			"additionalProperties": false
-		};
-
-		var mySchema = {
-			"title": "My Schema",
-			"type": "object",
-			"properties": {
-				"name": {"type": "string"},
-				"subschemas": {"type": "array", "items": {"$ref": "#/definitions/subSchema"}}
-			},
-			"definitions": {
-				"subSchema": subSchema
-			},
-			"additionalProperties": false
-		};
-
-		/* unused variable
-		var data1 = {
-			"name": "Joe",
-			"subschemas": [
-				{"attribute": "Hello"}
-			]
-		};*/
-
-		var addlPropInSubSchema = {
-			"name": "Joe",
-			"subschemas": [
-				{"attribute": "Hello", "extra": "Not Allowed"}
-			]
-		};
-
-		// Usage 1
-		var expectedUsage1Result = tv4.validate(addlPropInSubSchema, mySchema);
-		assert.isFalse(expectedUsage1Result, 'plain validate should fail');
-		//this.assert(!expectedUsage1Result, 'plain validate should fail');
-
-		// Usage 2
-		var expectedUsage2Result = tv4.validateResult(addlPropInSubSchema, mySchema);
-		assert.isFalse(expectedUsage2Result.valid, 'validateResult should fail');
-
-		//-> this has a typo that didn't show because of type conversion!
-
-		//this.assert(!expectedUsage1Result.valud, 'validateResult should fail');
-
-		// Usage 3
-		var expectedMultipleErrorResult = tv4.validateMultiple(addlPropInSubSchema, mySchema);
-		assert.isFalse(expectedMultipleErrorResult.valid, 'validateMultiple should fail');
-		assert.length(expectedMultipleErrorResult.errors, 1, 'validateMultiple should have exactly one error');
-		//this.assert(!expectedMultipleErrorResult.valid, 'validateMultiple should fail');
-		//this.assert(expectedMultipleErrorResult.errors.length == 1, 'validateMultiple should have exactly one error');
-	});
-});
\ No newline at end of file
diff --git a/test/tests/Misc/Issue 67.js b/test/tests/Misc/Issue 67.js
deleted file mode 100644
index 9d75e3f..0000000
--- a/test/tests/Misc/Issue 67.js	
+++ /dev/null
@@ -1,7 +0,0 @@
-describe("Issue 67", function () {
-
-	it("Example from GitHub issue #67", function () {
-		// Make sure null values don't trip up the normalisation
-		tv4.validate(null, {default: null});
-	});
-});
\ No newline at end of file
diff --git a/test/tests/Misc/Issue 86.js b/test/tests/Misc/Issue 86.js
deleted file mode 100644
index 9713738..0000000
--- a/test/tests/Misc/Issue 86.js	
+++ /dev/null
@@ -1,120 +0,0 @@
-describe("Issue 86", function () {
-
-	it("Example from GitHub issue #86", function () {
-		// The "checkRecursive" flag skips some data nodes if it actually needs to check the same data/schema pair twice
-	
-		var schema = {
-			"type": "object",
-			"properties": {
-				"shape": {
-					"oneOf": [
-						{ "$ref": "#/definitions/squareSchema" },
-						{ "$ref": "#/definitions/circleSchema" }
-					]
-				}
-			},
-			"definitions": {
-				"squareSchema": {
-					"type": "object",
-					"properties": {
-						"thetype": {
-							"type": "string",
-							"enum": ["square"]
-						},
-						"colour": {},
-						"shade": {},
-						"boxname": {
-							"type": "string"
-						}
-					},
-					"oneOf": [
-						{ "$ref": "#/definitions/colourSchema" },
-						{ "$ref": "#/definitions/shadeSchema" }
-					],
-					"required": ["thetype", "boxname"],
-					"additionalProperties": false
-				},
-				"circleSchema": {
-					"type": "object",
-					"properties": {
-						"thetype": {
-							"type": "string",
-							"enum": ["circle"]
-						},
-						"colour": {},
-						"shade": {}
-					},
-					"oneOf": [
-						{ "$ref": "#/definitions/colourSchema" },
-						{ "$ref": "#/definitions/shadeSchema" }
-					],
-					"additionalProperties": false
-				},
-				"colourSchema": {
-					"type": "object",
-					"properties": {
-						"colour": {
-							"type": "string"
-						},
-						"shade": {
-							"type": "null"
-						}
-					}
-				},
-				"shadeSchema": {
-					"type": "object",
-					"properties": {
-						"shade": {
-							"type": "string"
-						},
-						"colour": {
-							"type": "null"
-						}
-					}
-				}
-			}
-		};
-
-	
-		var circle = {
-			"shape": {
-				"thetype": "circle",
-				"shade": "red"
-			}
-		};
-		
-		var simpleResult = tv4.validate(circle, schema, true);
-		var multipleResult = tv4.validateMultiple(circle, schema, true);
-		
-		assert.isTrue(simpleResult, 'validate() should return valid');
-		assert.isTrue(multipleResult.valid, 'validateMultiple() should return valid');
-	});
-
-	it("Second example", function () {
-		var schema = {
-			"allOf": [
-				{
-					"oneOf": [
-						{"$ref": "#/definitions/option1"},
-						{"$ref": "#/definitions/option2"},
-					]
-				},
-				{
-					"not": {"$ref": "#/definitions/option2"}
-				}
-			],
-			"definitions": {
-				"option1": {
-					"allOf": [{"type": "string"}]
-				},
-				"option2": {
-					"allOf": [{"type": "number"}]
-				}
-			}
-		};
-		
-		var simpleResult = tv4.validate("test", schema, true);
-		
-		assert.isTrue(simpleResult, "validate() should return valid");
-	});
-});
\ No newline at end of file
diff --git a/test/tests/Misc/enum null failure.js b/test/tests/Misc/enum null failure.js
deleted file mode 100644
index cfe51a4..0000000
--- a/test/tests/Misc/enum null failure.js	
+++ /dev/null
@@ -1,21 +0,0 @@
-describe("Enum object/null failure", function () {
-
-	it("Doesn't crash", function () {
-	
-		var schema = {
-			"type": "object",
-			"required": ["value"],
-			"properties": {
-				"value": {
-					"enum": [6, "foo", [], true, {"foo": 12}]
-				}
-			}
-		};
-
-		var data = {value: null}; // Somehow this is only a problem when a *property* is null, not the root
-		
-		var result = tv4.validateMultiple(data, schema);
-		
-		assert.isFalse(result.valid, 'validateMultiple() should return invalid');
-	});
-});
\ No newline at end of file
diff --git a/try/ace/ace.js b/try/ace/ace.js
deleted file mode 100644
index 886d89d..0000000
--- a/try/ace/ace.js
+++ /dev/null
@@ -1,15548 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-(function() {
-
-var ACE_NAMESPACE = "";
-
-var global = (function() {
-    return this;
-})();
-
-
-if (!ACE_NAMESPACE && typeof requirejs !== "undefined")
-    return;
-
-
-var _define = function(module, deps, payload) {
-    if (typeof module !== 'string') {
-        if (_define.original)
-            _define.original.apply(window, arguments);
-        else {
-            console.error('dropping module because define wasn\'t a string.');
-            console.trace();
-        }
-        return;
-    }
-
-    if (arguments.length == 2)
-        payload = deps;
-
-    if (!_define.modules) {
-        _define.modules = {};
-        _define.payloads = {};
-    }
-    
-    _define.payloads[module] = payload;
-    _define.modules[module] = null;
-};
-var _require = function(parentId, module, callback) {
-    if (Object.prototype.toString.call(module) === "[object Array]") {
-        var params = [];
-        for (var i = 0, l = module.length; i < l; ++i) {
-            var dep = lookup(parentId, module[i]);
-            if (!dep && _require.original)
-                return _require.original.apply(window, arguments);
-            params.push(dep);
-        }
-        if (callback) {
-            callback.apply(null, params);
-        }
-    }
-    else if (typeof module === 'string') {
-        var payload = lookup(parentId, module);
-        if (!payload && _require.original)
-            return _require.original.apply(window, arguments);
-
-        if (callback) {
-            callback();
-        }
-
-        return payload;
-    }
-    else {
-        if (_require.original)
-            return _require.original.apply(window, arguments);
-    }
-};
-
-var normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-
-    return moduleName;
-};
-var lookup = function(parentId, moduleName) {
-
-    moduleName = normalizeModule(parentId, moduleName);
-
-    var module = _define.modules[moduleName];
-    if (!module) {
-        module = _define.payloads[moduleName];
-        if (typeof module === 'function') {
-            var exports = {};
-            var mod = {
-                id: moduleName,
-                uri: '',
-                exports: exports,
-                packaged: true
-            };
-
-            var req = function(module, callback) {
-                return _require(moduleName, module, callback);
-            };
-
-            var returnValue = module(req, exports, mod);
-            exports = returnValue || mod.exports;
-            _define.modules[moduleName] = exports;
-            delete _define.payloads[moduleName];
-        }
-        module = _define.modules[moduleName] = exports || module;
-    }
-    return module;
-};
-
-function exportAce(ns) {
-    var require = function(module, callback) {
-        return _require("", module, callback);
-    };    
-
-    var root = global;
-    if (ns) {
-        if (!global[ns])
-            global[ns] = {};
-        root = global[ns];
-    }
-
-    if (!root.define || !root.define.packaged) {
-        _define.original = root.define;
-        root.define = _define;
-        root.define.packaged = true;
-    }
-
-    if (!root.require || !root.require.packaged) {
-        _require.original = root.require;
-        root.require = require;
-        root.require.packaged = true;
-    }
-}
-
-exportAce(ACE_NAMESPACE);
-
-})();
-
-define('ace/ace', ['require', 'exports', 'module' , 'ace/lib/fixoldbrowsers', 'ace/lib/dom', 'ace/lib/event', 'ace/editor', 'ace/edit_session', 'ace/undomanager', 'ace/virtual_renderer', 'ace/multi_select', 'ace/worker/worker_client', 'ace/keyboard/hash_handler', 'ace/placeholder', 'ace/mode/folding/fold_mode', 'ace/theme/textmate', 'ace/config'], function(require, exports, module) {
-
-
-require("./lib/fixoldbrowsers");
-
-var dom = require("./lib/dom");
-var event = require("./lib/event");
-
-var Editor = require("./editor").Editor;
-var EditSession = require("./edit_session").EditSession;
-var UndoManager = require("./undomanager").UndoManager;
-var Renderer = require("./virtual_renderer").VirtualRenderer;
-var MultiSelect = require("./multi_select").MultiSelect;
-require("./worker/worker_client");
-require("./keyboard/hash_handler");
-require("./placeholder");
-require("./mode/folding/fold_mode");
-require("./theme/textmate");
-
-exports.config = require("./config");
-exports.require = require;
-exports.edit = function(el) {
-    if (typeof(el) == "string") {
-        var _id = el;
-        var el = document.getElementById(_id);
-        if (!el)
-            throw "ace.edit can't find div #" + _id;
-    }
-
-    if (el.env && el.env.editor instanceof Editor)
-        return el.env.editor;
-
-    var doc = exports.createEditSession(dom.getInnerText(el));
-    el.innerHTML = '';
-
-    var editor = new Editor(new Renderer(el));
-    new MultiSelect(editor);
-    editor.setSession(doc);
-
-    var env = {
-        document: doc,
-        editor: editor,
-        onResize: editor.resize.bind(editor, null)
-    };
-    event.addListener(window, "resize", env.onResize);
-    editor.on("destroy", function() {
-        event.removeListener(window, "resize", env.onResize);
-    });
-    el.env = editor.env = env;
-    return editor;
-};
-exports.createEditSession = function(text, mode) {
-    var doc = new EditSession(text, mode);
-    doc.setUndoManager(new UndoManager());
-    return doc;
-}
-exports.EditSession = EditSession;
-exports.UndoManager = UndoManager;
-});
-
-define('ace/lib/fixoldbrowsers', ['require', 'exports', 'module' , 'ace/lib/regexp', 'ace/lib/es5-shim'], function(require, exports, module) {
-
-
-require("./regexp");
-require("./es5-shim");
-
-});
- 
-define('ace/lib/regexp', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-    var real = {
-            exec: RegExp.prototype.exec,
-            test: RegExp.prototype.test,
-            match: String.prototype.match,
-            replace: String.prototype.replace,
-            split: String.prototype.split
-        },
-        compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
-        compliantLastIndexIncrement = function () {
-            var x = /^/g;
-            real.test.call(x, "");
-            return !x.lastIndex;
-        }();
-
-    if (compliantLastIndexIncrement && compliantExecNpcg)
-        return;
-    RegExp.prototype.exec = function (str) {
-        var match = real.exec.apply(this, arguments),
-            name, r2;
-        if ( typeof(str) == 'string' && match) {
-            if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
-                r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", ""));
-                real.replace.call(str.slice(match.index), r2, function () {
-                    for (var i = 1; i < arguments.length - 2; i++) {
-                        if (arguments[i] === undefined)
-                            match[i] = undefined;
-                    }
-                });
-            }
-            if (this._xregexp && this._xregexp.captureNames) {
-                for (var i = 1; i < match.length; i++) {
-                    name = this._xregexp.captureNames[i - 1];
-                    if (name)
-                       match[name] = match[i];
-                }
-            }
-            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
-                this.lastIndex--;
-        }
-        return match;
-    };
-    if (!compliantLastIndexIncrement) {
-        RegExp.prototype.test = function (str) {
-            var match = real.exec.call(this, str);
-            if (match && this.global && !match[0].length && (this.lastIndex > match.index))
-                this.lastIndex--;
-            return !!match;
-        };
-    }
-
-    function getNativeFlags (regex) {
-        return (regex.global     ? "g" : "") +
-               (regex.ignoreCase ? "i" : "") +
-               (regex.multiline  ? "m" : "") +
-               (regex.extended   ? "x" : "") + // Proposed for ES4; included in AS3
-               (regex.sticky     ? "y" : "");
-    }
-
-    function indexOf (array, item, from) {
-        if (Array.prototype.indexOf) // Use the native array method if available
-            return array.indexOf(item, from);
-        for (var i = from || 0; i < array.length; i++) {
-            if (array[i] === item)
-                return i;
-        }
-        return -1;
-    }
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
-
-define('ace/lib/dom', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-if (typeof document == "undefined")
-    return;
-
-var XHTML_NS = "http://www.w3.org/1999/xhtml";
-
-exports.getDocumentHead = function(doc) {
-    if (!doc)
-        doc = document;
-    return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement;
-}
-
-exports.createElement = function(tag, ns) {
-    return document.createElementNS ?
-           document.createElementNS(ns || XHTML_NS, tag) :
-           document.createElement(tag);
-};
-
-exports.hasCssClass = function(el, name) {
-    var classes = el.className.split(/\s+/g);
-    return classes.indexOf(name) !== -1;
-};
-exports.addCssClass = function(el, name) {
-    if (!exports.hasCssClass(el, name)) {
-        el.className += " " + name;
-    }
-};
-exports.removeCssClass = function(el, name) {
-    var classes = el.className.split(/\s+/g);
-    while (true) {
-        var index = classes.indexOf(name);
-        if (index == -1) {
-            break;
-        }
-        classes.splice(index, 1);
-    }
-    el.className = classes.join(" ");
-};
-
-exports.toggleCssClass = function(el, name) {
-    var classes = el.className.split(/\s+/g), add = true;
-    while (true) {
-        var index = classes.indexOf(name);
-        if (index == -1) {
-            break;
-        }
-        add = false;
-        classes.splice(index, 1);
-    }
-    if(add)
-        classes.push(name);
-
-    el.className = classes.join(" ");
-    return add;
-};
-exports.setCssClass = function(node, className, include) {
-    if (include) {
-        exports.addCssClass(node, className);
-    } else {
-        exports.removeCssClass(node, className);
-    }
-};
-
-exports.hasCssString = function(id, doc) {
-    var index = 0, sheets;
-    doc = doc || document;
-
-    if (doc.createStyleSheet && (sheets = doc.styleSheets)) {
-        while (index < sheets.length)
-            if (sheets[index++].owningElement.id === id) return true;
-    } else if ((sheets = doc.getElementsByTagName("style"))) {
-        while (index < sheets.length)
-            if (sheets[index++].id === id) return true;
-    }
-
-    return false;
-};
-
-exports.importCssString = function importCssString(cssText, id, doc) {
-    doc = doc || document;
-    if (id && exports.hasCssString(id, doc))
-        return null;
-    
-    var style;
-    
-    if (doc.createStyleSheet) {
-        style = doc.createStyleSheet();
-        style.cssText = cssText;
-        if (id)
-            style.owningElement.id = id;
-    } else {
-        style = doc.createElementNS
-            ? doc.createElementNS(XHTML_NS, "style")
-            : doc.createElement("style");
-
-        style.appendChild(doc.createTextNode(cssText));
-        if (id)
-            style.id = id;
-
-        exports.getDocumentHead(doc).appendChild(style);
-    }
-};
-
-exports.importCssStylsheet = function(uri, doc) {
-    if (doc.createStyleSheet) {
-        doc.createStyleSheet(uri);
-    } else {
-        var link = exports.createElement('link');
-        link.rel = 'stylesheet';
-        link.href = uri;
-
-        exports.getDocumentHead(doc).appendChild(link);
-    }
-};
-
-exports.getInnerWidth = function(element) {
-    return (
-        parseInt(exports.computedStyle(element, "paddingLeft"), 10) +
-        parseInt(exports.computedStyle(element, "paddingRight"), 10) + 
-        element.clientWidth
-    );
-};
-
-exports.getInnerHeight = function(element) {
-    return (
-        parseInt(exports.computedStyle(element, "paddingTop"), 10) +
-        parseInt(exports.computedStyle(element, "paddingBottom"), 10) +
-        element.clientHeight
-    );
-};
-
-if (window.pageYOffset !== undefined) {
-    exports.getPageScrollTop = function() {
-        return window.pageYOffset;
-    };
-
-    exports.getPageScrollLeft = function() {
-        return window.pageXOffset;
-    };
-}
-else {
-    exports.getPageScrollTop = function() {
-        return document.body.scrollTop;
-    };
-
-    exports.getPageScrollLeft = function() {
-        return document.body.scrollLeft;
-    };
-}
-
-if (window.getComputedStyle)
-    exports.computedStyle = function(element, style) {
-        if (style)
-            return (window.getComputedStyle(element, "") || {})[style] || "";
-        return window.getComputedStyle(element, "") || {};
-    };
-else
-    exports.computedStyle = function(element, style) {
-        if (style)
-            return element.currentStyle[style];
-        return element.currentStyle;
-    };
-
-exports.scrollbarWidth = function(document) {
-    var inner = exports.createElement("ace_inner");
-    inner.style.width = "100%";
-    inner.style.minWidth = "0px";
-    inner.style.height = "200px";
-    inner.style.display = "block";
-
-    var outer = exports.createElement("ace_outer");
-    var style = outer.style;
-
-    style.position = "absolute";
-    style.left = "-10000px";
-    style.overflow = "hidden";
-    style.width = "200px";
-    style.minWidth = "0px";
-    style.height = "150px";
-    style.display = "block";
-
-    outer.appendChild(inner);
-
-    var body = document.documentElement;
-    body.appendChild(outer);
-
-    var noScrollbar = inner.offsetWidth;
-
-    style.overflow = "scroll";
-    var withScrollbar = inner.offsetWidth;
-
-    if (noScrollbar == withScrollbar) {
-        withScrollbar = outer.clientWidth;
-    }
-
-    body.removeChild(outer);
-
-    return noScrollbar-withScrollbar;
-};
-exports.setInnerHtml = function(el, innerHtml) {
-    var element = el.cloneNode(false);//document.createElement("div");
-    element.innerHTML = innerHtml;
-    el.parentNode.replaceChild(element, el);
-    return element;
-};
-
-if ("textContent" in document.documentElement) {
-    exports.setInnerText = function(el, innerText) {
-        el.textContent = innerText;
-    };
-
-    exports.getInnerText = function(el) {
-        return el.textContent;
-    };
-}
-else {
-    exports.setInnerText = function(el, innerText) {
-        el.innerText = innerText;
-    };
-
-    exports.getInnerText = function(el) {
-        return el.innerText;
-    };
-}
-
-exports.getParentWindow = function(document) {
-    return document.defaultView || document.parentWindow;
-};
-
-});
-
-define('ace/lib/event', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/useragent', 'ace/lib/dom'], function(require, exports, module) {
-
-
-var keys = require("./keys");
-var useragent = require("./useragent");
-var dom = require("./dom");
-
-exports.addListener = function(elem, type, callback) {
-    if (elem.addEventListener) {
-        return elem.addEventListener(type, callback, false);
-    }
-    if (elem.attachEvent) {
-        var wrapper = function() {
-            callback(window.event);
-        };
-        callback._wrapper = wrapper;
-        elem.attachEvent("on" + type, wrapper);
-    }
-};
-
-exports.removeListener = function(elem, type, callback) {
-    if (elem.removeEventListener) {
-        return elem.removeEventListener(type, callback, false);
-    }
-    if (elem.detachEvent) {
-        elem.detachEvent("on" + type, callback._wrapper || callback);
-    }
-};
-exports.stopEvent = function(e) {
-    exports.stopPropagation(e);
-    exports.preventDefault(e);
-    return false;
-};
-
-exports.stopPropagation = function(e) {
-    if (e.stopPropagation)
-        e.stopPropagation();
-    else
-        e.cancelBubble = true;
-};
-
-exports.preventDefault = function(e) {
-    if (e.preventDefault)
-        e.preventDefault();
-    else
-        e.returnValue = false;
-};
-exports.getButton = function(e) {
-    if (e.type == "dblclick")
-        return 0;
-    if (e.type == "contextmenu" || (e.ctrlKey && useragent.isMac))
-        return 2;
-    if (e.preventDefault) {
-        return e.button;
-    }
-    else {
-        return {1:0, 2:2, 4:1}[e.button];
-    }
-};
-
-if (document.documentElement.setCapture) {
-    exports.capture = function(el, eventHandler, releaseCaptureHandler) {
-        var called = false;
-        function onReleaseCapture(e) {
-            eventHandler(e);
-
-            if (!called) {
-                called = true;
-                releaseCaptureHandler(e);
-            }
-
-            exports.removeListener(el, "mousemove", eventHandler);
-            exports.removeListener(el, "mouseup", onReleaseCapture);
-            exports.removeListener(el, "losecapture", onReleaseCapture);
-
-            el.releaseCapture();
-        }
-
-        exports.addListener(el, "mousemove", eventHandler);
-        exports.addListener(el, "mouseup", onReleaseCapture);
-        exports.addListener(el, "losecapture", onReleaseCapture);
-        el.setCapture();
-    };
-}
-else {
-    exports.capture = function(el, eventHandler, releaseCaptureHandler) {
-        function onMouseUp(e) {
-            eventHandler && eventHandler(e);
-            releaseCaptureHandler && releaseCaptureHandler(e);
-
-            document.removeEventListener("mousemove", eventHandler, true);
-            document.removeEventListener("mouseup", onMouseUp, true);
-
-            e.stopPropagation();
-        }
-
-        document.addEventListener("mousemove", eventHandler, true);
-        document.addEventListener("mouseup", onMouseUp, true);
-    };
-}
-
-exports.addMouseWheelListener = function(el, callback) {
-    var factor = 8;
-    var listener = function(e) {
-        if (e.wheelDelta !== undefined) {
-            if (e.wheelDeltaX !== undefined) {
-                e.wheelX = -e.wheelDeltaX / factor;
-                e.wheelY = -e.wheelDeltaY / factor;
-            } else {
-                e.wheelX = 0;
-                e.wheelY = -e.wheelDelta / factor;
-            }
-        }
-        else {
-            if (e.axis && e.axis == e.HORIZONTAL_AXIS) {
-                e.wheelX = (e.detail || 0) * 5;
-                e.wheelY = 0;
-            } else {
-                e.wheelX = 0;
-                e.wheelY = (e.detail || 0) * 5;
-            }
-        }
-        callback(e);
-    };
-    exports.addListener(el, "DOMMouseScroll", listener);
-    exports.addListener(el, "mousewheel", listener);
-};
-
-exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbackName) {
-    var clicks = 0;
-    var startX, startY, timer;
-    var eventNames = {
-        2: "dblclick",
-        3: "tripleclick",
-        4: "quadclick"
-    };
-
-    exports.addListener(el, "mousedown", function(e) {
-        if (exports.getButton(e) != 0) {
-            clicks = 0;
-        } else {
-            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;
-
-            if (!timer || isNewClick)
-                clicks = 0;
-
-            clicks += 1;
-
-            if (timer)
-                clearTimeout(timer)
-            timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);
-        }
-        if (clicks == 1) {
-            startX = e.clientX;
-            startY = e.clientY;
-        }
-
-        eventHandler[callbackName]("mousedown", e);
-
-        if (clicks > 4)
-            clicks = 0;
-        else if (clicks > 1)
-            return eventHandler[callbackName](eventNames[clicks], e);
-    });
-
-    if (useragent.isOldIE) {
-        exports.addListener(el, "dblclick", function(e) {
-            clicks = 2;
-            if (timer)
-                clearTimeout(timer);
-            timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);
-            eventHandler[callbackName]("mousedown", e);
-            eventHandler[callbackName](eventNames[clicks], e);
-        });
-    }
-};
-
-function normalizeCommandKeys(callback, e, keyCode) {
-    var hashId = 0;
-    if ((useragent.isOpera && !("KeyboardEvent" in window)) && useragent.isMac) {
-        hashId = 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0)
-            | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);
-    } else {
-        hashId = 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0)
-            | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);
-    }
-
-    if (keyCode in keys.MODIFIER_KEYS) {
-        switch (keys.MODIFIER_KEYS[keyCode]) {
-            case "Alt":
-                hashId = 2;
-                break;
-            case "Shift":
-                hashId = 4;
-                break;
-            case "Ctrl":
-                hashId = 1;
-                break;
-            default:
-                hashId = 8;
-                break;
-        }
-        keyCode = 0;
-    }
-
-    if (!useragent.isMac && pressedKeys[91] || pressedKeys[92])
-        hashId |= 8;
-
-    if (hashId & 8 && (keyCode == 91 || keyCode == 93)) {
-        keyCode = 0;
-    }
-    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {
-        return false;
-    }
-    return callback(e, hashId, keyCode);
-}
-
-var pressedKeys = Object.create(null);
-exports.addCommandKeyListener = function(el, callback) {
-    var addListener = exports.addListener;
-    if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) {
-        var lastKeyDownKeyCode = null;
-        addListener(el, "keydown", function(e) {
-            lastKeyDownKeyCode = e.keyCode;
-        });
-        addListener(el, "keypress", function(e) {
-            return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);
-        });
-    } else {
-        var lastDefaultPrevented = null;
-
-        addListener(el, "keydown", function(e) {
-            pressedKeys[e.keyCode] = true;
-            var result = normalizeCommandKeys(callback, e, e.keyCode);
-            lastDefaultPrevented = e.defaultPrevented;
-            return result;
-        });
-
-        addListener(el, "keypress", function(e) {
-            if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {
-                exports.stopEvent(e);
-                lastDefaultPrevented = null;
-            }
-        });
-
-        addListener(el, "keyup", function(e) {
-            pressedKeys[e.keyCode] = null;
-        });
-
-        addListener(el, "focus", function(e) {
-            pressedKeys = Object.create(null);
-        });
-    }
-};
-
-if (window.postMessage && !useragent.isOldIE) {
-    var postMessageId = 1;
-    exports.nextTick = function(callback, win) {
-        win = win || window;
-        var messageName = "zero-timeout-message-" + postMessageId;
-        exports.addListener(win, "message", function listener(e) {
-            if (e.data == messageName) {
-                exports.stopPropagation(e);
-                exports.removeListener(win, "message", listener);
-                callback();
-            }
-        });
-        win.postMessage(messageName, "*");
-    };
-}
-
-
-exports.nextFrame = window.requestAnimationFrame ||
-    window.mozRequestAnimationFrame ||
-    window.webkitRequestAnimationFrame ||
-    window.msRequestAnimationFrame ||
-    window.oRequestAnimationFrame;
-
-if (exports.nextFrame)
-    exports.nextFrame = exports.nextFrame.bind(window);
-else
-    exports.nextFrame = function(callback) {
-        setTimeout(callback, 17);
-    };
-});
-
-define('ace/lib/keys', ['require', 'exports', 'module' , 'ace/lib/oop'], function(require, exports, module) {
-
-
-var oop = require("./oop");
-var Keys = (function() {
-    var ret = {
-        MODIFIER_KEYS: {
-            16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'
-        },
-
-        KEY_MODS: {
-            "ctrl": 1, "alt": 2, "option" : 2,
-            "shift": 4, "meta": 8, "command": 8, "cmd": 8
-        },
-
-        FUNCTION_KEYS : {
-            8  : "Backspace",
-            9  : "Tab",
-            13 : "Return",
-            19 : "Pause",
-            27 : "Esc",
-            32 : "Space",
-            33 : "PageUp",
-            34 : "PageDown",
-            35 : "End",
-            36 : "Home",
-            37 : "Left",
-            38 : "Up",
-            39 : "Right",
-            40 : "Down",
-            44 : "Print",
-            45 : "Insert",
-            46 : "Delete",
-            96 : "Numpad0",
-            97 : "Numpad1",
-            98 : "Numpad2",
-            99 : "Numpad3",
-            100: "Numpad4",
-            101: "Numpad5",
-            102: "Numpad6",
-            103: "Numpad7",
-            104: "Numpad8",
-            105: "Numpad9",
-            112: "F1",
-            113: "F2",
-            114: "F3",
-            115: "F4",
-            116: "F5",
-            117: "F6",
-            118: "F7",
-            119: "F8",
-            120: "F9",
-            121: "F10",
-            122: "F11",
-            123: "F12",
-            144: "Numlock",
-            145: "Scrolllock"
-        },
-
-        PRINTABLE_KEYS: {
-           32: ' ',  48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',
-           54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',
-           66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',
-           73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',
-           80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',
-           87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',
-          188: ',', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\',
-          221: ']', 222: '\''
-        }
-    };
-    for (var i in ret.FUNCTION_KEYS) {
-        var name = ret.FUNCTION_KEYS[i].toLowerCase();
-        ret[name] = parseInt(i, 10);
-    }
-    oop.mixin(ret, ret.MODIFIER_KEYS);
-    oop.mixin(ret, ret.PRINTABLE_KEYS);
-    oop.mixin(ret, ret.FUNCTION_KEYS);
-    ret.enter = ret["return"];
-    ret.escape = ret.esc;
-    ret.del = ret["delete"];
-    ret[173] = '-';
-
-    return ret;
-})();
-oop.mixin(exports, Keys);
-
-exports.keyCodeToString = function(keyCode) {
-    return (Keys[keyCode] || String.fromCharCode(keyCode)).toLowerCase();
-}
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/useragent', ['require', 'exports', 'module' ], function(require, exports, module) {
-exports.OS = {
-    LINUX: "LINUX",
-    MAC: "MAC",
-    WINDOWS: "WINDOWS"
-};
-exports.getOS = function() {
-    if (exports.isMac) {
-        return exports.OS.MAC;
-    } else if (exports.isLinux) {
-        return exports.OS.LINUX;
-    } else {
-        return exports.OS.WINDOWS;
-    }
-};
-if (typeof navigator != "object")
-    return;
-
-var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase();
-var ua = navigator.userAgent;
-exports.isWin = (os == "win");
-exports.isMac = (os == "mac");
-exports.isLinux = (os == "linux");
-exports.isIE = 
-    (navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0)
-    && parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]);
-    
-exports.isOldIE = exports.isIE && exports.isIE < 9;
-exports.isGecko = exports.isMozilla = window.controllers && window.navigator.product === "Gecko";
-exports.isOldGecko = exports.isGecko && parseInt((navigator.userAgent.match(/rv\:(\d+)/)||[])[1], 10) < 4;
-exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]";
-exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined;
-
-exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined;
-
-exports.isAIR = ua.indexOf("AdobeAIR") >= 0;
-
-exports.isIPad = ua.indexOf("iPad") >= 0;
-
-exports.isTouchPad = ua.indexOf("TouchPad") >= 0;
-
-});
-
-define('ace/editor', ['require', 'exports', 'module' , 'ace/lib/fixoldbrowsers', 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/lang', 'ace/lib/useragent', 'ace/keyboard/textinput', 'ace/mouse/mouse_handler', 'ace/mouse/fold_handler', 'ace/keyboard/keybinding', 'ace/edit_session', 'ace/search', 'ace/range', 'ace/lib/event_emitter', 'ace/commands/command_manager', 'ace/commands/default_commands', 'ace/config'], function(require, exports, module) {
-
-
-require("./lib/fixoldbrowsers");
-
-var oop = require("./lib/oop");
-var dom = require("./lib/dom");
-var lang = require("./lib/lang");
-var useragent = require("./lib/useragent");
-var TextInput = require("./keyboard/textinput").TextInput;
-var MouseHandler = require("./mouse/mouse_handler").MouseHandler;
-var FoldHandler = require("./mouse/fold_handler").FoldHandler;
-var KeyBinding = require("./keyboard/keybinding").KeyBinding;
-var EditSession = require("./edit_session").EditSession;
-var Search = require("./search").Search;
-var Range = require("./range").Range;
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var CommandManager = require("./commands/command_manager").CommandManager;
-var defaultCommands = require("./commands/default_commands").commands;
-var config = require("./config");
-var Editor = function(renderer, session) {
-    var container = renderer.getContainerElement();
-    this.container = container;
-    this.renderer = renderer;
-
-    this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands);
-    this.textInput  = new TextInput(renderer.getTextAreaContainer(), this);
-    this.renderer.textarea = this.textInput.getElement();
-    this.keyBinding = new KeyBinding(this);
-    this.$mouseHandler = new MouseHandler(this);
-    new FoldHandler(this);
-
-    this.$blockScrolling = 0;
-    this.$search = new Search().set({
-        wrap: true
-    });
-
-    this.setSession(session || new EditSession(""));
-    config.resetOptions(this);
-    config._emit("editor", this);
-};
-
-(function(){
-
-    oop.implement(this, EventEmitter);
-    this.setKeyboardHandler = function(keyboardHandler) {
-        if (!keyboardHandler) {
-            this.keyBinding.setKeyboardHandler(null);
-        } else if (typeof keyboardHandler == "string") {
-            this.$keybindingId = keyboardHandler;
-            var _self = this;
-            config.loadModule(["keybinding", keyboardHandler], function(module) {
-                if (_self.$keybindingId == keyboardHandler)
-                    _self.keyBinding.setKeyboardHandler(module && module.handler);
-            });
-        } else {
-            delete this.$keybindingId;
-            this.keyBinding.setKeyboardHandler(keyboardHandler);
-        }
-    };
-    this.getKeyboardHandler = function() {
-        return this.keyBinding.getKeyboardHandler();
-    };
-    this.setSession = function(session) {
-        if (this.session == session)
-            return;
-
-        if (this.session) {
-            var oldSession = this.session;
-            this.session.removeEventListener("change", this.$onDocumentChange);
-            this.session.removeEventListener("changeMode", this.$onChangeMode);
-            this.session.removeEventListener("tokenizerUpdate", this.$onTokenizerUpdate);
-            this.session.removeEventListener("changeTabSize", this.$onChangeTabSize);
-            this.session.removeEventListener("changeWrapLimit", this.$onChangeWrapLimit);
-            this.session.removeEventListener("changeWrapMode", this.$onChangeWrapMode);
-            this.session.removeEventListener("onChangeFold", this.$onChangeFold);
-            this.session.removeEventListener("changeFrontMarker", this.$onChangeFrontMarker);
-            this.session.removeEventListener("changeBackMarker", this.$onChangeBackMarker);
-            this.session.removeEventListener("changeBreakpoint", this.$onChangeBreakpoint);
-            this.session.removeEventListener("changeAnnotation", this.$onChangeAnnotation);
-            this.session.removeEventListener("changeOverwrite", this.$onCursorChange);
-            this.session.removeEventListener("changeScrollTop", this.$onScrollTopChange);
-            this.session.removeEventListener("changeScrollLeft", this.$onScrollLeftChange);
-
-            var selection = this.session.getSelection();
-            selection.removeEventListener("changeCursor", this.$onCursorChange);
-            selection.removeEventListener("changeSelection", this.$onSelectionChange);
-        }
-
-        this.session = session;
-
-        this.$onDocumentChange = this.onDocumentChange.bind(this);
-        session.addEventListener("change", this.$onDocumentChange);
-        this.renderer.setSession(session);
-
-        this.$onChangeMode = this.onChangeMode.bind(this);
-        session.addEventListener("changeMode", this.$onChangeMode);
-
-        this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);
-        session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate);
-
-        this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);
-        session.addEventListener("changeTabSize", this.$onChangeTabSize);
-
-        this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);
-        session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit);
-
-        this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);
-        session.addEventListener("changeWrapMode", this.$onChangeWrapMode);
-
-        this.$onChangeFold = this.onChangeFold.bind(this);
-        session.addEventListener("changeFold", this.$onChangeFold);
-
-        this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);
-        this.session.addEventListener("changeFrontMarker", this.$onChangeFrontMarker);
-
-        this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);
-        this.session.addEventListener("changeBackMarker", this.$onChangeBackMarker);
-
-        this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);
-        this.session.addEventListener("changeBreakpoint", this.$onChangeBreakpoint);
-
-        this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);
-        this.session.addEventListener("changeAnnotation", this.$onChangeAnnotation);
-
-        this.$onCursorChange = this.onCursorChange.bind(this);
-        this.session.addEventListener("changeOverwrite", this.$onCursorChange);
-
-        this.$onScrollTopChange = this.onScrollTopChange.bind(this);
-        this.session.addEventListener("changeScrollTop", this.$onScrollTopChange);
-
-        this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);
-        this.session.addEventListener("changeScrollLeft", this.$onScrollLeftChange);
-
-        this.selection = session.getSelection();
-        this.selection.addEventListener("changeCursor", this.$onCursorChange);
-
-        this.$onSelectionChange = this.onSelectionChange.bind(this);
-        this.selection.addEventListener("changeSelection", this.$onSelectionChange);
-
-        this.onChangeMode();
-
-        this.$blockScrolling += 1;
-        this.onCursorChange();
-        this.$blockScrolling -= 1;
-
-        this.onScrollTopChange();
-        this.onScrollLeftChange();
-        this.onSelectionChange();
-        this.onChangeFrontMarker();
-        this.onChangeBackMarker();
-        this.onChangeBreakpoint();
-        this.onChangeAnnotation();
-        this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();
-        this.renderer.updateFull();
-
-        this._emit("changeSession", {
-            session: session,
-            oldSession: oldSession
-        });
-    };
-    this.getSession = function() {
-        return this.session;
-    };
-    this.setValue = function(val, cursorPos) {
-        this.session.doc.setValue(val);
-
-        if (!cursorPos)
-            this.selectAll();
-        else if (cursorPos == 1)
-            this.navigateFileEnd();
-        else if (cursorPos == -1)
-            this.navigateFileStart();
-
-        return val;
-    };
-    this.getValue = function() {
-        return this.session.getValue();
-    };
-    this.getSelection = function() {
-        return this.selection;
-    };
-    this.resize = function(force) {
-        this.renderer.onResize(force);
-    };
-    this.setTheme = function(theme) {
-        this.renderer.setTheme(theme);
-    };
-    this.getTheme = function() {
-        return this.renderer.getTheme();
-    };
-    this.setStyle = function(style) {
-        this.renderer.setStyle(style);
-    };
-    this.unsetStyle = function(style) {
-        this.renderer.unsetStyle(style);
-    };
-    this.getFontSize = function () {
-        return this.getOption("fontSize") ||
-           dom.computedStyle(this.container, "fontSize");
-    };
-    this.setFontSize = function(size) {
-        this.setOption("fontSize", size);
-    };
-
-    this.$highlightBrackets = function() {
-        if (this.session.$bracketHighlight) {
-            this.session.removeMarker(this.session.$bracketHighlight);
-            this.session.$bracketHighlight = null;
-        }
-
-        if (this.$highlightPending) {
-            return;
-        }
-        var self = this;
-        this.$highlightPending = true;
-        setTimeout(function() {
-            self.$highlightPending = false;
-
-            var pos = self.session.findMatchingBracket(self.getCursorPosition());
-            if (pos) {
-                var range = new Range(pos.row, pos.column, pos.row, pos.column+1);
-            } else if (self.session.$mode.getMatching) {
-                var range = self.session.$mode.getMatching(self.session);
-            }
-            if (range)
-                self.session.$bracketHighlight = self.session.addMarker(range, "ace_bracket", "text");
-        }, 50);
-    };
-    this.focus = function() {
-        var _self = this;
-        setTimeout(function() {
-            _self.textInput.focus();
-        });
-        this.textInput.focus();
-    };
-    this.isFocused = function() {
-        return this.textInput.isFocused();
-    };
-    this.blur = function() {
-        this.textInput.blur();
-    };
-    this.onFocus = function() {
-        if (this.$isFocused)
-            return;
-        this.$isFocused = true;
-        this.renderer.showCursor();
-        this.renderer.visualizeFocus();
-        this._emit("focus");
-    };
-    this.onBlur = function() {
-        if (!this.$isFocused)
-            return;
-        this.$isFocused = false;
-        this.renderer.hideCursor();
-        this.renderer.visualizeBlur();
-        this._emit("blur");
-    };
-
-    this.$cursorChange = function() {
-        this.renderer.updateCursor();
-    };
-    this.onDocumentChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-        var lastRow;
-
-        if (range.start.row == range.end.row && delta.action != "insertLines" && delta.action != "removeLines")
-            lastRow = range.end.row;
-        else
-            lastRow = Infinity;
-        this.renderer.updateLines(range.start.row, lastRow);
-
-        this._emit("change", e);
-        this.$cursorChange();
-    };
-
-    this.onTokenizerUpdate = function(e) {
-        var rows = e.data;
-        this.renderer.updateLines(rows.first, rows.last);
-    };
-
-
-    this.onScrollTopChange = function() {
-        this.renderer.scrollToY(this.session.getScrollTop());
-    };
-
-    this.onScrollLeftChange = function() {
-        this.renderer.scrollToX(this.session.getScrollLeft());
-    };
-    this.onCursorChange = function() {
-        this.$cursorChange();
-
-        if (!this.$blockScrolling) {
-            this.renderer.scrollCursorIntoView();
-        }
-
-        this.$highlightBrackets();
-        this.$updateHighlightActiveLine();
-        this._emit("changeSelection");
-    };
-
-    this.$updateHighlightActiveLine = function() {
-        var session = this.getSession();
-
-        var highlight;
-        if (this.$highlightActiveLine) {
-            if ((this.$selectionStyle != "line" || !this.selection.isMultiLine()))
-                highlight = this.getCursorPosition();
-        }
-
-        if (session.$highlightLineMarker && !highlight) {
-            session.removeMarker(session.$highlightLineMarker.id);
-            session.$highlightLineMarker = null;
-        } else if (!session.$highlightLineMarker && highlight) {
-            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);
-            range.id = session.addMarker(range, "ace_active-line", "screenLine");
-            session.$highlightLineMarker = range;
-        } else if (highlight) {
-            session.$highlightLineMarker.start.row = highlight.row;
-            session.$highlightLineMarker.end.row = highlight.row;
-            session.$highlightLineMarker.start.column = highlight.column;
-            session._emit("changeBackMarker");
-        }
-    };
-
-    this.onSelectionChange = function(e) {
-        var session = this.session;
-
-        if (session.$selectionMarker) {
-            session.removeMarker(session.$selectionMarker);
-        }
-        session.$selectionMarker = null;
-
-        if (!this.selection.isEmpty()) {
-            var range = this.selection.getRange();
-            var style = this.getSelectionStyle();
-            session.$selectionMarker = session.addMarker(range, "ace_selection", style);
-        } else {
-            this.$updateHighlightActiveLine();
-        }
-
-        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp()
-        this.session.highlight(re);
-
-        this._emit("changeSelection");
-    };
-
-    this.$getSelectionHighLightRegexp = function() {
-        var session = this.session;
-
-        var selection = this.getSelectionRange();
-        if (selection.isEmpty() || selection.isMultiLine())
-            return;
-
-        var startOuter = selection.start.column - 1;
-        var endOuter = selection.end.column + 1;
-        var line = session.getLine(selection.start.row);
-        var lineCols = line.length;
-        var needle = line.substring(Math.max(startOuter, 0),
-                                    Math.min(endOuter, lineCols));
-        if ((startOuter >= 0 && /^[\w\d]/.test(needle)) ||
-            (endOuter <= lineCols && /[\w\d]$/.test(needle)))
-            return;
-
-        needle = line.substring(selection.start.column, selection.end.column);
-        if (!/^[\w\d]+$/.test(needle))
-            return;
-
-        var re = this.$search.$assembleRegExp({
-            wholeWord: true,
-            caseSensitive: true,
-            needle: needle
-        });
-
-        return re;
-    };
-
-
-    this.onChangeFrontMarker = function() {
-        this.renderer.updateFrontMarkers();
-    };
-
-    this.onChangeBackMarker = function() {
-        this.renderer.updateBackMarkers();
-    };
-
-
-    this.onChangeBreakpoint = function() {
-        this.renderer.updateBreakpoints();
-    };
-
-    this.onChangeAnnotation = function() {
-        this.renderer.setAnnotations(this.session.getAnnotations());
-    };
-
-
-    this.onChangeMode = function(e) {
-        this.renderer.updateText();
-        this._emit("changeMode", e);
-    };
-
-
-    this.onChangeWrapLimit = function() {
-        this.renderer.updateFull();
-    };
-
-    this.onChangeWrapMode = function() {
-        this.renderer.onResize(true);
-    };
-
-
-    this.onChangeFold = function() {
-        this.$updateHighlightActiveLine();
-        this.renderer.updateFull();
-    };
-
-    this.getCopyText = function() {
-        var text = "";
-        if (!this.selection.isEmpty())
-            text = this.session.getTextRange(this.getSelectionRange());
-
-        this._emit("copy", text);
-        return text;
-    };
-    this.onCopy = function() {
-        this.commands.exec("copy", this);
-    };
-    this.onCut = function() {
-        this.commands.exec("cut", this);
-    };
-    this.onPaste = function(text) {
-        if (this.$readOnly)
-            return;
-        this._emit("paste", text);
-        this.insert(text);
-    };
-
-
-    this.execCommand = function(command, args) {
-        this.commands.exec(command, this, args);
-    };
-    this.insert = function(text) {
-        var session = this.session;
-        var mode = session.getMode();
-        var cursor = this.getCursorPosition();
-
-        if (this.getBehavioursEnabled()) {
-            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);
-            if (transform)
-                text = transform.text;
-        }
-
-        text = text.replace("\t", this.session.getTabString());
-        if (!this.selection.isEmpty()) {
-            cursor = this.session.remove(this.getSelectionRange());
-            this.clearSelection();
-        }
-        else if (this.session.getOverwrite()) {
-            var range = new Range.fromPoints(cursor, cursor);
-            range.end.column += text.length;
-            this.session.remove(range);
-        }
-
-        this.clearSelection();
-
-        var start = cursor.column;
-        var lineState = session.getState(cursor.row);
-        var line = session.getLine(cursor.row);
-        var shouldOutdent = mode.checkOutdent(lineState, line, text);
-        var end = session.insert(cursor, text);
-
-        if (transform && transform.selection) {
-            if (transform.selection.length == 2) { // Transform relative to the current column
-                this.selection.setSelectionRange(
-                    new Range(cursor.row, start + transform.selection[0],
-                              cursor.row, start + transform.selection[1]));
-            } else { // Transform relative to the current row.
-                this.selection.setSelectionRange(
-                    new Range(cursor.row + transform.selection[0],
-                              transform.selection[1],
-                              cursor.row + transform.selection[2],
-                              transform.selection[3]));
-            }
-        }
-        if (session.getDocument().isNewLine(text)) {
-            var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());
-
-            this.moveCursorTo(cursor.row+1, 0);
-
-            var size = session.getTabSize();
-            var minIndent = Number.MAX_VALUE;
-
-            for (var row = cursor.row + 1; row <= end.row; ++row) {
-                var indent = 0;
-
-                line = session.getLine(row);
-                for (var i = 0; i < line.length; ++i)
-                    if (line.charAt(i) == '\t')
-                        indent += size;
-                    else if (line.charAt(i) == ' ')
-                        indent += 1;
-                    else
-                        break;
-                if (/[^\s]/.test(line))
-                    minIndent = Math.min(indent, minIndent);
-            }
-
-            for (var row = cursor.row + 1; row <= end.row; ++row) {
-                var outdent = minIndent;
-
-                line = session.getLine(row);
-                for (var i = 0; i < line.length && outdent > 0; ++i)
-                    if (line.charAt(i) == '\t')
-                        outdent -= size;
-                    else if (line.charAt(i) == ' ')
-                        outdent -= 1;
-                session.remove(new Range(row, 0, row, i));
-            }
-            session.indentRows(cursor.row + 1, end.row, lineIndent);
-        }
-        if (shouldOutdent)
-            mode.autoOutdent(lineState, session, cursor.row);
-    };
-
-    this.onTextInput = function(text) {
-        this.keyBinding.onTextInput(text);
-    };
-
-    this.onCommandKey = function(e, hashId, keyCode) {
-        this.keyBinding.onCommandKey(e, hashId, keyCode);
-    };
-    this.setOverwrite = function(overwrite) {
-        this.session.setOverwrite(overwrite);
-    };
-    this.getOverwrite = function() {
-        return this.session.getOverwrite();
-    };
-    this.toggleOverwrite = function() {
-        this.session.toggleOverwrite();
-    };
-    this.setScrollSpeed = function(speed) {
-        this.setOption("scrollSpeed", speed);
-    };
-    this.getScrollSpeed = function() {
-        return this.getOption("scrollSpeed");
-    };
-    this.setDragDelay = function(dragDelay) {
-        this.setOption("dragDelay", dragDelay);
-    };
-    this.getDragDelay = function() {
-        return this.getOption("dragDelay");
-    };
-    this.setSelectionStyle = function(val) {
-        this.setOption("selectionStyle", val);
-    };
-    this.getSelectionStyle = function() {
-        return this.getOption("selectionStyle");
-    };
-    this.setHighlightActiveLine = function(shouldHighlight) {
-        this.setOption("highlightActiveLine", shouldHighlight);
-    };
-    this.getHighlightActiveLine = function() {
-        return this.getOption("highlightActiveLine");
-    };
-    this.setHighlightGutterLine = function(shouldHighlight) {
-        this.setOption("highlightGutterLine", shouldHighlight);
-    };
-
-    this.getHighlightGutterLine = function() {
-        return this.getOption("highlightGutterLine");
-    };
-    this.setHighlightSelectedWord = function(shouldHighlight) {
-        this.setOption("highlightSelectedWord", shouldHighlight);
-    };
-    this.getHighlightSelectedWord = function() {
-        return this.$highlightSelectedWord;
-    };
-
-    this.setAnimatedScroll = function(shouldAnimate){
-        this.renderer.setAnimatedScroll(shouldAnimate);
-    };
-
-    this.getAnimatedScroll = function(){
-        return this.renderer.getAnimatedScroll();
-    };
-    this.setShowInvisibles = function(showInvisibles) {
-        this.renderer.setShowInvisibles(showInvisibles);
-    };
-    this.getShowInvisibles = function() {
-        return this.renderer.getShowInvisibles();
-    };
-
-    this.setDisplayIndentGuides = function(display) {
-        this.renderer.setDisplayIndentGuides(display);
-    };
-
-    this.getDisplayIndentGuides = function() {
-        return this.renderer.getDisplayIndentGuides();
-    };
-    this.setShowPrintMargin = function(showPrintMargin) {
-        this.renderer.setShowPrintMargin(showPrintMargin);
-    };
-    this.getShowPrintMargin = function() {
-        return this.renderer.getShowPrintMargin();
-    };
-    this.setPrintMarginColumn = function(showPrintMargin) {
-        this.renderer.setPrintMarginColumn(showPrintMargin);
-    };
-    this.getPrintMarginColumn = function() {
-        return this.renderer.getPrintMarginColumn();
-    };
-    this.setReadOnly = function(readOnly) {
-        this.setOption("readOnly", readOnly);
-    };
-    this.getReadOnly = function() {
-        return this.getOption("readOnly");
-    };
-    this.setBehavioursEnabled = function (enabled) {
-        this.setOption("behavioursEnabled", enabled);
-    };
-    this.getBehavioursEnabled = function () {
-        return this.getOption("behavioursEnabled");
-    };
-    this.setWrapBehavioursEnabled = function (enabled) {
-        this.setOption("wrapBehavioursEnabled", enabled);
-    };
-    this.getWrapBehavioursEnabled = function () {
-        return this.getOption("wrapBehavioursEnabled");
-    };
-    this.setShowFoldWidgets = function(show) {
-        this.setOption("showFoldWidgets", show);
-
-    };
-    this.getShowFoldWidgets = function() {
-        return this.getOption("showFoldWidgets");
-    };
-
-    this.setFadeFoldWidgets = function(fade) {
-        this.setOption("fadeFoldWidgets", fade);
-    };
-
-    this.getFadeFoldWidgets = function() {
-        return this.getOption("fadeFoldWidgets");
-    };
-    this.remove = function(dir) {
-        if (this.selection.isEmpty()){
-            if (dir == "left")
-                this.selection.selectLeft();
-            else
-                this.selection.selectRight();
-        }
-
-        var range = this.getSelectionRange();
-        if (this.getBehavioursEnabled()) {
-            var session = this.session;
-            var state = session.getState(range.start.row);
-            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);
-            if (new_range)
-                range = new_range;
-        }
-
-        this.session.remove(range);
-        this.clearSelection();
-    };
-    this.removeWordRight = function() {
-        if (this.selection.isEmpty())
-            this.selection.selectWordRight();
-
-        this.session.remove(this.getSelectionRange());
-        this.clearSelection();
-    };
-    this.removeWordLeft = function() {
-        if (this.selection.isEmpty())
-            this.selection.selectWordLeft();
-
-        this.session.remove(this.getSelectionRange());
-        this.clearSelection();
-    };
-    this.removeToLineStart = function() {
-        if (this.selection.isEmpty())
-            this.selection.selectLineStart();
-
-        this.session.remove(this.getSelectionRange());
-        this.clearSelection();
-    };
-    this.removeToLineEnd = function() {
-        if (this.selection.isEmpty())
-            this.selection.selectLineEnd();
-
-        var range = this.getSelectionRange();
-        if (range.start.column == range.end.column && range.start.row == range.end.row) {
-            range.end.column = 0;
-            range.end.row++;
-        }
-
-        this.session.remove(range);
-        this.clearSelection();
-    };
-    this.splitLine = function() {
-        if (!this.selection.isEmpty()) {
-            this.session.remove(this.getSelectionRange());
-            this.clearSelection();
-        }
-
-        var cursor = this.getCursorPosition();
-        this.insert("\n");
-        this.moveCursorToPosition(cursor);
-    };
-    this.transposeLetters = function() {
-        if (!this.selection.isEmpty()) {
-            return;
-        }
-
-        var cursor = this.getCursorPosition();
-        var column = cursor.column;
-        if (column === 0)
-            return;
-
-        var line = this.session.getLine(cursor.row);
-        var swap, range;
-        if (column < line.length) {
-            swap = line.charAt(column) + line.charAt(column-1);
-            range = new Range(cursor.row, column-1, cursor.row, column+1);
-        }
-        else {
-            swap = line.charAt(column-1) + line.charAt(column-2);
-            range = new Range(cursor.row, column-2, cursor.row, column);
-        }
-        this.session.replace(range, swap);
-    };
-    this.toLowerCase = function() {
-        var originalRange = this.getSelectionRange();
-        if (this.selection.isEmpty()) {
-            this.selection.selectWord();
-        }
-
-        var range = this.getSelectionRange();
-        var text = this.session.getTextRange(range);
-        this.session.replace(range, text.toLowerCase());
-        this.selection.setSelectionRange(originalRange);
-    };
-    this.toUpperCase = function() {
-        var originalRange = this.getSelectionRange();
-        if (this.selection.isEmpty()) {
-            this.selection.selectWord();
-        }
-
-        var range = this.getSelectionRange();
-        var text = this.session.getTextRange(range);
-        this.session.replace(range, text.toUpperCase());
-        this.selection.setSelectionRange(originalRange);
-    };
-    this.indent = function() {
-        var session = this.session;
-        var range = this.getSelectionRange();
-
-        if (range.start.row < range.end.row || range.start.column < range.end.column) {
-            var rows = this.$getSelectedRows();
-            session.indentRows(rows.first, rows.last, "\t");
-        } else {
-            var indentString;
-
-            if (this.session.getUseSoftTabs()) {
-                var size        = session.getTabSize(),
-                    position    = this.getCursorPosition(),
-                    column      = session.documentToScreenColumn(position.row, position.column),
-                    count       = (size - column % size);
-
-                indentString = lang.stringRepeat(" ", count);
-            } else
-                indentString = "\t";
-            return this.insert(indentString);
-        }
-    };
-    this.blockIndent = function() {
-        var rows = this.$getSelectedRows();
-        this.session.indentRows(rows.first, rows.last, "\t");
-    };
-    this.blockOutdent = function() {
-        var selection = this.session.getSelection();
-        this.session.outdentRows(selection.getRange());
-    };
-    this.sortLines = function() {
-        var rows = this.$getSelectedRows();
-        var session = this.session;
-
-        var lines = [];
-        for (i = rows.first; i <= rows.last; i++)
-            lines.push(session.getLine(i));
-
-        lines.sort(function(a, b) {
-            if (a.toLowerCase() < b.toLowerCase()) return -1;
-            if (a.toLowerCase() > b.toLowerCase()) return 1;
-            return 0;
-        });
-
-        var deleteRange = new Range(0, 0, 0, 0);
-        for (var i = rows.first; i <= rows.last; i++) {
-            var line = session.getLine(i);
-            deleteRange.start.row = i;
-            deleteRange.end.row = i;
-            deleteRange.end.column = line.length;
-            session.replace(deleteRange, lines[i-rows.first]);
-        }
-    };
-    this.toggleCommentLines = function() {
-        var state = this.session.getState(this.getCursorPosition().row);
-        var rows = this.$getSelectedRows();
-        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);
-    };
-
-    this.toggleBlockComment = function() {
-        var cursor = this.getCursorPosition();
-        var state = this.session.getState(cursor.row);
-        var range = this.getSelectionRange();
-        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);
-    };
-    this.getNumberAt = function( row, column ) {
-        var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g
-        _numberRx.lastIndex = 0
-
-        var s = this.session.getLine(row)
-        while (_numberRx.lastIndex < column) {
-            var m = _numberRx.exec(s)
-            if(m.index <= column && m.index+m[0].length >= column){
-                var number = {
-                    value: m[0],
-                    start: m.index,
-                    end: m.index+m[0].length
-                }
-                return number;
-            }
-        }
-        return null;
-    };
-    this.modifyNumber = function(amount) {
-        var row = this.selection.getCursor().row;
-        var column = this.selection.getCursor().column;
-        var charRange = new Range(row, column-1, row, column);
-
-        var c = this.session.getTextRange(charRange);
-        if (!isNaN(parseFloat(c)) && isFinite(c)) {
-            var nr = this.getNumberAt(row, column);
-            if (nr) {
-                var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end;
-                var decimals = nr.start + nr.value.length - fp;
-
-                var t = parseFloat(nr.value);
-                t *= Math.pow(10, decimals);
-
-
-                if(fp !== nr.end && column < fp){
-                    amount *= Math.pow(10, nr.end - column - 1);
-                } else {
-                    amount *= Math.pow(10, nr.end - column);
-                }
-
-                t += amount;
-                t /= Math.pow(10, decimals);
-                var nnr = t.toFixed(decimals);
-                var replaceRange = new Range(row, nr.start, row, nr.end);
-                this.session.replace(replaceRange, nnr);
-                this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));
-
-            }
-        }
-    };
-    this.removeLines = function() {
-        var rows = this.$getSelectedRows();
-        var range;
-        if (rows.first === 0 || rows.last+1 < this.session.getLength())
-            range = new Range(rows.first, 0, rows.last+1, 0);
-        else
-            range = new Range(
-                rows.first-1, this.session.getLine(rows.first-1).length,
-                rows.last, this.session.getLine(rows.last).length
-            );
-        this.session.remove(range);
-        this.clearSelection();
-    };
-
-    this.duplicateSelection = function() {
-        var sel = this.selection;
-        var doc = this.session;
-        var range = sel.getRange();
-        var reverse = sel.isBackwards();
-        if (range.isEmpty()) {
-            var row = range.start.row;
-            doc.duplicateLines(row, row);
-        } else {
-            var point = reverse ? range.start : range.end;
-            var endPoint = doc.insert(point, doc.getTextRange(range), false);
-            range.start = point;
-            range.end = endPoint;
-
-            sel.setSelectionRange(range, reverse)
-        }
-    };
-    this.moveLinesDown = function() {
-        this.$moveLines(function(firstRow, lastRow) {
-            return this.session.moveLinesDown(firstRow, lastRow);
-        });
-    };
-    this.moveLinesUp = function() {
-        this.$moveLines(function(firstRow, lastRow) {
-            return this.session.moveLinesUp(firstRow, lastRow);
-        });
-    };
-    this.moveText = function(range, toPosition) {
-        return this.session.moveText(range, toPosition);
-    };
-    this.copyLinesUp = function() {
-        this.$moveLines(function(firstRow, lastRow) {
-            this.session.duplicateLines(firstRow, lastRow);
-            return 0;
-        });
-    };
-    this.copyLinesDown = function() {
-        this.$moveLines(function(firstRow, lastRow) {
-            return this.session.duplicateLines(firstRow, lastRow);
-        });
-    };
-    this.$moveLines = function(mover) {
-        var selection = this.selection;
-        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {
-            var range = selection.toOrientedRange();
-            var rows = this.$getSelectedRows(range);
-            var linesMoved = mover.call(this, rows.first, rows.last);
-            range.moveBy(linesMoved, 0);
-            selection.fromOrientedRange(range);
-        } else {
-            var ranges = selection.rangeList.ranges;
-            selection.rangeList.detach(this.session);
-
-            for (var i = ranges.length; i--; ) {
-                var rangeIndex = i;
-                var rows = ranges[i].collapseRows();
-                var last = rows.end.row;
-                var first = rows.start.row;
-                while (i--) {
-                    var rows = ranges[i].collapseRows();
-                    if (first - rows.end.row <= 1)
-                        first = rows.end.row;
-                    else
-                        break;
-                }
-                i++;
-
-                var linesMoved = mover.call(this, first, last);
-                while (rangeIndex >= i) {
-                    ranges[rangeIndex].moveBy(linesMoved, 0);
-                    rangeIndex--;
-                }
-            }
-            selection.fromOrientedRange(selection.ranges[0]);
-            selection.rangeList.attach(this.session);
-        }
-    };
-    this.$getSelectedRows = function() {
-        var range = this.getSelectionRange().collapseRows();
-
-        return {
-            first: range.start.row,
-            last: range.end.row
-        };
-    };
-
-    this.onCompositionStart = function(text) {
-        this.renderer.showComposition(this.getCursorPosition());
-    };
-
-    this.onCompositionUpdate = function(text) {
-        this.renderer.setCompositionText(text);
-    };
-
-    this.onCompositionEnd = function() {
-        this.renderer.hideComposition();
-    };
-    this.getFirstVisibleRow = function() {
-        return this.renderer.getFirstVisibleRow();
-    };
-    this.getLastVisibleRow = function() {
-        return this.renderer.getLastVisibleRow();
-    };
-    this.isRowVisible = function(row) {
-        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());
-    };
-    this.isRowFullyVisible = function(row) {
-        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());
-    };
-    this.$getVisibleRowCount = function() {
-        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;
-    };
-
-    this.$moveByPage = function(dir, select) {
-        var renderer = this.renderer;
-        var config = this.renderer.layerConfig;
-        var rows = dir * Math.floor(config.height / config.lineHeight);
-
-        this.$blockScrolling++;
-        if (select == true) {
-            this.selection.$moveSelection(function(){
-                this.moveCursorBy(rows, 0);
-            });
-        } else if (select == false) {
-            this.selection.moveCursorBy(rows, 0);
-            this.selection.clearSelection();
-        }
-        this.$blockScrolling--;
-
-        var scrollTop = renderer.scrollTop;
-
-        renderer.scrollBy(0, rows * config.lineHeight);
-        if (select != null)
-            renderer.scrollCursorIntoView(null, 0.5);
-
-        renderer.animateScrolling(scrollTop);
-    };
-    this.selectPageDown = function() {
-        this.$moveByPage(1, true);
-    };
-    this.selectPageUp = function() {
-        this.$moveByPage(-1, true);
-    };
-    this.gotoPageDown = function() {
-       this.$moveByPage(1, false);
-    };
-    this.gotoPageUp = function() {
-        this.$moveByPage(-1, false);
-    };
-    this.scrollPageDown = function() {
-        this.$moveByPage(1);
-    };
-    this.scrollPageUp = function() {
-        this.$moveByPage(-1);
-    };
-    this.scrollToRow = function(row) {
-        this.renderer.scrollToRow(row);
-    };
-    this.scrollToLine = function(line, center, animate, callback) {
-        this.renderer.scrollToLine(line, center, animate, callback);
-    };
-    this.centerSelection = function() {
-        var range = this.getSelectionRange();
-        var pos = {
-            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),
-            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)
-        }
-        this.renderer.alignCursor(pos, 0.5);
-    };
-    this.getCursorPosition = function() {
-        return this.selection.getCursor();
-    };
-    this.getCursorPositionScreen = function() {
-        return this.session.documentToScreenPosition(this.getCursorPosition());
-    };
-    this.getSelectionRange = function() {
-        return this.selection.getRange();
-    };
-    this.selectAll = function() {
-        this.$blockScrolling += 1;
-        this.selection.selectAll();
-        this.$blockScrolling -= 1;
-    };
-    this.clearSelection = function() {
-        this.selection.clearSelection();
-    };
-    this.moveCursorTo = function(row, column) {
-        this.selection.moveCursorTo(row, column);
-    };
-    this.moveCursorToPosition = function(pos) {
-        this.selection.moveCursorToPosition(pos);
-    };
-    this.jumpToMatching = function(select) {
-        var cursor = this.getCursorPosition();
-
-        var range = this.session.getBracketRange(cursor);
-        if (!range) {
-            range = this.find({
-                needle: /[{}()\[\]]/g,
-                preventScroll:true,
-                start: {row: cursor.row, column: cursor.column - 1}
-            });
-            if (!range)
-                return;
-            var pos = range.start;
-            if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)
-                range = this.session.getBracketRange(pos);
-        }
-
-        pos = range && range.cursor || pos;
-        if (pos) {
-            if (select) {
-                if (range && range.isEqual(this.getSelectionRange()))
-                    this.clearSelection();
-                else
-                    this.selection.selectTo(pos.row, pos.column);
-            } else {
-                this.clearSelection();
-                this.moveCursorTo(pos.row, pos.column);
-            }
-        }
-    };
-    this.gotoLine = function(lineNumber, column, animate) {
-        this.selection.clearSelection();
-        this.session.unfold({row: lineNumber - 1, column: column || 0});
-
-        this.$blockScrolling += 1;
-        this.exitMultiSelectMode && this.exitMultiSelectMode();
-        this.moveCursorTo(lineNumber - 1, column || 0);
-        this.$blockScrolling -= 1;
-
-        if (!this.isRowFullyVisible(lineNumber - 1))
-            this.scrollToLine(lineNumber - 1, true, animate);
-    };
-    this.navigateTo = function(row, column) {
-        this.clearSelection();
-        this.moveCursorTo(row, column);
-    };
-    this.navigateUp = function(times) {
-        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {
-            var selectionStart = this.selection.anchor.getPosition();
-            return this.moveCursorToPosition(selectionStart);
-        }
-        this.selection.clearSelection();
-        times = times || 1;
-        this.selection.moveCursorBy(-times, 0);
-    };
-    this.navigateDown = function(times) {
-        if (this.selection.isMultiLine() && this.selection.isBackwards()) {
-            var selectionEnd = this.selection.anchor.getPosition();
-            return this.moveCursorToPosition(selectionEnd);
-        }
-        this.selection.clearSelection();
-        times = times || 1;
-        this.selection.moveCursorBy(times, 0);
-    };
-    this.navigateLeft = function(times) {
-        if (!this.selection.isEmpty()) {
-            var selectionStart = this.getSelectionRange().start;
-            this.moveCursorToPosition(selectionStart);
-        }
-        else {
-            times = times || 1;
-            while (times--) {
-                this.selection.moveCursorLeft();
-            }
-        }
-        this.clearSelection();
-    };
-    this.navigateRight = function(times) {
-        if (!this.selection.isEmpty()) {
-            var selectionEnd = this.getSelectionRange().end;
-            this.moveCursorToPosition(selectionEnd);
-        }
-        else {
-            times = times || 1;
-            while (times--) {
-                this.selection.moveCursorRight();
-            }
-        }
-        this.clearSelection();
-    };
-    this.navigateLineStart = function() {
-        this.selection.moveCursorLineStart();
-        this.clearSelection();
-    };
-    this.navigateLineEnd = function() {
-        this.selection.moveCursorLineEnd();
-        this.clearSelection();
-    };
-    this.navigateFileEnd = function() {
-        var scrollTop = this.renderer.scrollTop;
-        this.selection.moveCursorFileEnd();
-        this.clearSelection();
-        this.renderer.animateScrolling(scrollTop);
-    };
-    this.navigateFileStart = function() {
-        var scrollTop = this.renderer.scrollTop;
-        this.selection.moveCursorFileStart();
-        this.clearSelection();
-        this.renderer.animateScrolling(scrollTop);
-    };
-    this.navigateWordRight = function() {
-        this.selection.moveCursorWordRight();
-        this.clearSelection();
-    };
-    this.navigateWordLeft = function() {
-        this.selection.moveCursorWordLeft();
-        this.clearSelection();
-    };
-    this.replace = function(replacement, options) {
-        if (options)
-            this.$search.set(options);
-
-        var range = this.$search.find(this.session);
-        var replaced = 0;
-        if (!range)
-            return replaced;
-
-        if (this.$tryReplace(range, replacement)) {
-            replaced = 1;
-        }
-        if (range !== null) {
-            this.selection.setSelectionRange(range);
-            this.renderer.scrollSelectionIntoView(range.start, range.end);
-        }
-
-        return replaced;
-    };
-    this.replaceAll = function(replacement, options) {
-        if (options) {
-            this.$search.set(options);
-        }
-
-        var ranges = this.$search.findAll(this.session);
-        var replaced = 0;
-        if (!ranges.length)
-            return replaced;
-
-        this.$blockScrolling += 1;
-
-        var selection = this.getSelectionRange();
-        this.clearSelection();
-        this.selection.moveCursorTo(0, 0);
-
-        for (var i = ranges.length - 1; i >= 0; --i) {
-            if(this.$tryReplace(ranges[i], replacement)) {
-                replaced++;
-            }
-        }
-
-        this.selection.setSelectionRange(selection);
-        this.$blockScrolling -= 1;
-
-        return replaced;
-    };
-
-    this.$tryReplace = function(range, replacement) {
-        var input = this.session.getTextRange(range);
-        replacement = this.$search.replace(input, replacement);
-        if (replacement !== null) {
-            range.end = this.session.replace(range, replacement);
-            return range;
-        } else {
-            return null;
-        }
-    };
-    this.getLastSearchOptions = function() {
-        return this.$search.getOptions();
-    };
-    this.find = function(needle, options, animate) {
-        if (!options)
-            options = {};
-
-        if (typeof needle == "string" || needle instanceof RegExp)
-            options.needle = needle;
-        else if (typeof needle == "object")
-            oop.mixin(options, needle);
-
-        var range = this.selection.getRange();
-        if (options.needle == null) {
-            needle = this.session.getTextRange(range)
-                || this.$search.$options.needle;
-            if (!needle) {
-                range = this.session.getWordRange(range.start.row, range.start.column);
-                needle = this.session.getTextRange(range);
-            }
-            this.$search.set({needle: needle});
-        }
-
-        this.$search.set(options);
-        if (!options.start)
-            this.$search.set({start: range});
-
-        var newRange = this.$search.find(this.session);
-        if (options.preventScroll)
-            return newRange;
-        if (newRange) {
-            this.revealRange(newRange, animate);
-            return newRange;
-        }
-        if (options.backwards)
-            range.start = range.end;
-        else
-            range.end = range.start;
-        this.selection.setRange(range);
-    };
-    this.findNext = function(options, animate) {
-        this.find({skipCurrent: true, backwards: false}, options, animate);
-    };
-    this.findPrevious = function(options, animate) {
-        this.find(options, {skipCurrent: true, backwards: true}, animate);
-    };
-
-    this.revealRange = function(range, animate) {
-        this.$blockScrolling += 1;
-        this.session.unfold(range);
-        this.selection.setSelectionRange(range);
-        this.$blockScrolling -= 1;
-
-        var scrollTop = this.renderer.scrollTop;
-        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);
-        if (animate != false)
-            this.renderer.animateScrolling(scrollTop);
-    };
-    this.undo = function() {
-        this.$blockScrolling++;
-        this.session.getUndoManager().undo();
-        this.$blockScrolling--;
-        this.renderer.scrollCursorIntoView(null, 0.5);
-    };
-    this.redo = function() {
-        this.$blockScrolling++;
-        this.session.getUndoManager().redo();
-        this.$blockScrolling--;
-        this.renderer.scrollCursorIntoView(null, 0.5);
-    };
-    this.destroy = function() {
-        this.renderer.destroy();
-        this._emit("destroy", this);
-    };
-    this.setAutoScrollEditorIntoView = function(enable) {
-        if (enable === false)
-            return;
-        var rect;
-        var self = this;
-        var shouldScroll = false;
-        if (!this.$scrollAnchor)
-            this.$scrollAnchor = document.createElement("div");
-        var scrollAnchor = this.$scrollAnchor;
-        scrollAnchor.style.cssText = "position:absolute";
-        this.container.insertBefore(scrollAnchor, this.container.firstChild);
-        var onChangeSelection = this.on("changeSelection", function() {
-            shouldScroll = true;
-        });
-        var onBeforeRender = this.renderer.on("beforeRender", function() {
-            if (shouldScroll)
-                rect = self.renderer.container.getBoundingClientRect();
-        });
-        var onAfterRender = this.renderer.on("afterRender", function() {
-            if (shouldScroll && rect && self.isFocused()) {
-                var renderer = self.renderer;
-                var pos = renderer.$cursorLayer.$pixelPos;
-                var config = renderer.layerConfig;
-                var top = pos.top - config.offset;
-                if (pos.top >= 0 && top + rect.top < 0) {
-                    shouldScroll = true;
-                } else if (pos.top < config.height &&
-                    pos.top + rect.top + config.lineHeight > window.innerHeight) {
-                    shouldScroll = false;
-                } else {
-                    shouldScroll = null;
-                }
-                if (shouldScroll != null) {
-                    scrollAnchor.style.top = top + "px";
-                    scrollAnchor.style.left = pos.left + "px";
-                    scrollAnchor.style.height = config.lineHeight + "px";
-                    scrollAnchor.scrollIntoView(shouldScroll);
-                }
-                shouldScroll = rect = null;
-            }
-        });
-        this.setAutoScrollEditorIntoView = function(enable) {
-            if (enable === true)
-                return;
-            delete this.setAutoScrollEditorIntoView;
-            this.removeEventListener("changeSelection", onChangeSelection);
-            this.renderer.removeEventListener("afterRender", onAfterRender);
-            this.renderer.removeEventListener("beforeRender", onBeforeRender);
-        };
-    };
-
-
-    this.$resetCursorStyle = function() {
-        var style = this.$cursorStyle || "ace";
-        var cursorLayer = this.renderer.$cursorLayer;
-        if (!cursorLayer)
-            return;
-        cursorLayer.setSmoothBlinking(style == "smooth");
-        cursorLayer.isBlinking = !this.$readOnly && style != "wide";
-    };
-
-}).call(Editor.prototype);
-
-
-
-config.defineOptions(Editor.prototype, "editor", {
-    selectionStyle: {
-        set: function(style) {
-            this.onSelectionChange();
-            this._emit("changeSelectionStyle", {data: style});
-        },
-        initialValue: "line"
-    },
-    highlightActiveLine: {
-        set: function() {this.$updateHighlightActiveLine();},
-        initialValue: true
-    },
-    highlightSelectedWord: {
-        set: function(shouldHighlight) {this.$onSelectionChange();},
-        initialValue: true
-    },
-    readOnly: {
-        set: function(readOnly) { this.$resetCursorStyle(); },
-        initialValue: false
-    },
-    cursorStyle: {
-        set: function(val) { this.$resetCursorStyle(); },
-        values: ["ace", "slim", "smooth", "wide"],
-        initialValue: "ace"
-    },
-    behavioursEnabled: {initialValue: true},
-    wrapBehavioursEnabled: {initialValue: true},
-
-    hScrollBarAlwaysVisible: "renderer",
-    highlightGutterLine: "renderer",
-    animatedScroll: "renderer",
-    showInvisibles: "renderer",
-    showPrintMargin: "renderer",
-    printMarginColumn: "renderer",
-    printMargin: "renderer",
-    fadeFoldWidgets: "renderer",
-    showFoldWidgets: "renderer",
-    showGutter: "renderer",
-    displayIndentGuides: "renderer",
-    fontSize: "renderer",
-    fontFamily: "renderer",
-
-    scrollSpeed: "$mouseHandler",
-    dragDelay: "$mouseHandler",
-    focusTimout: "$mouseHandler",
-
-    firstLineNumber: "session",
-    overwrite: "session",
-    newLineMode: "session",
-    useWorker: "session",
-    useSoftTabs: "session",
-    tabSize: "session",
-    wrap: "session",
-    foldStyle: "session"
-});
-
-exports.Editor = Editor;
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
-
-define('ace/keyboard/textinput', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/useragent', 'ace/lib/dom', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var event = require("../lib/event");
-var useragent = require("../lib/useragent");
-var dom = require("../lib/dom");
-var lang = require("../lib/lang");
-var BROKEN_SETDATA = useragent.isChrome < 18;
-
-var TextInput = function(parentNode, host) {
-    var text = dom.createElement("textarea");
-    text.className = "ace_text-input";
-    if (useragent.isTouchPad)
-        text.setAttribute("x-palm-disable-auto-cap", true);
-
-    text.wrap = "off";
-    text.autocorrect = "off";
-    text.autocapitalize = "off";
-    text.spellcheck = false;
-
-    text.style.bottom = "2000em";
-    parentNode.insertBefore(text, parentNode.firstChild);
-
-    var PLACEHOLDER = "\x01\x01";
-
-    var cut = false;
-    var copied = false;
-    var pasted = false;
-    var inComposition = false;
-    var tempStyle = '';
-    var isSelectionEmpty = true;
-    try { var isFocused = document.activeElement === text; } catch(e) {}
-    
-    event.addListener(text, "blur", function() {
-        host.onBlur();
-        isFocused = false;
-    });
-    event.addListener(text, "focus", function() {
-        isFocused = true;
-        host.onFocus();
-        resetSelection();
-    });
-    this.focus = function() { text.focus(); };
-    this.blur = function() { text.blur(); };
-    this.isFocused = function() {
-        return isFocused;
-    };
-    var syncSelection = lang.delayedCall(function() {
-        isFocused && resetSelection(isSelectionEmpty);
-    });
-    var syncValue = lang.delayedCall(function() {
-         if (!inComposition) {
-            text.value = PLACEHOLDER;
-            isFocused && resetSelection();
-         }
-    });
-
-    function resetSelection(isEmpty) {
-        if (inComposition)
-            return;
-        if (inputHandler) {
-            selectionStart = 0;
-            selectionEnd = isEmpty ? 0 : text.value.length - 1;
-        } else {
-            var selectionStart = isEmpty ? 2 : 1;
-            var selectionEnd = 2;
-        }
-        try {
-            text.setSelectionRange(selectionStart, selectionEnd);
-        } catch(e){}
-    }
-
-    function resetValue() {
-        if (inComposition)
-            return;
-        text.value = PLACEHOLDER;
-        if (useragent.isWebKit)
-            syncValue.schedule();
-    }
-
-    useragent.isWebKit || host.addEventListener('changeSelection', function() {
-        if (host.selection.isEmpty() != isSelectionEmpty) {
-            isSelectionEmpty = !isSelectionEmpty;
-            syncSelection.schedule();
-        }
-    });
-
-    resetValue();
-    if (isFocused)
-        host.onFocus();
-
-
-    var isAllSelected = function(text) {
-        return text.selectionStart === 0 && text.selectionEnd === text.value.length;
-    };
-    if (!text.setSelectionRange && text.createTextRange) {
-        text.setSelectionRange = function(selectionStart, selectionEnd) {
-            var range = this.createTextRange();
-            range.collapse(true);
-            range.moveStart('character', selectionStart);
-            range.moveEnd('character', selectionEnd);
-            range.select();
-        };
-        isAllSelected = function(text) {
-            try {
-                var range = text.ownerDocument.selection.createRange();
-            }catch(e) {}
-            if (!range || range.parentElement() != text) return false;
-                return range.text == text.value;
-        }
-    }
-    if (useragent.isOldIE) {
-        var inPropertyChange = false;
-        var onPropertyChange = function(e){
-            if (inPropertyChange)
-                return;
-            var data = text.value;
-            if (inComposition || !data || data == PLACEHOLDER)
-                return;
-            if (e && data == PLACEHOLDER[0])
-                return syncProperty.schedule();
-
-            sendText(data);
-            inPropertyChange = true;
-            resetValue();
-            inPropertyChange = false;
-        };
-        var syncProperty = lang.delayedCall(onPropertyChange);
-        event.addListener(text, "propertychange", onPropertyChange);
-
-        var keytable = { 13:1, 27:1 };
-        event.addListener(text, "keyup", function (e) {
-            if (inComposition && (!text.value || keytable[e.keyCode]))
-                setTimeout(onCompositionEnd, 0);
-            if ((text.value.charCodeAt(0)||0) < 129) {
-                return;
-            }
-            inComposition ? onCompositionUpdate() : onCompositionStart();
-        });
-    }
-
-    var onSelect = function(e) {
-        if (cut) {
-            cut = false;
-        } else if (copied) {
-            copied = false;
-        } else if (isAllSelected(text)) {
-            host.selectAll();
-            resetSelection();
-        } else if (inputHandler) {
-            resetSelection(host.selection.isEmpty());
-        }
-    };
-
-    var inputHandler = null;
-    this.setInputHandler = function(cb) {inputHandler = cb};
-    this.getInputHandler = function() {return inputHandler};
-    var afterContextMenu = false;
-    
-    var sendText = function(data) {
-        if (inputHandler) {
-            data = inputHandler(data);
-            inputHandler = null;
-        }
-        if (pasted) {
-            resetSelection();
-            if (data)
-                host.onPaste(data);
-            pasted = false;
-        } else if (data == PLACEHOLDER[0]) {
-            if (afterContextMenu)
-                host.execCommand("del", {source: "ace"});
-        } else {
-            if (data.substring(0, 2) == PLACEHOLDER)
-                data = data.substr(2);
-            else if (data[0] == PLACEHOLDER[0])
-                data = data.substr(1);
-            else if (data[data.length - 1] == PLACEHOLDER[0])
-                data = data.slice(0, -1);
-            if (data[data.length - 1] == PLACEHOLDER[0])
-                data = data.slice(0, -1);
-            
-            if (data)
-                host.onTextInput(data);
-        }
-        if (afterContextMenu)
-            afterContextMenu = false;
-    };
-    var onInput = function(e) {
-        if (inComposition)
-            return;
-        var data = text.value;
-        sendText(data);
-        resetValue();
-    };
-
-    var onCut = function(e) {
-        var data = host.getCopyText();
-        if (!data) {
-            event.preventDefault(e);
-            return;
-        }
-
-        var clipboardData = e.clipboardData || window.clipboardData;
-
-        if (clipboardData && !BROKEN_SETDATA) {
-            var supported = clipboardData.setData("Text", data);
-            if (supported) {
-                host.onCut();
-                event.preventDefault(e);
-            }
-        }
-
-        if (!supported) {
-            cut = true;
-            text.value = data;
-            text.select();
-            setTimeout(function(){
-                cut = false;
-                resetValue();
-                resetSelection();
-                host.onCut();
-            });
-        }
-    };
-
-    var onCopy = function(e) {
-        var data = host.getCopyText();
-        if (!data) {
-            event.preventDefault(e);
-            return;
-        }
-
-        var clipboardData = e.clipboardData || window.clipboardData;
-        if (clipboardData && !BROKEN_SETDATA) {
-            var supported = clipboardData.setData("Text", data);
-            if (supported) {
-                host.onCopy();
-                event.preventDefault(e);
-            }
-        }
-        if (!supported) {
-            copied = true;
-            text.value = data;
-            text.select();
-            setTimeout(function(){
-                copied = false;
-                resetValue();
-                resetSelection();
-                host.onCopy();
-            });
-        }
-    };
-
-    var onPaste = function(e) {
-        var clipboardData = e.clipboardData || window.clipboardData;
-
-        if (clipboardData) {
-            var data = clipboardData.getData("Text");
-            if (data)
-                host.onPaste(data);
-            if (useragent.isIE)
-                setTimeout(resetSelection);
-            event.preventDefault(e);
-        }
-        else {
-            text.value = "";
-            pasted = true;
-        }
-    };
-
-    event.addCommandKeyListener(text, host.onCommandKey.bind(host));
-
-    event.addListener(text, "select", onSelect);
-
-    event.addListener(text, "input", onInput);
-
-    event.addListener(text, "cut", onCut);
-    event.addListener(text, "copy", onCopy);
-    event.addListener(text, "paste", onPaste);
-    if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)){
-        event.addListener(parentNode, "keydown", function(e) {
-            if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)
-            return;
-
-            switch (e.keyCode) {
-                case 67:
-                    onCopy(e);
-                    break;
-                case 86:
-                    onPaste(e);
-                    break;
-                case 88:
-                    onCut(e);
-                    break;
-            }
-        });
-    }
-    var onCompositionStart = function(e) {
-        if (inComposition) return;
-        inComposition = {};
-        host.onCompositionStart();
-        setTimeout(onCompositionUpdate, 0);
-        host.on("mousedown", onCompositionEnd);
-        if (!host.selection.isEmpty()) {
-            host.insert("");
-            host.session.markUndoGroup();
-            host.selection.clearSelection();
-        }
-        host.session.markUndoGroup();
-    };
-
-    var onCompositionUpdate = function() {
-        if (!inComposition) return;
-        host.onCompositionUpdate(text.value);
-        if (inComposition.lastValue)
-            host.undo();
-        inComposition.lastValue = text.value.replace(/\x01/g, "")
-        if (inComposition.lastValue) {
-            var r = host.selection.getRange();
-            host.insert(inComposition.lastValue);
-            host.session.markUndoGroup();
-            inComposition.range = host.selection.getRange();
-            host.selection.setRange(r);
-            host.selection.clearSelection();
-        }
-    };
-
-    var onCompositionEnd = function(e) {
-        var c = inComposition;
-        inComposition = false;
-        var timer = setTimeout(function() {
-            var str = text.value.replace(/\x01/g, "");
-            if (inComposition)
-                return
-            else if (str == c.lastValue)
-                resetValue();
-            else if (!c.lastValue && str) {
-                resetValue();
-                sendText(str);
-            }
-        });
-        inputHandler = function compositionInputHandler(str) {
-            clearTimeout(timer);
-            str = str.replace(/\x01/g, "");
-            if (str == c.lastValue)
-                return "";
-            if (c.lastValue)
-                host.undo();
-            return str;
-        }        
-        host.onCompositionEnd();
-        host.removeListener("mousedown", onCompositionEnd);
-        if (e.type == "compositionend" && c.range) {
-            host.selection.setRange(c.range);
-        }
-    };
-    
-    
-
-    var syncComposition = lang.delayedCall(onCompositionUpdate, 50);
-
-    event.addListener(text, "compositionstart", onCompositionStart);
-    event.addListener(text, useragent.isGecko ? "text" : "keyup", function(){syncComposition.schedule()});
-    event.addListener(text, "compositionend", onCompositionEnd);
-
-    this.getElement = function() {
-        return text;
-    };
-
-    this.setReadOnly = function(readOnly) {
-       text.readOnly = readOnly;
-    };
-
-    this.onContextMenu = function(e) {
-        afterContextMenu = true;
-        if (!tempStyle)
-            tempStyle = text.style.cssText;
-
-        text.style.cssText = "z-index:100000;" + (useragent.isIE ? "opacity:0.1;" : "");
-
-        resetSelection(host.selection.isEmpty());
-        host._emit("nativecontextmenu", {target: host});
-        var rect = host.container.getBoundingClientRect();
-        var style = dom.computedStyle(host.container);
-        var top = rect.top + (parseInt(style.borderTopWidth) || 0);
-        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);
-        var maxTop = rect.bottom - top - text.clientHeight;
-        var move = function(e) {
-            text.style.left = e.clientX - left - 2 + "px";
-            text.style.top = Math.min(e.clientY - top - 2, maxTop) + "px";
-        }; 
-        move(e);
-
-        if (e.type != "mousedown")
-            return;
-
-        if (host.renderer.$keepTextAreaAtCursor)
-            host.renderer.$keepTextAreaAtCursor = null;
-        if (useragent.isWin)
-            event.capture(host.container, move, onContextMenuClose);
-    };
-
-    this.onContextMenuClose = onContextMenuClose;
-    function onContextMenuClose() {
-        setTimeout(function () {
-            if (tempStyle) {
-                text.style.cssText = tempStyle;
-                tempStyle = '';
-            }
-            if (host.renderer.$keepTextAreaAtCursor == null) {
-                host.renderer.$keepTextAreaAtCursor = true;
-                host.renderer.$moveTextAreaToCursor();
-            }
-        }, 0);
-    }
-    if (!useragent.isGecko) {
-        event.addListener(text, "contextmenu", function(e) {
-            host.textInput.onContextMenu(e);
-            onContextMenuClose();
-        });
-    }
-};
-
-exports.TextInput = TextInput;
-});
-
-define('ace/mouse/mouse_handler', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/useragent', 'ace/mouse/default_handlers', 'ace/mouse/default_gutter_handler', 'ace/mouse/mouse_event', 'ace/mouse/dragdrop', 'ace/config'], function(require, exports, module) {
-
-
-var event = require("../lib/event");
-var useragent = require("../lib/useragent");
-var DefaultHandlers = require("./default_handlers").DefaultHandlers;
-var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler;
-var MouseEvent = require("./mouse_event").MouseEvent;
-var DragdropHandler = require("./dragdrop").DragdropHandler;
-var config = require("../config");
-
-var MouseHandler = function(editor) {
-    this.editor = editor;
-
-    new DefaultHandlers(this);
-    new DefaultGutterHandler(this);
-    new DragdropHandler(this);
-
-    event.addListener(editor.container, "mousedown", function(e) {
-        editor.focus();
-        return event.preventDefault(e);
-    });
-
-    var mouseTarget = editor.renderer.getMouseEventTarget();
-    event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"));
-    event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"));
-    event.addMultiMouseDownListener(mouseTarget, [300, 300, 250], this, "onMouseEvent");
-    event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"));
-
-    var gutterEl = editor.renderer.$gutter;
-    event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"));
-    event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"));
-    event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"));
-    event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove"));
-};
-
-(function() {
-    this.onMouseEvent = function(name, e) {
-        this.editor._emit(name, new MouseEvent(e, this.editor));
-    };
-
-    this.onMouseMove = function(name, e) {
-        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;
-        if (!listeners || !listeners.length)
-            return;
-
-        this.editor._emit(name, new MouseEvent(e, this.editor));
-    };
-
-    this.onMouseWheel = function(name, e) {
-        var mouseEvent = new MouseEvent(e, this.editor);
-        mouseEvent.speed = this.$scrollSpeed * 2;
-        mouseEvent.wheelX = e.wheelX;
-        mouseEvent.wheelY = e.wheelY;
-
-        this.editor._emit(name, mouseEvent);
-    };
-
-    this.setState = function(state) {
-        this.state = state;
-    };
-
-    this.captureMouse = function(ev, state) {
-        if (state)
-            this.setState(state);
-
-        this.x = ev.x;
-        this.y = ev.y;
-        
-        this.isMousePressed = true;
-        var renderer = this.editor.renderer;
-        if (renderer.$keepTextAreaAtCursor)
-            renderer.$keepTextAreaAtCursor = null;
-
-        var self = this;
-        var onMouseMove = function(e) {
-            self.x = e.clientX;
-            self.y = e.clientY;
-        };
-
-        var onCaptureEnd = function(e) {
-            clearInterval(timerId);
-            onCaptureInterval();
-            self[self.state + "End"] && self[self.state + "End"](e);
-            self.$clickSelection = null;
-            if (renderer.$keepTextAreaAtCursor == null) {
-                renderer.$keepTextAreaAtCursor = true;
-                renderer.$moveTextAreaToCursor();
-            }
-            self.isMousePressed = false;
-            self.onMouseEvent("mouseup", e)
-        };
-
-        var onCaptureInterval = function() {
-            self[self.state] && self[self.state]();
-        };
-        
-        if (useragent.isOldIE && ev.domEvent.type == "dblclick") {
-            return setTimeout(function() {onCaptureEnd(ev.domEvent);});
-        }
-
-        event.capture(this.editor.container, onMouseMove, onCaptureEnd);
-        var timerId = setInterval(onCaptureInterval, 20);
-    };
-}).call(MouseHandler.prototype);
-
-config.defineOptions(MouseHandler.prototype, "mouseHandler", {
-    scrollSpeed: {initialValue: 2},
-    dragDelay: {initialValue: 150},
-    focusTimout: {initialValue: 0}
-});
-
-
-exports.MouseHandler = MouseHandler;
-});
-
-define('ace/mouse/default_handlers', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/useragent'], function(require, exports, module) {
-
-
-var dom = require("../lib/dom");
-var useragent = require("../lib/useragent");
-
-var DRAG_OFFSET = 0; // pixels
-
-function DefaultHandlers(mouseHandler) {
-    mouseHandler.$clickSelection = null;
-
-    var editor = mouseHandler.editor;
-    editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler));
-    editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler));
-    editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler));
-    editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler));
-    editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler));
-
-    var exports = ["select", "startSelect", "drag", "dragEnd", "dragWait",
-        "dragWaitEnd", "startDrag", "focusWait"];
-
-    exports.forEach(function(x) {
-        mouseHandler[x] = this[x];
-    }, this);
-
-    mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, "getLineRange");
-    mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, "getWordRange");
-}
-
-(function() {
-
-    this.onMouseDown = function(ev) {
-        var inSelection = ev.inSelection();
-        var pos = ev.getDocumentPosition();
-        this.mousedownEvent = ev;
-        var editor = this.editor;
-
-        var button = ev.getButton();
-        if (button !== 0) {
-            var selectionRange = editor.getSelectionRange();
-            var selectionEmpty = selectionRange.isEmpty();
-
-            if (selectionEmpty) {
-                editor.moveCursorToPosition(pos);
-                editor.selection.clearSelection();
-            }
-            editor.textInput.onContextMenu(ev.domEvent);
-            return; // stopping event here breaks contextmenu on ff mac
-        }
-        if (inSelection && !editor.isFocused()) {
-            editor.focus();
-            if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {
-                this.setState("focusWait");
-                this.captureMouse(ev);
-                return ev.preventDefault();
-            }
-        }
-
-        if (!inSelection || this.$clickSelection || ev.getShiftKey() || editor.inMultiSelectMode) {
-            this.startSelect(pos);
-        } else if (inSelection) {
-            this.mousedownEvent.time = (new Date()).getTime();
-            this.setState("dragWait");
-        }
-
-        this.captureMouse(ev);
-        return ev.preventDefault();
-    };
-
-    this.startSelect = function(pos) {
-        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);
-        if (this.mousedownEvent.getShiftKey()) {
-            this.editor.selection.selectToPosition(pos);
-        }
-        else if (!this.$clickSelection) {
-            this.editor.moveCursorToPosition(pos);
-            this.editor.selection.clearSelection();
-        }
-        this.setState("select");
-    };
-
-    this.select = function() {
-        var anchor, editor = this.editor;
-        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);
-
-        if (this.$clickSelection) {
-            var cmp = this.$clickSelection.comparePoint(cursor);
-
-            if (cmp == -1) {
-                anchor = this.$clickSelection.end;
-            } else if (cmp == 1) {
-                anchor = this.$clickSelection.start;
-            } else {
-                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);
-                cursor = orientedRange.cursor;
-                anchor = orientedRange.anchor;
-            }
-            editor.selection.setSelectionAnchor(anchor.row, anchor.column);
-        }
-        editor.selection.selectToPosition(cursor);
-
-        editor.renderer.scrollCursorIntoView();
-    };
-
-    this.extendSelectionBy = function(unitName) {
-        var anchor, editor = this.editor;
-        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);
-        var range = editor.selection[unitName](cursor.row, cursor.column);
-
-        if (this.$clickSelection) {
-            var cmpStart = this.$clickSelection.comparePoint(range.start);
-            var cmpEnd = this.$clickSelection.comparePoint(range.end);
-
-            if (cmpStart == -1 && cmpEnd <= 0) {
-                anchor = this.$clickSelection.end;
-                if (range.end.row != cursor.row || range.end.column != cursor.column)
-                    cursor = range.start;
-            } else if (cmpEnd == 1 && cmpStart >= 0) {
-                anchor = this.$clickSelection.start;
-                if (range.start.row != cursor.row || range.start.column != cursor.column)
-                    cursor = range.end;
-            } else if (cmpStart == -1 && cmpEnd == 1) {
-                cursor = range.end;
-                anchor = range.start;
-            } else {
-                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);
-                cursor = orientedRange.cursor;
-                anchor = orientedRange.anchor;
-            }
-            editor.selection.setSelectionAnchor(anchor.row, anchor.column);
-        }
-        editor.selection.selectToPosition(cursor);
-
-        editor.renderer.scrollCursorIntoView();
-    };
-
-    this.startDrag = function() {
-        var editor = this.editor;
-        this.setState("drag");
-        this.dragRange = editor.getSelectionRange();
-        var style = editor.getSelectionStyle();
-        this.dragSelectionMarker = editor.session.addMarker(this.dragRange, "ace_selection", style);
-        editor.clearSelection();
-        dom.addCssClass(editor.container, "ace_dragging");
-        if (!this.$dragKeybinding) {
-            this.$dragKeybinding = {
-                handleKeyboard: function(data, hashId, keyString, keyCode) {
-                    if (keyString == "esc")
-                        return {command: this.command};
-                },
-                command: {
-                    exec: function(editor) {
-                        var self = editor.$mouseHandler;
-                        self.dragCursor = null;
-                        self.dragEnd();
-                        self.startSelect();
-                    }
-                }
-            }
-        }
-
-        editor.keyBinding.addKeyboardHandler(this.$dragKeybinding);
-    };
-
-    this.focusWait = function() {
-        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);
-        var time = (new Date()).getTime();
-
-        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)
-            this.startSelect(this.mousedownEvent.getDocumentPosition());
-    };
-
-    this.dragWait = function(e) {
-        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);
-        var time = (new Date()).getTime();
-        var editor = this.editor;
-
-        if (distance > DRAG_OFFSET) {
-            this.startSelect(this.mousedownEvent.getDocumentPosition());
-        } else if (time - this.mousedownEvent.time > editor.$mouseHandler.$dragDelay) {
-            this.startDrag();
-        }
-    };
-
-    this.dragWaitEnd = function(e) {
-        this.mousedownEvent.domEvent = e;
-        this.startSelect();
-    };
-
-    this.drag = function() {
-        var editor = this.editor;
-        this.dragCursor = editor.renderer.screenToTextCoordinates(this.x, this.y);
-        editor.moveCursorToPosition(this.dragCursor);
-        editor.renderer.scrollCursorIntoView();
-    };
-
-    this.dragEnd = function(e) {
-        var editor = this.editor;
-        var dragCursor = this.dragCursor;
-        var dragRange = this.dragRange;
-        dom.removeCssClass(editor.container, "ace_dragging");
-        editor.session.removeMarker(this.dragSelectionMarker);
-        editor.keyBinding.removeKeyboardHandler(this.$dragKeybinding);
-
-        if (!dragCursor)
-            return;
-
-        editor.clearSelection();
-        if (e && (e.ctrlKey || e.altKey)) {
-            var session = editor.session;
-            var newRange = dragRange;
-            newRange.end = session.insert(dragCursor, session.getTextRange(dragRange));
-            newRange.start = dragCursor;
-        } else if (dragRange.contains(dragCursor.row, dragCursor.column)) {
-            return;
-        } else {
-            var newRange = editor.moveText(dragRange, dragCursor);
-        }
-
-        if (!newRange)
-            return;
-
-        editor.selection.setSelectionRange(newRange);
-    };
-
-    this.onDoubleClick = function(ev) {
-        var pos = ev.getDocumentPosition();
-        var editor = this.editor;
-        var session = editor.session;
-
-        var range = session.getBracketRange(pos);
-        if (range) {
-            if (range.isEmpty()) {
-                range.start.column--;
-                range.end.column++;
-            }
-            this.$clickSelection = range;
-            this.setState("select");
-            return;
-        }
-
-        this.$clickSelection = editor.selection.getWordRange(pos.row, pos.column);
-        this.setState("selectByWords");
-    };
-
-    this.onTripleClick = function(ev) {
-        var pos = ev.getDocumentPosition();
-        var editor = this.editor;
-
-        this.setState("selectByLines");
-        this.$clickSelection = editor.selection.getLineRange(pos.row);
-    };
-
-    this.onQuadClick = function(ev) {
-        var editor = this.editor;
-
-        editor.selectAll();
-        this.$clickSelection = editor.getSelectionRange();
-        this.setState("null");
-    };
-
-    this.onMouseWheel = function(ev) {
-        if (ev.getShiftKey() || ev.getAccelKey())
-            return;
-        var t = ev.domEvent.timeStamp;
-        var dt = t - (this.$lastScrollTime||0);
-        
-        var editor = this.editor;
-        var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
-        if (isScrolable || dt < 200) {
-            this.$lastScrollTime = t;
-            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
-            return ev.stop();
-        }
-    };
-
-}).call(DefaultHandlers.prototype);
-
-exports.DefaultHandlers = DefaultHandlers;
-
-function calcDistance(ax, ay, bx, by) {
-    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));
-}
-
-function calcRangeOrientation(range, cursor) {
-    if (range.start.row == range.end.row)
-        var cmp = 2 * cursor.column - range.start.column - range.end.column;
-    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)
-        var cmp = cursor.column - 4;
-    else
-        var cmp = 2 * cursor.row - range.start.row - range.end.row;
-
-    if (cmp < 0)
-        return {cursor: range.start, anchor: range.end};
-    else
-        return {cursor: range.end, anchor: range.start};
-}
-
-});
-
-define('ace/mouse/default_gutter_handler', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/event'], function(require, exports, module) {
-
-var dom = require("../lib/dom");
-var event = require("../lib/event");
-
-function GutterHandler(mouseHandler) {
-    var editor = mouseHandler.editor;
-    var gutter = editor.renderer.$gutterLayer;
-
-    mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) {
-        if (!editor.isFocused())
-            return;
-        var gutterRegion = gutter.getRegion(e);
-
-        if (gutterRegion == "foldWidgets")
-            return;
-
-        var row = e.getDocumentPosition().row;
-        var selection = editor.session.selection;
-
-        if (e.getShiftKey())
-            selection.selectTo(row, 0);
-        else {
-            if (e.domEvent.detail == 2) {
-                editor.selectAll();
-                return e.preventDefault();
-            }
-            mouseHandler.$clickSelection = editor.selection.getLineRange(row);
-        }
-        mouseHandler.captureMouse(e, "selectByLines");
-        return e.preventDefault();
-    });
-
-
-    var tooltipTimeout, mouseEvent, tooltip, tooltipAnnotation;
-    function createTooltip() {
-        tooltip = dom.createElement("div");
-        tooltip.className = "ace_gutter-tooltip";
-        tooltip.style.display = "none";
-        editor.container.appendChild(tooltip);
-    }
-
-    function showTooltip() {
-        if (!tooltip) {
-            createTooltip();
-        }
-        var row = mouseEvent.getDocumentPosition().row;
-        var annotation = gutter.$annotations[row];
-        if (!annotation)
-            return hideTooltip();
-
-        var maxRow = editor.session.getLength();
-        if (row == maxRow) {
-            var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;
-            var pos = mouseEvent.$pos;
-            if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))
-                return hideTooltip();
-        }
-
-        if (tooltipAnnotation == annotation)
-            return;
-        tooltipAnnotation = annotation.text.join("<br/>");
-
-        tooltip.style.display = "block";
-        tooltip.innerHTML = tooltipAnnotation;
-        editor.on("mousewheel", hideTooltip);
-
-        moveTooltip(mouseEvent);
-    }
-
-    function hideTooltip() {
-        if (tooltipTimeout)
-            tooltipTimeout = clearTimeout(tooltipTimeout);
-        if (tooltipAnnotation) {
-            tooltip.style.display = "none";
-            tooltipAnnotation = null;
-            editor.removeEventListener("mousewheel", hideTooltip);
-        }
-    }
-
-    function moveTooltip(e) {
-        var rect = editor.renderer.$gutter.getBoundingClientRect();
-        tooltip.style.left = e.x + 15 + "px";
-        if (e.y + 3 * editor.renderer.lineHeight + 15 < rect.bottom) {
-            tooltip.style.bottom =  "";
-            tooltip.style.top =  e.y + 15 + "px";
-        } else {
-            tooltip.style.top =  "";
-            tooltip.style.bottom = rect.bottom - e.y + 5 + "px";
-        }
-    }
-
-    mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) {
-        var target = e.domEvent.target || e.domEvent.srcElement;
-        if (dom.hasCssClass(target, "ace_fold-widget"))
-            return hideTooltip();
-
-        if (tooltipAnnotation)
-            moveTooltip(e);
-
-        mouseEvent = e;
-        if (tooltipTimeout)
-            return;
-        tooltipTimeout = setTimeout(function() {
-            tooltipTimeout = null;
-            if (mouseEvent && !mouseHandler.isMousePressed)
-                showTooltip();
-            else
-                hideTooltip();
-        }, 50);
-    });
-
-    event.addListener(editor.renderer.$gutter, "mouseout", function(e) {
-        mouseEvent = null;
-        if (!tooltipAnnotation || tooltipTimeout)
-            return;
-
-        tooltipTimeout = setTimeout(function() {
-            tooltipTimeout = null;
-            hideTooltip();
-        }, 50);
-    });
-
-}
-
-exports.GutterHandler = GutterHandler;
-
-});
-
-define('ace/mouse/mouse_event', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/useragent'], function(require, exports, module) {
-
-
-var event = require("../lib/event");
-var useragent = require("../lib/useragent");
-var MouseEvent = exports.MouseEvent = function(domEvent, editor) {
-    this.domEvent = domEvent;
-    this.editor = editor;
-    
-    this.x = this.clientX = domEvent.clientX;
-    this.y = this.clientY = domEvent.clientY;
-
-    this.$pos = null;
-    this.$inSelection = null;
-    
-    this.propagationStopped = false;
-    this.defaultPrevented = false;
-};
-
-(function() {  
-    
-    this.stopPropagation = function() {
-        event.stopPropagation(this.domEvent);
-        this.propagationStopped = true;
-    };
-    
-    this.preventDefault = function() {
-        event.preventDefault(this.domEvent);
-        this.defaultPrevented = true;
-    };
-    
-    this.stop = function() {
-        this.stopPropagation();
-        this.preventDefault();
-    };
-    this.getDocumentPosition = function() {
-        if (this.$pos)
-            return this.$pos;
-        
-        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);
-        return this.$pos;
-    };
-    this.inSelection = function() {
-        if (this.$inSelection !== null)
-            return this.$inSelection;
-            
-        var editor = this.editor;
-        
-        if (editor.getReadOnly()) {
-            this.$inSelection = false;
-        }
-        else {
-            var selectionRange = editor.getSelectionRange();
-            if (selectionRange.isEmpty())
-                this.$inSelection = false;
-            else {
-                var pos = this.getDocumentPosition();
-                this.$inSelection = selectionRange.contains(pos.row, pos.column);
-            }
-        }
-        return this.$inSelection;
-    };
-    this.getButton = function() {
-        return event.getButton(this.domEvent);
-    };
-    this.getShiftKey = function() {
-        return this.domEvent.shiftKey;
-    };
-    
-    this.getAccelKey = useragent.isMac
-        ? function() { return this.domEvent.metaKey; }
-        : function() { return this.domEvent.ctrlKey; };
-    
-}).call(MouseEvent.prototype);
-
-});
-
-define('ace/mouse/dragdrop', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) {
-
-
-var event = require("../lib/event");
-
-var DragdropHandler = function(mouseHandler) {
-    var editor = mouseHandler.editor;
-    var dragSelectionMarker, x, y;
-    var timerId, range;
-    var dragCursor, counter = 0;
-
-    var mouseTarget = editor.container;
-    event.addListener(mouseTarget, "dragenter", function(e) {
-        if (editor.getReadOnly())
-            return;
-        var types = e.dataTransfer.types;
-        if (types && Array.prototype.indexOf.call(types, "text/plain") === -1)
-            return;
-        if (!dragSelectionMarker)
-            addDragMarker();
-        counter++;
-        return event.preventDefault(e);
-    });
-
-    event.addListener(mouseTarget, "dragover", function(e) {
-        if (editor.getReadOnly())
-            return;
-        var types = e.dataTransfer.types;
-        if (types && Array.prototype.indexOf.call(types, "text/plain") === -1)
-            return;
-        if (onMouseMoveTimer !== null)
-            onMouseMoveTimer = null;
-        x = e.clientX;
-        y = e.clientY;
-        return event.preventDefault(e);
-    });
-
-    var onDragInterval =  function() {
-        dragCursor = editor.renderer.screenToTextCoordinates(x, y);
-        editor.moveCursorToPosition(dragCursor);
-        editor.renderer.scrollCursorIntoView();
-    };
-
-    event.addListener(mouseTarget, "dragleave", function(e) {
-        counter--;
-        if (counter <= 0 && dragSelectionMarker) {
-            clearDragMarker();
-            return event.preventDefault(e);
-        }
-    });
-
-    event.addListener(mouseTarget, "drop", function(e) {
-        if (!dragSelectionMarker)
-            return;
-        range.end = editor.session.insert(dragCursor, e.dataTransfer.getData('Text'));
-        range.start = dragCursor;
-        clearDragMarker();
-        editor.focus();
-        return event.preventDefault(e);
-    });
-
-    function addDragMarker() {
-        range = editor.selection.toOrientedRange();
-        dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle());
-        editor.clearSelection();
-        clearInterval(timerId);
-        timerId = setInterval(onDragInterval, 20);
-        counter = 0;
-        event.addListener(document, "mousemove", onMouseMove);
-    }
-    function clearDragMarker() {
-        clearInterval(timerId);
-        editor.session.removeMarker(dragSelectionMarker);
-        dragSelectionMarker = null;
-        editor.selection.fromOrientedRange(range);
-        counter = 0;
-        event.removeListener(document, "mousemove", onMouseMove);
-    }
-    var onMouseMoveTimer = null;
-    function onMouseMove() {
-        if (onMouseMoveTimer == null) {
-            onMouseMoveTimer = setTimeout(function() {
-                if (onMouseMoveTimer != null && dragSelectionMarker)
-                    clearDragMarker();
-            }, 20);
-        }
-    }
-};
-
-exports.DragdropHandler = DragdropHandler;
-});
-
-define('ace/config', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/lib/net', 'ace/lib/event_emitter'], function(require, exports, module) {
-"no use strict";
-
-var lang = require("./lib/lang");
-var oop = require("./lib/oop");
-var net = require("./lib/net");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var global = (function() {
-    return this;
-})();
-
-var options = {
-    packaged: false,
-    workerPath: null,
-    modePath: null,
-    themePath: null,
-    basePath: "",
-    suffix: ".js",
-    $moduleUrls: {}
-};
-
-exports.get = function(key) {
-    if (!options.hasOwnProperty(key))
-        throw new Error("Unknown config key: " + key);
-
-    return options[key];
-};
-
-exports.set = function(key, value) {
-    if (!options.hasOwnProperty(key))
-        throw new Error("Unknown config key: " + key);
-
-    options[key] = value;
-};
-
-exports.all = function() {
-    return lang.copyObject(options);
-};
-oop.implement(exports, EventEmitter);
-
-exports.moduleUrl = function(name, component) {
-    if (options.$moduleUrls[name])
-        return options.$moduleUrls[name];
-
-    var parts = name.split("/");
-    component = component || parts[parts.length - 2] || "";
-    var base = parts[parts.length - 1].replace(component, "").replace(/(^[\-_])|([\-_]$)/, "");
-
-    if (!base && parts.length > 1)
-        base = parts[parts.length - 2];
-    var path = options[component + "Path"];
-    if (path == null)
-        path = options.basePath;
-    if (path && path.slice(-1) != "/")
-        path += "/";
-    return path + component + "-" + base + this.get("suffix");
-};
-
-exports.setModuleUrl = function(name, subst) {
-    return options.$moduleUrls[name] = subst;
-};
-
-exports.$loading = {};
-exports.loadModule = function(moduleName, onLoad) {
-    var module, moduleType;
-    if (Array.isArray(moduleName)) {
-        moduleType = moduleName[0];
-        moduleName = moduleName[1];
-    }
-
-    try {
-        module = require(moduleName);
-    } catch (e) {};
-    if (module && !exports.$loading[moduleName])
-        return onLoad && onLoad(module);
-
-    if (!exports.$loading[moduleName])
-        exports.$loading[moduleName] = [];
-
-    exports.$loading[moduleName].push(onLoad);
-
-    if (exports.$loading[moduleName].length > 1)
-        return;
-
-    var afterLoad = function() {
-        require([moduleName], function(module) {
-            exports._emit("load.module", {name: moduleName, module: module});
-            var listeners = exports.$loading[moduleName];
-            exports.$loading[moduleName] = null;
-            listeners.forEach(function(onLoad) {
-                onLoad && onLoad(module);
-            });
-        });
-    };
-
-    if (!exports.get("packaged"))
-        return afterLoad();
-    net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);
-};
-exports.init = function() {
-    options.packaged = require.packaged || module.packaged || (global.define && define.packaged);
-
-    if (!global.document)
-        return "";
-
-    var scriptOptions = {};
-    var scriptUrl = "";
-
-    var scripts = document.getElementsByTagName("script");
-    for (var i=0; i<scripts.length; i++) {
-        var script = scripts[i];
-
-        var src = script.src || script.getAttribute("src");
-        if (!src)
-            continue;
-
-        var attributes = script.attributes;
-        for (var j=0, l=attributes.length; j < l; j++) {
-            var attr = attributes[j];
-            if (attr.name.indexOf("data-ace-") === 0) {
-                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, ""))] = attr.value;
-            }
-        }
-
-        var m = src.match(/^(.*)\/ace(\-\w+)?\.js(\?|$)/);
-        if (m)
-            scriptUrl = m[1];
-    }
-
-    if (scriptUrl) {
-        scriptOptions.base = scriptOptions.base || scriptUrl;
-        scriptOptions.packaged = true;
-    }
-
-    scriptOptions.basePath = scriptOptions.base;
-    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;
-    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;
-    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;
-    delete scriptOptions.base;
-
-    for (var key in scriptOptions)
-        if (typeof scriptOptions[key] !== "undefined")
-            exports.set(key, scriptOptions[key]);
-};
-
-function deHyphenate(str) {
-    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });
-}
-
-var optionsProvider = {
-    setOptions: function(optList) {
-        Object.keys(optList).forEach(function(key) {
-            this.setOption(key, optList[key]);
-        }, this);
-    },
-    getOptions: function(optionNames) {
-        var result = {};
-        if (!optionNames) {
-            optionNames = Object.keys(this.$options);
-        } else if (!Array.isArray(optionNames)) {
-            result = optionNames;
-            optionNames = Object.keys(result);
-        }
-        optionNames.forEach(function(key) {
-            result[key] = this.getOption(key);
-        }, this);
-        return result;
-    },
-    setOption: function(name, value) {
-        if (this["$" + name] === value)
-            return;
-        var opt = this.$options[name];
-        if (!opt)
-            return undefined;
-        if (opt.forwardTo)
-            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);
-
-        if (!opt.handlesSet)
-            this["$" + name] = value;
-        if (opt && opt.set)
-            opt.set.call(this, value);
-    },
-    getOption: function(name) {
-        var opt = this.$options[name];
-        if (!opt)
-            return undefined;
-        if (opt.forwardTo)
-            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);
-        return opt && opt.get ? opt.get.call(this) : this["$" + name];
-    }
-};
-
-var defaultOptions = {};
-exports.defineOptions = function(obj, path, options) {
-    if (!obj.$options)
-        defaultOptions[path] = obj.$options = {};
-
-    Object.keys(options).forEach(function(key) {
-        var opt = options[key];
-        if (typeof opt == "string")
-            opt = {forwardTo: opt};
-
-        opt.name || (opt.name = key);
-        obj.$options[opt.name] = opt;
-        if ("initialValue" in opt)
-            obj["$" + opt.name] = opt.initialValue;
-    });
-    oop.implement(obj, optionsProvider);
-
-    return this;
-};
-
-exports.resetOptions = function(obj) {
-    Object.keys(obj.$options).forEach(function(key) {
-        var opt = obj.$options[key];
-        if ("value" in opt)
-            obj.setOption(key, opt.value);
-    });
-};
-
-exports.setDefaultValue = function(path, name, value) {
-    var opts = defaultOptions[path] || (defaultOptions[path] = {});
-    if (opts[name]) {
-        if (opts.forwardTo)
-            exports.setDefaultValue(opts.forwardTo, name, value)
-        else
-            opts[name].value = value;
-    }
-};
-
-exports.setDefaultValues = function(path, optionHash) {
-    Object.keys(optionHash).forEach(function(key) {
-        exports.setDefaultValue(path, key, optionHash[key]);
-    });
-};
-
-});
-define('ace/lib/net', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-var dom = require("./dom");
-
-exports.get = function (url, callback) {
-    var xhr = new XMLHttpRequest();
-    xhr.open('GET', url, true);
-    xhr.onreadystatechange = function () {
-        if (xhr.readyState === 4) {
-            callback(xhr.responseText);
-        }
-    };
-    xhr.send(null);
-};
-
-exports.loadScript = function(path, callback) {
-    var head = dom.getDocumentHead();
-    var s = document.createElement('script');
-
-    s.src = path;
-    head.appendChild(s);
-
-    s.onload = s.onreadystatechange = function(_, isAbort) {
-        if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") {
-            s = s.onload = s.onreadystatechange = null;
-            if (!isAbort)
-                callback();
-        }
-    };
-};
-
-});
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/mouse/fold_handler', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-function FoldHandler(editor) {
-
-    editor.on("click", function(e) {
-        var position = e.getDocumentPosition();
-        var session = editor.session;
-        var fold = session.getFoldAt(position.row, position.column, 1);
-        if (fold) {
-            if (e.getAccelKey())
-                session.removeFold(fold);
-            else
-                session.expandFold(fold);
-
-            e.stop();
-        }
-    });
-
-    editor.on("gutterclick", function(e) {
-        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);
-
-        if (gutterRegion == "foldWidgets") {
-            var row = e.getDocumentPosition().row;
-            var session = editor.session;
-            if (session.foldWidgets && session.foldWidgets[row])
-                editor.session.onFoldWidgetClick(row, e);
-            if (!editor.isFocused())
-                editor.focus();
-            e.stop();
-        }
-    });
-
-    editor.on("gutterdblclick", function(e) {
-        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);
-
-        if (gutterRegion == "foldWidgets") {
-            var row = e.getDocumentPosition().row;
-            var session = editor.session;
-            var data = session.getParentFoldRangeData(row, true);
-            var range = data.range || data.firstRange;
-
-            if (range) {
-                var row = range.start.row;
-                var fold = session.getFoldAt(row, session.getLine(row).length, 1);
-
-                if (fold) {
-                    session.removeFold(fold);
-                } else {
-                    session.addFold("...", range);
-                    editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});
-                }
-            }
-            e.stop();
-        }
-    });
-}
-
-exports.FoldHandler = FoldHandler;
-
-});
-
-define('ace/keyboard/keybinding', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/event'], function(require, exports, module) {
-
-
-var keyUtil  = require("../lib/keys");
-var event = require("../lib/event");
-
-var KeyBinding = function(editor) {
-    this.$editor = editor;
-    this.$data = { };
-    this.$handlers = [];
-    this.setDefaultHandler(editor.commands);
-};
-
-(function() {
-    this.setDefaultHandler = function(kb) {
-        this.removeKeyboardHandler(this.$defaultHandler);
-        this.$defaultHandler = kb;
-        this.addKeyboardHandler(kb, 0);
-        this.$data = {editor: this.$editor};
-    };
-
-    this.setKeyboardHandler = function(kb) {
-        var h = this.$handlers;
-        if (h[h.length - 1] == kb)
-            return;
-
-        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)
-            this.removeKeyboardHandler(h[h.length - 1]);
-
-        this.addKeyboardHandler(kb, 1);
-    };
-
-    this.addKeyboardHandler = function(kb, pos) {
-        if (!kb)
-            return;
-        var i = this.$handlers.indexOf(kb);
-        if (i != -1)
-            this.$handlers.splice(i, 1);
-
-        if (pos == undefined)
-            this.$handlers.push(kb);
-        else
-            this.$handlers.splice(pos, 0, kb);
-
-        if (i == -1 && kb.attach)
-            kb.attach(this.$editor);
-    };
-
-    this.removeKeyboardHandler = function(kb) {
-        var i = this.$handlers.indexOf(kb);
-        if (i == -1)
-            return false;
-        this.$handlers.splice(i, 1);
-        kb.detach && kb.detach(this.$editor);
-        return true;
-    };
-
-    this.getKeyboardHandler = function() {
-        return this.$handlers[this.$handlers.length - 1];
-    };
-
-    this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {
-        var toExecute;
-        var success = false;
-        var commands = this.$editor.commands;
-
-        for (var i = this.$handlers.length; i--;) {
-            toExecute = this.$handlers[i].handleKeyboard(
-                this.$data, hashId, keyString, keyCode, e
-            );
-            if (!toExecute || !toExecute.command)
-                continue;
-            if (toExecute.command == "null") {
-                success = true;
-            } else {
-                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);                
-            }
-            if (success && e && hashId != -1 && toExecute.passEvent != true)
-                event.stopEvent(e);
-            if (success)
-                break;
-        }
-        return success;
-    };
-
-    this.onCommandKey = function(e, hashId, keyCode) {
-        var keyString = keyUtil.keyCodeToString(keyCode);
-        this.$callKeyboardHandlers(hashId, keyString, keyCode, e);
-    };
-
-    this.onTextInput = function(text) {
-        var success = this.$callKeyboardHandlers(-1, text);
-        if (!success)
-            this.$editor.commands.exec("insertstring", this.$editor, text);
-    };
-
-}).call(KeyBinding.prototype);
-
-exports.KeyBinding = KeyBinding;
-});
-
-define('ace/edit_session', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/config', 'ace/lib/event_emitter', 'ace/selection', 'ace/mode/text', 'ace/range', 'ace/document', 'ace/background_tokenizer', 'ace/search_highlight', 'ace/edit_session/folding', 'ace/edit_session/bracket_match'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var lang = require("./lib/lang");
-var config = require("./config");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Selection = require("./selection").Selection;
-var TextMode = require("./mode/text").Mode;
-var Range = require("./range").Range;
-var Document = require("./document").Document;
-var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer;
-var SearchHighlight = require("./search_highlight").SearchHighlight;
-
-var EditSession = function(text, mode) {
-    this.$breakpoints = [];
-    this.$decorations = [];
-    this.$frontMarkers = {};
-    this.$backMarkers = {};
-    this.$markerId = 1;
-    this.$undoSelect = true;
-
-    this.$foldData = [];
-    this.$foldData.toString = function() {
-        return this.join("\n");
-    }
-    this.on("changeFold", this.onChangeFold.bind(this));
-    this.$onChange = this.onChange.bind(this);
-
-    if (typeof text != "object" || !text.getLine)
-        text = new Document(text);
-
-    this.setDocument(text);
-    this.selection = new Selection(this);
-
-    config.resetOptions(this);
-    this.setMode(mode);
-    config._emit("session", this);
-};
-
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setDocument = function(doc) {
-        if (this.doc)
-            this.doc.removeListener("change", this.$onChange);
-
-        this.doc = doc;
-        doc.on("change", this.$onChange);
-
-        if (this.bgTokenizer)
-            this.bgTokenizer.setDocument(this.getDocument());
-
-        this.resetCaches();
-    };
-    this.getDocument = function() {
-        return this.doc;
-    };
-    this.$resetRowCache = function(docRow) {
-        if (!docRow) {
-            this.$docRowCache = [];
-            this.$screenRowCache = [];
-            return;
-        }
-        var l = this.$docRowCache.length;
-        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;
-        if (l > i) {
-            this.$docRowCache.splice(i, l);
-            this.$screenRowCache.splice(i, l);
-        }
-    };
-
-    this.$getRowCacheIndex = function(cacheArray, val) {
-        var low = 0;
-        var hi = cacheArray.length - 1;
-
-        while (low <= hi) {
-            var mid = (low + hi) >> 1;
-            var c = cacheArray[mid];
-
-            if (val > c)
-                low = mid + 1;
-            else if (val < c)
-                hi = mid - 1;
-            else
-                return mid;
-        }
-
-        return low -1;
-    };
-
-    this.resetCaches = function() {
-        this.$modified = true;
-        this.$wrapData = [];
-        this.$rowLengthCache = [];
-        this.$resetRowCache(0);
-        if (this.bgTokenizer)
-            this.bgTokenizer.start(0);
-    };
-
-    this.onChangeFold = function(e) {
-        var fold = e.data;
-        this.$resetRowCache(fold.start.row);
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        this.$modified = true;
-
-        this.$resetRowCache(delta.range.start.row);
-
-        var removedFolds = this.$updateInternalDataOnChange(e);
-        if (!this.$fromUndo && this.$undoManager && !delta.ignore) {
-            this.$deltasDoc.push(delta);
-            if (removedFolds && removedFolds.length != 0) {
-                this.$deltasFold.push({
-                    action: "removeFolds",
-                    folds:  removedFolds
-                });
-            }
-
-            this.$informUndoManager.schedule();
-        }
-
-        this.bgTokenizer.$updateOnChange(delta);
-        this._emit("change", e);
-    };
-    this.setValue = function(text) {
-        this.doc.setValue(text);
-        this.selection.moveCursorTo(0, 0);
-        this.selection.clearSelection();
-
-        this.$resetRowCache(0);
-        this.$deltas = [];
-        this.$deltasDoc = [];
-        this.$deltasFold = [];
-        this.getUndoManager().reset();
-    };
-    this.getValue =
-    this.toString = function() {
-        return this.doc.getValue();
-    };
-    this.getSelection = function() {
-        return this.selection;
-    };
-    this.getState = function(row) {
-        return this.bgTokenizer.getState(row);
-    };
-    this.getTokens = function(row) {
-        return this.bgTokenizer.getTokens(row);
-    };
-    this.getTokenAt = function(row, column) {
-        var tokens = this.bgTokenizer.getTokens(row);
-        var token, c = 0;
-        if (column == null) {
-            i = tokens.length - 1;
-            c = this.getLine(row).length;
-        } else {
-            for (var i = 0; i < tokens.length; i++) {
-                c += tokens[i].value.length;
-                if (c >= column)
-                    break;
-            }
-        }
-        token = tokens[i];
-        if (!token)
-            return null;
-        token.index = i;
-        token.start = c - token.value.length;
-        return token;
-    };
-    this.setUndoManager = function(undoManager) {
-        this.$undoManager = undoManager;
-        this.$deltas = [];
-        this.$deltasDoc = [];
-        this.$deltasFold = [];
-
-        if (this.$informUndoManager)
-            this.$informUndoManager.cancel();
-
-        if (undoManager) {
-            var self = this;
-
-            this.$syncInformUndoManager = function() {
-                self.$informUndoManager.cancel();
-
-                if (self.$deltasFold.length) {
-                    self.$deltas.push({
-                        group: "fold",
-                        deltas: self.$deltasFold
-                    });
-                    self.$deltasFold = [];
-                }
-
-                if (self.$deltasDoc.length) {
-                    self.$deltas.push({
-                        group: "doc",
-                        deltas: self.$deltasDoc
-                    });
-                    self.$deltasDoc = [];
-                }
-
-                if (self.$deltas.length > 0) {
-                    undoManager.execute({
-                        action: "aceupdate",
-                        args: [self.$deltas, self]
-                    });
-                }
-
-                self.$deltas = [];
-            }
-            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);
-        }
-    };
-    this.markUndoGroup = function() {
-        if (this.$syncInformUndoManager)
-            this.$syncInformUndoManager();
-    };
-    
-    this.$defaultUndoManager = {
-        undo: function() {},
-        redo: function() {},
-        reset: function() {}
-    };
-    this.getUndoManager = function() {
-        return this.$undoManager || this.$defaultUndoManager;
-    };
-    this.getTabString = function() {
-        if (this.getUseSoftTabs()) {
-            return lang.stringRepeat(" ", this.getTabSize());
-        } else {
-            return "\t";
-        }
-    };
-    this.setUseSoftTabs = function(val) {
-        this.setOption("useSoftTabs", val);
-    };
-    this.getUseSoftTabs = function() {
-         return this.$useSoftTabs;
-    };
-    this.setTabSize = function(tabSize) {
-        this.setOption("tabSize", tabSize)
-    };
-    this.getTabSize = function() {
-        return this.$tabSize;
-    };
-    this.isTabStop = function(position) {
-        return this.$useSoftTabs && (position.column % this.$tabSize == 0);
-    };
-
-    this.$overwrite = false;
-    this.setOverwrite = function(overwrite) {
-        this.setOption("overwrite", overwrite)
-    };
-    this.getOverwrite = function() {
-        return this.$overwrite;
-    };
-    this.toggleOverwrite = function() {
-        this.setOverwrite(!this.$overwrite);
-    };
-    this.addGutterDecoration = function(row, className) {
-        if (!this.$decorations[row])
-            this.$decorations[row] = "";
-        this.$decorations[row] += " " + className;
-        this._emit("changeBreakpoint", {});
-    };
-    this.removeGutterDecoration = function(row, className) {
-        this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, "");
-        this._emit("changeBreakpoint", {});
-    };
-    this.getBreakpoints = function() {
-        return this.$breakpoints;
-    };
-    this.setBreakpoints = function(rows) {
-        this.$breakpoints = [];
-        for (var i=0; i<rows.length; i++) {
-            this.$breakpoints[rows[i]] = "ace_breakpoint";
-        }
-        this._emit("changeBreakpoint", {});
-    };
-    this.clearBreakpoints = function() {
-        this.$breakpoints = [];
-        this._emit("changeBreakpoint", {});
-    };
-    this.setBreakpoint = function(row, className) {
-        if (className === undefined)
-            className = "ace_breakpoint";
-        if (className)
-            this.$breakpoints[row] = className;
-        else
-            delete this.$breakpoints[row];
-        this._emit("changeBreakpoint", {});
-    };
-    this.clearBreakpoint = function(row) {
-        delete this.$breakpoints[row];
-        this._emit("changeBreakpoint", {});
-    };
-    this.addMarker = function(range, clazz, type, inFront) {
-        var id = this.$markerId++;
-
-        var marker = {
-            range : range,
-            type : type || "line",
-            renderer: typeof type == "function" ? type : null,
-            clazz : clazz,
-            inFront: !!inFront,
-            id: id
-        }
-
-        if (inFront) {
-            this.$frontMarkers[id] = marker;
-            this._emit("changeFrontMarker")
-        } else {
-            this.$backMarkers[id] = marker;
-            this._emit("changeBackMarker")
-        }
-
-        return id;
-    };
-    this.addDynamicMarker = function(marker, inFront) {
-        if (!marker.update)
-            return;
-        var id = this.$markerId++;
-        marker.id = id;
-        marker.inFront = !!inFront;
-
-        if (inFront) {
-            this.$frontMarkers[id] = marker;
-            this._emit("changeFrontMarker")
-        } else {
-            this.$backMarkers[id] = marker;
-            this._emit("changeBackMarker")
-        }
-
-        return marker;
-    };
-    this.removeMarker = function(markerId) {
-        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];
-        if (!marker)
-            return;
-
-        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;
-        if (marker) {
-            delete (markers[markerId]);
-            this._emit(marker.inFront ? "changeFrontMarker" : "changeBackMarker");
-        }
-    };
-    this.getMarkers = function(inFront) {
-        return inFront ? this.$frontMarkers : this.$backMarkers;
-    };
-
-    this.highlight = function(re) {
-        if (!this.$searchHighlight) {
-            var highlight = new SearchHighlight(null, "ace_selected-word", "text");
-            this.$searchHighlight = this.addDynamicMarker(highlight);
-        }
-        this.$searchHighlight.setRegexp(re);
-    }
-    this.highlightLines = function(startRow, endRow, clazz, inFront) {
-        if (typeof endRow != "number") {
-            clazz = endRow;
-            endRow = startRow;
-        }
-        if (!clazz)
-            clazz = "ace_step";
-
-        var range = new Range(startRow, 0, endRow, Infinity);
-        range.id = this.addMarker(range, clazz, "fullLine", inFront);
-        return range;
-    };
-    this.setAnnotations = function(annotations) {
-        this.$annotations = annotations;
-        this._emit("changeAnnotation", {});
-    };
-    this.getAnnotations = function() {
-        return this.$annotations || [];
-    };
-    this.clearAnnotations = function() {
-        this.setAnnotations([]);
-    };
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r?\n)/m);
-        if (match) {
-            this.$autoNewLine = match[1];
-        } else {
-            this.$autoNewLine = "\n";
-        }
-    };
-    this.getWordRange = function(row, column) {
-        var line = this.getLine(row);
-
-        var inToken = false;
-        if (column > 0)
-            inToken = !!line.charAt(column - 1).match(this.tokenRe);
-
-        if (!inToken)
-            inToken = !!line.charAt(column).match(this.tokenRe);
-
-        if (inToken)
-            var re = this.tokenRe;
-        else if (/^\s+$/.test(line.slice(column-1, column+1)))
-            var re = /\s/;
-        else
-            var re = this.nonTokenRe;
-
-        var start = column;
-        if (start > 0) {
-            do {
-                start--;
-            }
-            while (start >= 0 && line.charAt(start).match(re));
-            start++;
-        }
-
-        var end = column;
-        while (end < line.length && line.charAt(end).match(re)) {
-            end++;
-        }
-
-        return new Range(row, start, row, end);
-    };
-    this.getAWordRange = function(row, column) {
-        var wordRange = this.getWordRange(row, column);
-        var line = this.getLine(wordRange.end.row);
-
-        while (line.charAt(wordRange.end.column).match(/[ \t]/)) {
-            wordRange.end.column += 1;
-        }
-        return wordRange;
-    };
-    this.setNewLineMode = function(newLineMode) {
-        this.doc.setNewLineMode(newLineMode);
-    };
-    this.getNewLineMode = function() {
-        return this.doc.getNewLineMode();
-    };
-    this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); };
-    this.getUseWorker = function() { return this.$useWorker; };
-    this.onReloadTokenizer = function(e) {
-        var rows = e.data;
-        this.bgTokenizer.start(rows.first);
-        this._emit("tokenizerUpdate", e);
-    };
-
-    this.$modes = {};
-    this.$mode = null;
-    this.$modeId = null;
-    this.setMode = function(mode) {
-        if (mode && typeof mode === "object") {
-            if (mode.getTokenizer)
-                return this.$onChangeMode(mode);
-            var options = mode;
-            var path = options.path;
-        } else {
-            path = mode || "ace/mode/text";
-        }
-        if (!this.$modes["ace/mode/text"])
-            this.$modes["ace/mode/text"] = new TextMode();
-
-        if (this.$modes[path] && !options)
-            return this.$onChangeMode(this.$modes[path]);
-        this.$modeId = path;
-        config.loadModule(["mode", path], function(m) {
-            if (this.$modeId !== path)
-                return;
-            if (this.$modes[path] && !options)
-                return this.$onChangeMode(this.$modes[path]);
-            if (m && m.Mode) {
-                m = new m.Mode(options);
-                if (!options) {
-                    this.$modes[path] = m;
-                    m.$id = path;
-                }
-                this.$onChangeMode(m)
-            }
-        }.bind(this));
-        if (!this.$mode)
-            this.$onChangeMode(this.$modes["ace/mode/text"], true);
-    };
-
-    this.$onChangeMode = function(mode, $isPlaceholder) {
-        if (this.$mode === mode) return;
-        this.$mode = mode;
-
-        this.$stopWorker();
-
-        if (this.$useWorker)
-            this.$startWorker();
-
-        var tokenizer = mode.getTokenizer();
-
-        if(tokenizer.addEventListener !== undefined) {
-            var onReloadTokenizer = this.onReloadTokenizer.bind(this);
-            tokenizer.addEventListener("update", onReloadTokenizer);
-        }
-
-        if (!this.bgTokenizer) {
-            this.bgTokenizer = new BackgroundTokenizer(tokenizer);
-            var _self = this;
-            this.bgTokenizer.addEventListener("update", function(e) {
-                _self._emit("tokenizerUpdate", e);
-            });
-        } else {
-            this.bgTokenizer.setTokenizer(tokenizer);
-        }
-
-        this.bgTokenizer.setDocument(this.getDocument());
-
-        this.tokenRe = mode.tokenRe;
-        this.nonTokenRe = mode.nonTokenRe;
-
-
-        if (!$isPlaceholder) {
-            this.$modeId = mode.$id;
-            this.$setFolding(mode.foldingRules);
-            this._emit("changeMode");
-            this.bgTokenizer.start(0);
-        }
-    };
-
-
-    this.$stopWorker = function() {
-        if (this.$worker)
-            this.$worker.terminate();
-
-        this.$worker = null;
-    };
-
-    this.$startWorker = function() {
-        if (typeof Worker !== "undefined" && !require.noWorker) {
-            try {
-                this.$worker = this.$mode.createWorker(this);
-            } catch (e) {
-                console.log("Could not load worker");
-                console.log(e);
-                this.$worker = null;
-            }
-        }
-        else
-            this.$worker = null;
-    };
-    this.getMode = function() {
-        return this.$mode;
-    };
-
-    this.$scrollTop = 0;
-    this.setScrollTop = function(scrollTop) {
-        scrollTop = Math.round(Math.max(0, scrollTop));
-        if (this.$scrollTop === scrollTop || isNaN(scrollTop))
-            return;
-
-        this.$scrollTop = scrollTop;
-        this._signal("changeScrollTop", scrollTop);
-    };
-    this.getScrollTop = function() {
-        return this.$scrollTop;
-    };
-
-    this.$scrollLeft = 0;
-    this.setScrollLeft = function(scrollLeft) {
-        scrollLeft = Math.round(Math.max(0, scrollLeft));
-        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))
-            return;
-
-        this.$scrollLeft = scrollLeft;
-        this._signal("changeScrollLeft", scrollLeft);
-    };
-    this.getScrollLeft = function() {
-        return this.$scrollLeft;
-    };
-    this.getScreenWidth = function() {
-        this.$computeWidth();
-        return this.screenWidth;
-    };
-
-    this.$computeWidth = function(force) {
-        if (this.$modified || force) {
-            this.$modified = false;
-
-            if (this.$useWrapMode)
-                return this.screenWidth = this.$wrapLimit;
-
-            var lines = this.doc.getAllLines();
-            var cache = this.$rowLengthCache;
-            var longestScreenLine = 0;
-            var foldIndex = 0;
-            var foldLine = this.$foldData[foldIndex];
-            var foldStart = foldLine ? foldLine.start.row : Infinity;
-            var len = lines.length;
-
-            for (var i = 0; i < len; i++) {
-                if (i > foldStart) {
-                    i = foldLine.end.row + 1;
-                    if (i >= len)
-                        break;
-                    foldLine = this.$foldData[foldIndex++];
-                    foldStart = foldLine ? foldLine.start.row : Infinity;
-                }
-
-                if (cache[i] == null)
-                    cache[i] = this.$getStringScreenWidth(lines[i])[0];
-
-                if (cache[i] > longestScreenLine)
-                    longestScreenLine = cache[i];
-            }
-            this.screenWidth = longestScreenLine;
-        }
-    };
-    this.getLine = function(row) {
-        return this.doc.getLine(row);
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.doc.getLines(firstRow, lastRow);
-    };
-    this.getLength = function() {
-        return this.doc.getLength();
-    };
-    this.getTextRange = function(range) {
-        return this.doc.getTextRange(range || this.selection.getRange());
-    };
-    this.insert = function(position, text) {
-        return this.doc.insert(position, text);
-    };
-    this.remove = function(range) {
-        return this.doc.remove(range);
-    };
-    this.undoChanges = function(deltas, dontSelect) {
-        if (!deltas.length)
-            return;
-
-        this.$fromUndo = true;
-        var lastUndoRange = null;
-        for (var i = deltas.length - 1; i != -1; i--) {
-            var delta = deltas[i];
-            if (delta.group == "doc") {
-                this.doc.revertDeltas(delta.deltas);
-                lastUndoRange =
-                    this.$getUndoSelection(delta.deltas, true, lastUndoRange);
-            } else {
-                delta.deltas.forEach(function(foldDelta) {
-                    this.addFolds(foldDelta.folds);
-                }, this);
-            }
-        }
-        this.$fromUndo = false;
-        lastUndoRange &&
-            this.$undoSelect &&
-            !dontSelect &&
-            this.selection.setSelectionRange(lastUndoRange);
-        return lastUndoRange;
-    };
-    this.redoChanges = function(deltas, dontSelect) {
-        if (!deltas.length)
-            return;
-
-        this.$fromUndo = true;
-        var lastUndoRange = null;
-        for (var i = 0; i < deltas.length; i++) {
-            var delta = deltas[i];
-            if (delta.group == "doc") {
-                this.doc.applyDeltas(delta.deltas);
-                lastUndoRange =
-                    this.$getUndoSelection(delta.deltas, false, lastUndoRange);
-            }
-        }
-        this.$fromUndo = false;
-        lastUndoRange &&
-            this.$undoSelect &&
-            !dontSelect &&
-            this.selection.setSelectionRange(lastUndoRange);
-        return lastUndoRange;
-    };
-    this.setUndoSelect = function(enable) {
-        this.$undoSelect = enable;
-    };
-
-    this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {
-        function isInsert(delta) {
-            var insert =
-                delta.action === "insertText" || delta.action === "insertLines";
-            return isUndo ? !insert : insert;
-        }
-
-        var delta = deltas[0];
-        var range, point;
-        var lastDeltaIsInsert = false;
-        if (isInsert(delta)) {
-            range = delta.range.clone();
-            lastDeltaIsInsert = true;
-        } else {
-            range = Range.fromPoints(delta.range.start, delta.range.start);
-            lastDeltaIsInsert = false;
-        }
-
-        for (var i = 1; i < deltas.length; i++) {
-            delta = deltas[i];
-            if (isInsert(delta)) {
-                point = delta.range.start;
-                if (range.compare(point.row, point.column) == -1) {
-                    range.setStart(delta.range.start);
-                }
-                point = delta.range.end;
-                if (range.compare(point.row, point.column) == 1) {
-                    range.setEnd(delta.range.end);
-                }
-                lastDeltaIsInsert = true;
-            } else {
-                point = delta.range.start;
-                if (range.compare(point.row, point.column) == -1) {
-                    range =
-                        Range.fromPoints(delta.range.start, delta.range.start);
-                }
-                lastDeltaIsInsert = false;
-            }
-        }
-        if (lastUndoRange != null) {
-            var cmp = lastUndoRange.compareRange(range);
-            if (cmp == 1) {
-                range.setStart(lastUndoRange.start);
-            } else if (cmp == -1) {
-                range.setEnd(lastUndoRange.end);
-            }
-        }
-
-        return range;
-    };
-    this.replace = function(range, text) {
-        return this.doc.replace(range, text);
-    };
-    this.moveText = function(fromRange, toPosition, copy) {
-        var text = this.getTextRange(fromRange);
-        var folds = this.getFoldsInRange(fromRange);
-
-        var toRange = Range.fromPoints(toPosition, toPosition);
-        if (!copy) {
-            this.remove(fromRange);
-            var rowDiff = fromRange.start.row - fromRange.end.row;
-            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;
-            if (collDiff) {
-                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)
-                    toRange.start.column += collDiff;
-                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)
-                    toRange.end.column += collDiff;
-            }
-            if (rowDiff && toRange.start.row >= fromRange.end.row) {
-                toRange.start.row += rowDiff;
-                toRange.end.row += rowDiff;
-            }
-        }
-
-        this.insert(toRange.start, text);
-        if (folds.length) {
-            var oldStart = fromRange.start;
-            var newStart = toRange.start;
-            var rowDiff = newStart.row - oldStart.row;
-            var collDiff = newStart.column - oldStart.column;
-            this.addFolds(folds.map(function(x) {
-                x = x.clone();
-                if (x.start.row == oldStart.row)
-                    x.start.column += collDiff;
-                if (x.end.row == oldStart.row)
-                    x.end.column += collDiff;
-                x.start.row += rowDiff;
-                x.end.row += rowDiff;
-                return x;
-            }));
-        }
-
-        return toRange;
-    };
-    this.indentRows = function(startRow, endRow, indentString) {
-        indentString = indentString.replace(/\t/g, this.getTabString());
-        for (var row=startRow; row<=endRow; row++)
-            this.insert({row: row, column:0}, indentString);
-    };
-    this.outdentRows = function (range) {
-        var rowRange = range.collapseRows();
-        var deleteRange = new Range(0, 0, 0, 0);
-        var size = this.getTabSize();
-
-        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {
-            var line = this.getLine(i);
-
-            deleteRange.start.row = i;
-            deleteRange.end.row = i;
-            for (var j = 0; j < size; ++j)
-                if (line.charAt(j) != ' ')
-                    break;
-            if (j < size && line.charAt(j) == '\t') {
-                deleteRange.start.column = j;
-                deleteRange.end.column = j + 1;
-            } else {
-                deleteRange.start.column = 0;
-                deleteRange.end.column = j;
-            }
-            this.remove(deleteRange);
-        }
-    };
-
-    this.$moveLines = function(firstRow, lastRow, dir) {
-        firstRow = this.getRowFoldStart(firstRow);
-        lastRow = this.getRowFoldEnd(lastRow);
-        if (dir < 0) {
-            var row = this.getRowFoldStart(firstRow + dir);
-            if (row < 0) return 0;
-            var diff = row-firstRow;
-        } else if (dir > 0) {
-            var row = this.getRowFoldEnd(lastRow + dir);
-            if (row > this.doc.getLength()-1) return 0;
-            var diff = row-lastRow;
-        } else {
-            firstRow = this.$clipRowToDocument(firstRow);
-            lastRow = this.$clipRowToDocument(lastRow);
-            var diff = lastRow - firstRow + 1;
-        }
-
-        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);
-        var folds = this.getFoldsInRange(range).map(function(x){
-            x = x.clone();
-            x.start.row += diff;
-            x.end.row += diff;
-            return x;
-        });
-
-        var lines = dir == 0
-            ? this.doc.getLines(firstRow, lastRow)
-            : this.doc.removeLines(firstRow, lastRow);
-        this.doc.insertLines(firstRow+diff, lines);
-        folds.length && this.addFolds(folds);
-        return diff;
-    };
-    this.moveLinesUp = function(firstRow, lastRow) {
-        return this.$moveLines(firstRow, lastRow, -1);
-    };
-    this.moveLinesDown = function(firstRow, lastRow) {
-        return this.$moveLines(firstRow, lastRow, 1);
-    };
-    this.duplicateLines = function(firstRow, lastRow) {
-        return this.$moveLines(firstRow, lastRow, 0);
-    };
-
-
-    this.$clipRowToDocument = function(row) {
-        return Math.max(0, Math.min(row, this.doc.getLength()-1));
-    };
-
-    this.$clipColumnToRow = function(row, column) {
-        if (column < 0)
-            return 0;
-        return Math.min(this.doc.getLine(row).length, column);
-    };
-
-
-    this.$clipPositionToDocument = function(row, column) {
-        column = Math.max(0, column);
-
-        if (row < 0) {
-            row = 0;
-            column = 0;
-        } else {
-            var len = this.doc.getLength();
-            if (row >= len) {
-                row = len - 1;
-                column = this.doc.getLine(len-1).length;
-            } else {
-                column = Math.min(this.doc.getLine(row).length, column);
-            }
-        }
-
-        return {
-            row: row,
-            column: column
-        };
-    };
-
-    this.$clipRangeToDocument = function(range) {
-        if (range.start.row < 0) {
-            range.start.row = 0;
-            range.start.column = 0;
-        } else {
-            range.start.column = this.$clipColumnToRow(
-                range.start.row,
-                range.start.column
-            );
-        }
-
-        var len = this.doc.getLength() - 1;
-        if (range.end.row > len) {
-            range.end.row = len;
-            range.end.column = this.doc.getLine(len).length;
-        } else {
-            range.end.column = this.$clipColumnToRow(
-                range.end.row,
-                range.end.column
-            );
-        }
-        return range;
-    };
-    this.$wrapLimit = 80;
-    this.$useWrapMode = false;
-    this.$wrapLimitRange = {
-        min : null,
-        max : null
-    };
-    this.setUseWrapMode = function(useWrapMode) {
-        if (useWrapMode != this.$useWrapMode) {
-            this.$useWrapMode = useWrapMode;
-            this.$modified = true;
-            this.$resetRowCache(0);
-            if (useWrapMode) {
-                var len = this.getLength();
-                this.$wrapData = [];
-                for (var i = 0; i < len; i++) {
-                    this.$wrapData.push([]);
-                }
-                this.$updateWrapData(0, len - 1);
-            }
-
-            this._emit("changeWrapMode");
-        }
-    };
-    this.getUseWrapMode = function() {
-        return this.$useWrapMode;
-    };
-    this.setWrapLimitRange = function(min, max) {
-        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {
-            this.$wrapLimitRange.min = min;
-            this.$wrapLimitRange.max = max;
-            this.$modified = true;
-            this._emit("changeWrapMode");
-        }
-    };
-    this.adjustWrapLimit = function(desiredLimit, $printMargin) {
-        var limits = this.$wrapLimitRange
-        if (limits.max < 0)
-            limits = {min: $printMargin, max: $printMargin};
-        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);
-        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {
-            this.$wrapLimit = wrapLimit;
-            this.$modified = true;
-            if (this.$useWrapMode) {
-                this.$updateWrapData(0, this.getLength() - 1);
-                this.$resetRowCache(0);
-                this._emit("changeWrapLimit");
-            }
-            return true;
-        }
-        return false;
-    };
-
-    this.$constrainWrapLimit = function(wrapLimit, min, max) {
-        if (min)
-            wrapLimit = Math.max(min, wrapLimit);
-
-        if (max)
-            wrapLimit = Math.min(max, wrapLimit);
-
-        return wrapLimit;
-    };
-    this.getWrapLimit = function() {
-        return this.$wrapLimit;
-    };
-    this.setWrapLimit = function (limit) {
-        this.setWrapLimitRange(limit, limit);
-    };
-    this.getWrapLimitRange = function() {
-        return {
-            min : this.$wrapLimitRange.min,
-            max : this.$wrapLimitRange.max
-        };
-    };
-
-    this.$updateInternalDataOnChange = function(e) {
-        var useWrapMode = this.$useWrapMode;
-        var len;
-        var action = e.data.action;
-        var firstRow = e.data.range.start.row;
-        var lastRow = e.data.range.end.row;
-        var start = e.data.range.start;
-        var end = e.data.range.end;
-        var removedFolds = null;
-
-        if (action.indexOf("Lines") != -1) {
-            if (action == "insertLines") {
-                lastRow = firstRow + (e.data.lines.length);
-            } else {
-                lastRow = firstRow;
-            }
-            len = e.data.lines ? e.data.lines.length : lastRow - firstRow;
-        } else {
-            len = lastRow - firstRow;
-        }
-
-        this.$updating = true;
-        if (len != 0) {
-            if (action.indexOf("remove") != -1) {
-                this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len);
-
-                var foldLines = this.$foldData;
-                removedFolds = this.getFoldsInRange(e.data.range);
-                this.removeFolds(removedFolds);
-
-                var foldLine = this.getFoldLine(end.row);
-                var idx = 0;
-                if (foldLine) {
-                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);
-                    foldLine.shiftRow(-len);
-
-                    var foldLineBefore = this.getFoldLine(firstRow);
-                    if (foldLineBefore && foldLineBefore !== foldLine) {
-                        foldLineBefore.merge(foldLine);
-                        foldLine = foldLineBefore;
-                    }
-                    idx = foldLines.indexOf(foldLine) + 1;
-                }
-
-                for (idx; idx < foldLines.length; idx++) {
-                    var foldLine = foldLines[idx];
-                    if (foldLine.start.row >= end.row) {
-                        foldLine.shiftRow(-len);
-                    }
-                }
-
-                lastRow = firstRow;
-            } else {
-                var args;
-                if (useWrapMode) {
-                    args = [firstRow, 0];
-                    for (var i = 0; i < len; i++) args.push([]);
-                    this.$wrapData.splice.apply(this.$wrapData, args);
-                } else {
-                    args = Array(len);
-                    args.unshift(firstRow, 0);
-                    this.$rowLengthCache.splice.apply(this.$rowLengthCache, args);
-                }
-                var foldLines = this.$foldData;
-                var foldLine = this.getFoldLine(firstRow);
-                var idx = 0;
-                if (foldLine) {
-                    var cmp = foldLine.range.compareInside(start.row, start.column)
-                    if (cmp == 0) {
-                        foldLine = foldLine.split(start.row, start.column);
-                        foldLine.shiftRow(len);
-                        foldLine.addRemoveChars(
-                            lastRow, 0, end.column - start.column);
-                    } else
-                    if (cmp == -1) {
-                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);
-                        foldLine.shiftRow(len);
-                    }
-                    idx = foldLines.indexOf(foldLine) + 1;
-                }
-
-                for (idx; idx < foldLines.length; idx++) {
-                    var foldLine = foldLines[idx];
-                    if (foldLine.start.row >= firstRow) {
-                        foldLine.shiftRow(len);
-                    }
-                }
-            }
-        } else {
-            len = Math.abs(e.data.range.start.column - e.data.range.end.column);
-            if (action.indexOf("remove") != -1) {
-                removedFolds = this.getFoldsInRange(e.data.range);
-                this.removeFolds(removedFolds);
-
-                len = -len;
-            }
-            var foldLine = this.getFoldLine(firstRow);
-            if (foldLine) {
-                foldLine.addRemoveChars(firstRow, start.column, len);
-            }
-        }
-
-        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {
-            console.error("doc.getLength() and $wrapData.length have to be the same!");
-        }
-        this.$updating = false;
-
-        if (useWrapMode)
-            this.$updateWrapData(firstRow, lastRow);
-        else
-            this.$updateRowLengthCache(firstRow, lastRow);
-
-        return removedFolds;
-    };
-
-    this.$updateRowLengthCache = function(firstRow, lastRow, b) {
-        this.$rowLengthCache[firstRow] = null;
-        this.$rowLengthCache[lastRow] = null;
-    };
-
-    this.$updateWrapData = function(firstRow, lastRow) {
-        var lines = this.doc.getAllLines();
-        var tabSize = this.getTabSize();
-        var wrapData = this.$wrapData;
-        var wrapLimit = this.$wrapLimit;
-        var tokens;
-        var foldLine;
-
-        var row = firstRow;
-        lastRow = Math.min(lastRow, lines.length - 1);
-        while (row <= lastRow) {
-            foldLine = this.getFoldLine(row, foldLine);
-            if (!foldLine) {
-                tokens = this.$getDisplayTokens(lang.stringTrimRight(lines[row]));
-                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);
-                row ++;
-            } else {
-                tokens = [];
-                foldLine.walk(function(placeholder, row, column, lastColumn) {
-                        var walkTokens;
-                        if (placeholder != null) {
-                            walkTokens = this.$getDisplayTokens(
-                                            placeholder, tokens.length);
-                            walkTokens[0] = PLACEHOLDER_START;
-                            for (var i = 1; i < walkTokens.length; i++) {
-                                walkTokens[i] = PLACEHOLDER_BODY;
-                            }
-                        } else {
-                            walkTokens = this.$getDisplayTokens(
-                                lines[row].substring(lastColumn, column),
-                                tokens.length);
-                        }
-                        tokens = tokens.concat(walkTokens);
-                    }.bind(this),
-                    foldLine.end.row,
-                    lines[foldLine.end.row].length + 1
-                );
-                while (tokens.length != 0 && tokens[tokens.length - 1] >= SPACE)
-                    tokens.pop();
-
-                wrapData[foldLine.start.row]
-                    = this.$computeWrapSplits(tokens, wrapLimit, tabSize);
-                row = foldLine.end.row + 1;
-            }
-        }
-    };
-    var CHAR = 1,
-        CHAR_EXT = 2,
-        PLACEHOLDER_START = 3,
-        PLACEHOLDER_BODY =  4,
-        PUNCTUATION = 9,
-        SPACE = 10,
-        TAB = 11,
-        TAB_SPACE = 12;
-
-
-    this.$computeWrapSplits = function(tokens, wrapLimit) {
-        if (tokens.length == 0) {
-            return [];
-        }
-
-        var splits = [];
-        var displayLength = tokens.length;
-        var lastSplit = 0, lastDocSplit = 0;
-
-        function addSplit(screenPos) {
-            var displayed = tokens.slice(lastSplit, screenPos);
-            var len = displayed.length;
-            displayed.join("").
-                replace(/12/g, function() {
-                    len -= 1;
-                }).
-                replace(/2/g, function() {
-                    len -= 1;
-                });
-
-            lastDocSplit += len;
-            splits.push(lastDocSplit);
-            lastSplit = screenPos;
-        }
-
-        while (displayLength - lastSplit > wrapLimit) {
-            var split = lastSplit + wrapLimit;
-            if (tokens[split] >= SPACE) {
-                while (tokens[split] >= SPACE) {
-                    split ++;
-                }
-                addSplit(split);
-                continue;
-            }
-            if (tokens[split] == PLACEHOLDER_START
-                || tokens[split] == PLACEHOLDER_BODY)
-            {
-                for (split; split != lastSplit - 1; split--) {
-                    if (tokens[split] == PLACEHOLDER_START) {
-                        break;
-                    }
-                }
-                if (split > lastSplit) {
-                    addSplit(split);
-                    continue;
-                }
-                split = lastSplit + wrapLimit;
-                for (split; split < tokens.length; split++) {
-                    if (tokens[split] != PLACEHOLDER_BODY)
-                    {
-                        break;
-                    }
-                }
-                if (split == tokens.length) {
-                    break;  // Breaks the while-loop.
-                }
-                addSplit(split);
-                continue;
-            }
-            var minSplit = Math.max(split - 10, lastSplit - 1);
-            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {
-                split --;
-            }
-            while (split > minSplit && tokens[split] == PUNCTUATION) {
-                split --;
-            }
-            if (split > minSplit) {
-                addSplit(++split);
-                continue;
-            }
-            split = lastSplit + wrapLimit;
-            addSplit(split);
-        }
-        return splits;
-    };
-    this.$getDisplayTokens = function(str, offset) {
-        var arr = [];
-        var tabSize;
-        offset = offset || 0;
-
-        for (var i = 0; i < str.length; i++) {
-            var c = str.charCodeAt(i);
-            if (c == 9) {
-                tabSize = this.getScreenTabSize(arr.length + offset);
-                arr.push(TAB);
-                for (var n = 1; n < tabSize; n++) {
-                    arr.push(TAB_SPACE);
-                }
-            }
-            else if (c == 32) {
-                arr.push(SPACE);
-            } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {
-                arr.push(PUNCTUATION);
-            }
-            else if (c >= 0x1100 && isFullWidth(c)) {
-                arr.push(CHAR, CHAR_EXT);
-            } else {
-                arr.push(CHAR);
-            }
-        }
-        return arr;
-    };
-    this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {
-        if (maxScreenColumn == 0)
-            return [0, 0];
-        if (maxScreenColumn == null)
-            maxScreenColumn = Infinity;
-        screenColumn = screenColumn || 0;
-
-        var c, column;
-        for (column = 0; column < str.length; column++) {
-            c = str.charCodeAt(column);
-            if (c == 9) {
-                screenColumn += this.getScreenTabSize(screenColumn);
-            }
-            else if (c >= 0x1100 && isFullWidth(c)) {
-                screenColumn += 2;
-            } else {
-                screenColumn += 1;
-            }
-            if (screenColumn > maxScreenColumn) {
-                break;
-            }
-        }
-
-        return [screenColumn, column];
-    };
-    this.getRowLength = function(row) {
-        if (!this.$useWrapMode || !this.$wrapData[row]) {
-            return 1;
-        } else {
-            return this.$wrapData[row].length + 1;
-        }
-    };
-    this.getScreenLastRowColumn = function(screenRow) {
-        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);
-        return this.documentToScreenColumn(pos.row, pos.column);
-    };
-    this.getDocumentLastRowColumn = function(docRow, docColumn) {
-        var screenRow = this.documentToScreenRow(docRow, docColumn);
-        return this.getScreenLastRowColumn(screenRow);
-    };
-    this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {
-        var screenRow = this.documentToScreenRow(docRow, docColumn);
-        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);
-    };
-    this.getRowSplitData = function(row) {
-        if (!this.$useWrapMode) {
-            return undefined;
-        } else {
-            return this.$wrapData[row];
-        }
-    };
-    this.getScreenTabSize = function(screenColumn) {
-        return this.$tabSize - screenColumn % this.$tabSize;
-    };
-
-
-    this.screenToDocumentRow = function(screenRow, screenColumn) {
-        return this.screenToDocumentPosition(screenRow, screenColumn).row;
-    };
-
-
-    this.screenToDocumentColumn = function(screenRow, screenColumn) {
-        return this.screenToDocumentPosition(screenRow, screenColumn).column;
-    };
-    this.screenToDocumentPosition = function(screenRow, screenColumn) {
-        if (screenRow < 0)
-            return {row: 0, column: 0};
-
-        var line;
-        var docRow = 0;
-        var docColumn = 0;
-        var column;
-        var row = 0;
-        var rowLength = 0;
-
-        var rowCache = this.$screenRowCache;
-        var i = this.$getRowCacheIndex(rowCache, screenRow);
-        var l = rowCache.length;
-        if (l && i >= 0) {
-            var row = rowCache[i];
-            var docRow = this.$docRowCache[i];
-            var doCache = screenRow > rowCache[l - 1];
-        } else {
-            var doCache = !l;
-        }
-
-        var maxRow = this.getLength() - 1;
-        var foldLine = this.getNextFoldLine(docRow);
-        var foldStart = foldLine ? foldLine.start.row : Infinity;
-
-        while (row <= screenRow) {
-            rowLength = this.getRowLength(docRow);
-            if (row + rowLength - 1 >= screenRow || docRow >= maxRow) {
-                break;
-            } else {
-                row += rowLength;
-                docRow++;
-                if (docRow > foldStart) {
-                    docRow = foldLine.end.row+1;
-                    foldLine = this.getNextFoldLine(docRow, foldLine);
-                    foldStart = foldLine ? foldLine.start.row : Infinity;
-                }
-            }
-
-            if (doCache) {
-                this.$docRowCache.push(docRow);
-                this.$screenRowCache.push(row);
-            }
-        }
-
-        if (foldLine && foldLine.start.row <= docRow) {
-            line = this.getFoldDisplayLine(foldLine);
-            docRow = foldLine.start.row;
-        } else if (row + rowLength <= screenRow || docRow > maxRow) {
-            return {
-                row: maxRow,
-                column: this.getLine(maxRow).length
-            }
-        } else {
-            line = this.getLine(docRow);
-            foldLine = null;
-        }
-
-        if (this.$useWrapMode) {
-            var splits = this.$wrapData[docRow];
-            if (splits) {
-                column = splits[screenRow - row];
-                if(screenRow > row && splits.length) {
-                    docColumn = splits[screenRow - row - 1] || splits[splits.length - 1];
-                    line = line.substring(docColumn);
-                }
-            }
-        }
-
-        docColumn += this.$getStringScreenWidth(line, screenColumn)[1];
-        if (this.$useWrapMode && docColumn >= column)
-            docColumn = column - 1;
-
-        if (foldLine)
-            return foldLine.idxToPosition(docColumn);
-
-        return {row: docRow, column: docColumn};
-    };
-    this.documentToScreenPosition = function(docRow, docColumn) {
-        if (typeof docColumn === "undefined")
-            var pos = this.$clipPositionToDocument(docRow.row, docRow.column);
-        else
-            pos = this.$clipPositionToDocument(docRow, docColumn);
-
-        docRow = pos.row;
-        docColumn = pos.column;
-
-        var screenRow = 0;
-        var foldStartRow = null;
-        var fold = null;
-        fold = this.getFoldAt(docRow, docColumn, 1);
-        if (fold) {
-            docRow = fold.start.row;
-            docColumn = fold.start.column;
-        }
-
-        var rowEnd, row = 0;
-
-
-        var rowCache = this.$docRowCache;
-        var i = this.$getRowCacheIndex(rowCache, docRow);
-        var l = rowCache.length;
-        if (l && i >= 0) {
-            var row = rowCache[i];
-            var screenRow = this.$screenRowCache[i];
-            var doCache = docRow > rowCache[l - 1];
-        } else {
-            var doCache = !l;
-        }
-
-        var foldLine = this.getNextFoldLine(row);
-        var foldStart = foldLine ?foldLine.start.row :Infinity;
-
-        while (row < docRow) {
-            if (row >= foldStart) {
-                rowEnd = foldLine.end.row + 1;
-                if (rowEnd > docRow)
-                    break;
-                foldLine = this.getNextFoldLine(rowEnd, foldLine);
-                foldStart = foldLine ?foldLine.start.row :Infinity;
-            }
-            else {
-                rowEnd = row + 1;
-            }
-
-            screenRow += this.getRowLength(row);
-            row = rowEnd;
-
-            if (doCache) {
-                this.$docRowCache.push(row);
-                this.$screenRowCache.push(screenRow);
-            }
-        }
-        var textLine = "";
-        if (foldLine && row >= foldStart) {
-            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);
-            foldStartRow = foldLine.start.row;
-        } else {
-            textLine = this.getLine(docRow).substring(0, docColumn);
-            foldStartRow = docRow;
-        }
-        if (this.$useWrapMode) {
-            var wrapRow = this.$wrapData[foldStartRow];
-            var screenRowOffset = 0;
-            while (textLine.length >= wrapRow[screenRowOffset]) {
-                screenRow ++;
-                screenRowOffset++;
-            }
-            textLine = textLine.substring(
-                wrapRow[screenRowOffset - 1] || 0, textLine.length
-            );
-        }
-
-        return {
-            row: screenRow,
-            column: this.$getStringScreenWidth(textLine)[0]
-        };
-    };
-    this.documentToScreenColumn = function(row, docColumn) {
-        return this.documentToScreenPosition(row, docColumn).column;
-    };
-    this.documentToScreenRow = function(docRow, docColumn) {
-        return this.documentToScreenPosition(docRow, docColumn).row;
-    };
-    this.getScreenLength = function() {
-        var screenRows = 0;
-        var fold = null;
-        if (!this.$useWrapMode) {
-            screenRows = this.getLength();
-            var foldData = this.$foldData;
-            for (var i = 0; i < foldData.length; i++) {
-                fold = foldData[i];
-                screenRows -= fold.end.row - fold.start.row;
-            }
-        } else {
-            var lastRow = this.$wrapData.length;
-            var row = 0, i = 0;
-            var fold = this.$foldData[i++];
-            var foldStart = fold ? fold.start.row :Infinity;
-
-            while (row < lastRow) {
-                screenRows += this.$wrapData[row].length + 1;
-                row ++;
-                if (row > foldStart) {
-                    row = fold.end.row+1;
-                    fold = this.$foldData[i++];
-                    foldStart = fold ?fold.start.row :Infinity;
-                }
-            }
-        }
-
-        return screenRows;
-    };
-    function isFullWidth(c) {
-        if (c < 0x1100)
-            return false;
-        return c >= 0x1100 && c <= 0x115F ||
-               c >= 0x11A3 && c <= 0x11A7 ||
-               c >= 0x11FA && c <= 0x11FF ||
-               c >= 0x2329 && c <= 0x232A ||
-               c >= 0x2E80 && c <= 0x2E99 ||
-               c >= 0x2E9B && c <= 0x2EF3 ||
-               c >= 0x2F00 && c <= 0x2FD5 ||
-               c >= 0x2FF0 && c <= 0x2FFB ||
-               c >= 0x3000 && c <= 0x303E ||
-               c >= 0x3041 && c <= 0x3096 ||
-               c >= 0x3099 && c <= 0x30FF ||
-               c >= 0x3105 && c <= 0x312D ||
-               c >= 0x3131 && c <= 0x318E ||
-               c >= 0x3190 && c <= 0x31BA ||
-               c >= 0x31C0 && c <= 0x31E3 ||
-               c >= 0x31F0 && c <= 0x321E ||
-               c >= 0x3220 && c <= 0x3247 ||
-               c >= 0x3250 && c <= 0x32FE ||
-               c >= 0x3300 && c <= 0x4DBF ||
-               c >= 0x4E00 && c <= 0xA48C ||
-               c >= 0xA490 && c <= 0xA4C6 ||
-               c >= 0xA960 && c <= 0xA97C ||
-               c >= 0xAC00 && c <= 0xD7A3 ||
-               c >= 0xD7B0 && c <= 0xD7C6 ||
-               c >= 0xD7CB && c <= 0xD7FB ||
-               c >= 0xF900 && c <= 0xFAFF ||
-               c >= 0xFE10 && c <= 0xFE19 ||
-               c >= 0xFE30 && c <= 0xFE52 ||
-               c >= 0xFE54 && c <= 0xFE66 ||
-               c >= 0xFE68 && c <= 0xFE6B ||
-               c >= 0xFF01 && c <= 0xFF60 ||
-               c >= 0xFFE0 && c <= 0xFFE6;
-    };
-
-}).call(EditSession.prototype);
-
-require("./edit_session/folding").Folding.call(EditSession.prototype);
-require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype);
-
-
-config.defineOptions(EditSession.prototype, "session", {
-    wrap: {
-        set: function(value) {
-            if (!value || value == "off")
-                value = false;
-            else if (value == "free")
-                value = true;
-            else if (value == "printMargin")
-                value = -1;
-            else if (typeof value == "string")
-                value = parseInt(value, 10) || false;
-
-            if (this.$wrap == value)
-                return;
-            if (!value) {
-                this.setUseWrapMode(false);
-            } else {
-                var col = typeof value == "number" ? value : null;
-                this.setWrapLimitRange(col, col);
-                this.setUseWrapMode(true);
-            }
-            this.$wrap = value;
-        },
-        get: function() {
-            return this.getUseWrapMode() ? this.getWrapLimitRange().min || "free" : "off";
-        },
-        handlesSet: true
-    },
-    firstLineNumber: {
-        set: function() {this._emit("changeBreakpoint");},
-        initialValue: 1
-    },
-    useWorker: {
-        set: function(useWorker) {
-            this.$useWorker = useWorker;
-
-            this.$stopWorker();
-            if (useWorker)
-                this.$startWorker();
-        },
-        initialValue: true
-    },
-    useSoftTabs: {initialValue: true},
-    tabSize: {
-        set: function(tabSize) {
-            if (isNaN(tabSize) || this.$tabSize === tabSize) return;
-
-            this.$modified = true;
-            this.$rowLengthCache = [];
-            this.$tabSize = tabSize;
-            this._emit("changeTabSize");
-        },
-        initialValue: 4,
-        handlesSet: true
-    },
-    overwrite: {
-        set: function(val) {this._emit("changeOverwrite");},
-        initialValue: false
-    },
-    newLineMode: {
-        set: function(val) {this.doc.setNewLineMode(val)},
-        get: function() {return this.doc.getNewLineMode()},
-        handlesSet: true
-    }
-});
-
-exports.EditSession = EditSession;
-});
-
-define('ace/selection', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/event_emitter', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var lang = require("./lib/lang");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Selection = function(session) {
-    this.session = session;
-    this.doc = session.getDocument();
-
-    this.clearSelection();
-    this.lead = this.selectionLead = this.doc.createAnchor(0, 0);
-    this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);
-
-    var self = this;
-    this.lead.on("change", function(e) {
-        self._emit("changeCursor");
-        if (!self.$isEmpty)
-            self._emit("changeSelection");
-        if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)
-            self.$desiredColumn = null;
-    });
-
-    this.selectionAnchor.on("change", function() {
-        if (!self.$isEmpty)
-            self._emit("changeSelection");
-    });
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.isEmpty = function() {
-        return (this.$isEmpty || (
-            this.anchor.row == this.lead.row &&
-            this.anchor.column == this.lead.column
-        ));
-    };
-    this.isMultiLine = function() {
-        if (this.isEmpty()) {
-            return false;
-        }
-
-        return this.getRange().isMultiLine();
-    };
-    this.getCursor = function() {
-        return this.lead.getPosition();
-    };
-    this.setSelectionAnchor = function(row, column) {
-        this.anchor.setPosition(row, column);
-
-        if (this.$isEmpty) {
-            this.$isEmpty = false;
-            this._emit("changeSelection");
-        }
-    };
-    this.getSelectionAnchor = function() {
-        if (this.$isEmpty)
-            return this.getSelectionLead()
-        else
-            return this.anchor.getPosition();
-    };
-    this.getSelectionLead = function() {
-        return this.lead.getPosition();
-    };
-    this.shiftSelection = function(columns) {
-        if (this.$isEmpty) {
-            this.moveCursorTo(this.lead.row, this.lead.column + columns);
-            return;
-        };
-
-        var anchor = this.getSelectionAnchor();
-        var lead = this.getSelectionLead();
-
-        var isBackwards = this.isBackwards();
-
-        if (!isBackwards || anchor.column !== 0)
-            this.setSelectionAnchor(anchor.row, anchor.column + columns);
-
-        if (isBackwards || lead.column !== 0) {
-            this.$moveSelection(function() {
-                this.moveCursorTo(lead.row, lead.column + columns);
-            });
-        }
-    };
-    this.isBackwards = function() {
-        var anchor = this.anchor;
-        var lead = this.lead;
-        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));
-    };
-    this.getRange = function() {
-        var anchor = this.anchor;
-        var lead = this.lead;
-
-        if (this.isEmpty())
-            return Range.fromPoints(lead, lead);
-
-        if (this.isBackwards()) {
-            return Range.fromPoints(lead, anchor);
-        }
-        else {
-            return Range.fromPoints(anchor, lead);
-        }
-    };
-    this.clearSelection = function() {
-        if (!this.$isEmpty) {
-            this.$isEmpty = true;
-            this._emit("changeSelection");
-        }
-    };
-    this.selectAll = function() {
-        var lastRow = this.doc.getLength() - 1;
-        this.setSelectionAnchor(0, 0);
-        this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);
-    };
-    this.setRange =
-    this.setSelectionRange = function(range, reverse) {
-        if (reverse) {
-            this.setSelectionAnchor(range.end.row, range.end.column);
-            this.selectTo(range.start.row, range.start.column);
-        } else {
-            this.setSelectionAnchor(range.start.row, range.start.column);
-            this.selectTo(range.end.row, range.end.column);
-        }
-        this.$desiredColumn = null;
-    };
-
-    this.$moveSelection = function(mover) {
-        var lead = this.lead;
-        if (this.$isEmpty)
-            this.setSelectionAnchor(lead.row, lead.column);
-
-        mover.call(this);
-    };
-    this.selectTo = function(row, column) {
-        this.$moveSelection(function() {
-            this.moveCursorTo(row, column);
-        });
-    };
-    this.selectToPosition = function(pos) {
-        this.$moveSelection(function() {
-            this.moveCursorToPosition(pos);
-        });
-    };
-    this.selectUp = function() {
-        this.$moveSelection(this.moveCursorUp);
-    };
-    this.selectDown = function() {
-        this.$moveSelection(this.moveCursorDown);
-    };
-    this.selectRight = function() {
-        this.$moveSelection(this.moveCursorRight);
-    };
-    this.selectLeft = function() {
-        this.$moveSelection(this.moveCursorLeft);
-    };
-    this.selectLineStart = function() {
-        this.$moveSelection(this.moveCursorLineStart);
-    };
-    this.selectLineEnd = function() {
-        this.$moveSelection(this.moveCursorLineEnd);
-    };
-    this.selectFileEnd = function() {
-        this.$moveSelection(this.moveCursorFileEnd);
-    };
-    this.selectFileStart = function() {
-        this.$moveSelection(this.moveCursorFileStart);
-    };
-    this.selectWordRight = function() {
-        this.$moveSelection(this.moveCursorWordRight);
-    };
-    this.selectWordLeft = function() {
-        this.$moveSelection(this.moveCursorWordLeft);
-    };
-    this.getWordRange = function(row, column) {
-        if (typeof column == "undefined") {
-            var cursor = row || this.lead;
-            row = cursor.row;
-            column = cursor.column;
-        }
-        return this.session.getWordRange(row, column);
-    };
-    this.selectWord = function() {
-        this.setSelectionRange(this.getWordRange());
-    };
-    this.selectAWord = function() {
-        var cursor = this.getCursor();
-        var range = this.session.getAWordRange(cursor.row, cursor.column);
-        this.setSelectionRange(range);
-    };
-
-    this.getLineRange = function(row, excludeLastChar) {
-        var rowStart = typeof row == "number" ? row : this.lead.row;
-        var rowEnd;
-
-        var foldLine = this.session.getFoldLine(rowStart);
-        if (foldLine) {
-            rowStart = foldLine.start.row;
-            rowEnd = foldLine.end.row;
-        } else {
-            rowEnd = rowStart;
-        }
-        if (excludeLastChar)
-            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);
-        else
-            return new Range(rowStart, 0, rowEnd + 1, 0);
-    };
-    this.selectLine = function() {
-        this.setSelectionRange(this.getLineRange());
-    };
-    this.moveCursorUp = function() {
-        this.moveCursorBy(-1, 0);
-    };
-    this.moveCursorDown = function() {
-        this.moveCursorBy(1, 0);
-    };
-    this.moveCursorLeft = function() {
-        var cursor = this.lead.getPosition(),
-            fold;
-
-        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {
-            this.moveCursorTo(fold.start.row, fold.start.column);
-        } else if (cursor.column == 0) {
-            if (cursor.row > 0) {
-                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);
-            }
-        }
-        else {
-            var tabSize = this.session.getTabSize();
-            if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize)
-                this.moveCursorBy(0, -tabSize);
-            else
-                this.moveCursorBy(0, -1);
-        }
-    };
-    this.moveCursorRight = function() {
-        var cursor = this.lead.getPosition(),
-            fold;
-        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {
-            this.moveCursorTo(fold.end.row, fold.end.column);
-        }
-        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {
-            if (this.lead.row < this.doc.getLength() - 1) {
-                this.moveCursorTo(this.lead.row + 1, 0);
-            }
-        }
-        else {
-            var tabSize = this.session.getTabSize();
-            var cursor = this.lead;
-            if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize)
-                this.moveCursorBy(0, tabSize);
-            else
-                this.moveCursorBy(0, 1);
-        }
-    };
-    this.moveCursorLineStart = function() {
-        var row = this.lead.row;
-        var column = this.lead.column;
-        var screenRow = this.session.documentToScreenRow(row, column);
-        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);
-        var beforeCursor = this.session.getDisplayLine(
-            row, null, firstColumnPosition.row,
-            firstColumnPosition.column
-        );
-
-        var leadingSpace = beforeCursor.match(/^\s*/);
-        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)
-            firstColumnPosition.column += leadingSpace[0].length;
-        this.moveCursorToPosition(firstColumnPosition);
-    };
-    this.moveCursorLineEnd = function() {
-        var lead = this.lead;
-        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);
-        if (this.lead.column == lineEnd.column) {
-            var line = this.session.getLine(lineEnd.row);
-            if (lineEnd.column == line.length) {
-                var textEnd = line.search(/\s+$/);
-                if (textEnd > 0)
-                    lineEnd.column = textEnd;
-            }
-        }
-
-        this.moveCursorTo(lineEnd.row, lineEnd.column);
-    };
-    this.moveCursorFileEnd = function() {
-        var row = this.doc.getLength() - 1;
-        var column = this.doc.getLine(row).length;
-        this.moveCursorTo(row, column);
-    };
-    this.moveCursorFileStart = function() {
-        this.moveCursorTo(0, 0);
-    };
-    this.moveCursorLongWordRight = function() {
-        var row = this.lead.row;
-        var column = this.lead.column;
-        var line = this.doc.getLine(row);
-        var rightOfCursor = line.substring(column);
-
-        var match;
-        this.session.nonTokenRe.lastIndex = 0;
-        this.session.tokenRe.lastIndex = 0;
-        var fold = this.session.getFoldAt(row, column, 1);
-        if (fold) {
-            this.moveCursorTo(fold.end.row, fold.end.column);
-            return;
-        }
-        if (match = this.session.nonTokenRe.exec(rightOfCursor)) {
-            column += this.session.nonTokenRe.lastIndex;
-            this.session.nonTokenRe.lastIndex = 0;
-            rightOfCursor = line.substring(column);
-        }
-        if (column >= line.length) {
-            this.moveCursorTo(row, line.length);
-            this.moveCursorRight();
-            if (row < this.doc.getLength() - 1)
-                this.moveCursorWordRight();
-            return;
-        }
-        if (match = this.session.tokenRe.exec(rightOfCursor)) {
-            column += this.session.tokenRe.lastIndex;
-            this.session.tokenRe.lastIndex = 0;
-        }
-
-        this.moveCursorTo(row, column);
-    };
-    this.moveCursorLongWordLeft = function() {
-        var row = this.lead.row;
-        var column = this.lead.column;
-        var fold;
-        if (fold = this.session.getFoldAt(row, column, -1)) {
-            this.moveCursorTo(fold.start.row, fold.start.column);
-            return;
-        }
-
-        var str = this.session.getFoldStringAt(row, column, -1);
-        if (str == null) {
-            str = this.doc.getLine(row).substring(0, column)
-        }
-
-        var leftOfCursor = lang.stringReverse(str);
-        var match;
-        this.session.nonTokenRe.lastIndex = 0;
-        this.session.tokenRe.lastIndex = 0;
-        if (match = this.session.nonTokenRe.exec(leftOfCursor)) {
-            column -= this.session.nonTokenRe.lastIndex;
-            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);
-            this.session.nonTokenRe.lastIndex = 0;
-        }
-        if (column <= 0) {
-            this.moveCursorTo(row, 0);
-            this.moveCursorLeft();
-            if (row > 0)
-                this.moveCursorWordLeft();
-            return;
-        }
-        if (match = this.session.tokenRe.exec(leftOfCursor)) {
-            column -= this.session.tokenRe.lastIndex;
-            this.session.tokenRe.lastIndex = 0;
-        }
-
-        this.moveCursorTo(row, column);
-    };
-
-    this.$shortWordEndIndex = function(rightOfCursor) {
-        var match, index = 0, ch;
-        var whitespaceRe = /\s/;
-        var tokenRe = this.session.tokenRe;
-
-        tokenRe.lastIndex = 0;
-        if (match = this.session.tokenRe.exec(rightOfCursor)) {
-            index = this.session.tokenRe.lastIndex;
-        } else {
-            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))
-                index ++;
-
-            if (index <= 1) {
-                tokenRe.lastIndex = 0;
-                 while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {
-                    tokenRe.lastIndex = 0;
-                    index ++;
-                    if (whitespaceRe.test(ch)) {
-                        if (index > 2) {
-                            index--
-                            break;
-                        } else {
-                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))
-                                index ++;
-                            if (index > 2)
-                                break
-                        }
-                    }
-                }
-            }
-        }
-        tokenRe.lastIndex = 0;
-
-        return index;
-    };
-
-    this.moveCursorShortWordRight = function() {
-        var row = this.lead.row;
-        var column = this.lead.column;
-        var line = this.doc.getLine(row);
-        var rightOfCursor = line.substring(column);
-
-        var fold = this.session.getFoldAt(row, column, 1);
-        if (fold)
-            return this.moveCursorTo(fold.end.row, fold.end.column);
-
-        if (column == line.length) {
-            var l = this.doc.getLength();
-            do {    
-                row++;
-                rightOfCursor = this.doc.getLine(row)
-            } while (row < l && /^\s*$/.test(rightOfCursor))
-            
-            if (!/^\s+/.test(rightOfCursor))
-                rightOfCursor = ""
-            column = 0;
-        }
-
-        var index = this.$shortWordEndIndex(rightOfCursor);
-
-        this.moveCursorTo(row, column + index);
-    };
-
-    this.moveCursorShortWordLeft = function() {
-        var row = this.lead.row;
-        var column = this.lead.column;
-
-        var fold;
-        if (fold = this.session.getFoldAt(row, column, -1))
-            return this.moveCursorTo(fold.start.row, fold.start.column);
-
-        var line = this.session.getLine(row).substring(0, column);
-        if (column == 0) {
-            do {    
-                row--;
-                line = this.doc.getLine(row);
-            } while (row > 0 && /^\s*$/.test(line))
-            
-            column = line.length;
-            if (!/\s+$/.test(line))
-                line = ""
-        }
-
-        var leftOfCursor = lang.stringReverse(line);
-        var index = this.$shortWordEndIndex(leftOfCursor);
-
-        return this.moveCursorTo(row, column - index);
-    };
-
-    this.moveCursorWordRight = function() {
-        if (this.session.$selectLongWords)
-            this.moveCursorLongWordRight();
-        else
-            this.moveCursorShortWordRight();
-    };
-
-    this.moveCursorWordLeft = function() {
-        if (this.session.$selectLongWords)
-            this.moveCursorLongWordLeft();
-        else
-            this.moveCursorShortWordLeft();
-    };
-    this.moveCursorBy = function(rows, chars) {
-        var screenPos = this.session.documentToScreenPosition(
-            this.lead.row,
-            this.lead.column
-        );
-
-        if (chars === 0) {
-            if (this.$desiredColumn)
-                screenPos.column = this.$desiredColumn;
-            else
-                this.$desiredColumn = screenPos.column;
-        }
-
-        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);
-        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);
-    };
-    this.moveCursorToPosition = function(position) {
-        this.moveCursorTo(position.row, position.column);
-    };
-    this.moveCursorTo = function(row, column, keepDesiredColumn) {
-        var fold = this.session.getFoldAt(row, column, 1);
-        if (fold) {
-            row = fold.start.row;
-            column = fold.start.column;
-        }
-
-        this.$keepDesiredColumnOnChange = true;
-        this.lead.setPosition(row, column);
-        this.$keepDesiredColumnOnChange = false;
-
-        if (!keepDesiredColumn)
-            this.$desiredColumn = null;
-    };
-    this.moveCursorToScreen = function(row, column, keepDesiredColumn) {
-        var pos = this.session.screenToDocumentPosition(row, column);
-        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);
-    };
-    this.detach = function() {
-        this.lead.detach();
-        this.anchor.detach();
-        this.session = this.doc = null;
-    }
-
-    this.fromOrientedRange = function(range) {
-        this.setSelectionRange(range, range.cursor == range.start);
-        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;
-    }
-
-    this.toOrientedRange = function(range) {
-        var r = this.getRange();
-        if (range) {
-            range.start.column = r.start.column;
-            range.start.row = r.start.row;
-            range.end.column = r.end.column;
-            range.end.row = r.end.row;
-        } else {
-            range = r;
-        }
-
-        range.cursor = this.isBackwards() ? range.start : range.end;
-        range.desiredColumn = this.$desiredColumn;
-        return range;
-    }
-
-}).call(Selection.prototype);
-
-exports.Selection = Selection;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/mode/text', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/behaviour', 'ace/unicode', 'ace/lib/lang', 'ace/token_iterator', 'ace/range'], function(require, exports, module) {
-
-
-var Tokenizer = require("../tokenizer").Tokenizer;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var Behaviour = require("./behaviour").Behaviour;
-var unicode = require("../unicode");
-var lang = require("../lib/lang");
-var TokenIterator = require("../token_iterator").TokenIterator;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new TextHighlightRules().getRules());
-    this.$behaviour = new Behaviour();
-};
-
-(function() {
-
-    this.tokenRe = new RegExp("^["
-        + unicode.packages.L
-        + unicode.packages.Mn + unicode.packages.Mc
-        + unicode.packages.Nd
-        + unicode.packages.Pc + "\\$_]+", "g"
-    );
-
-    this.nonTokenRe = new RegExp("^(?:[^"
-        + unicode.packages.L
-        + unicode.packages.Mn + unicode.packages.Mc
-        + unicode.packages.Nd
-        + unicode.packages.Pc + "\\$_]|\s])+", "g"
-    );
-
-    this.getTokenizer = function() {
-        return this.$tokenizer;
-    };
-
-    this.lineCommentStart = "";
-    this.blockComment = "";
-
-    this.toggleCommentLines = function(state, session, startRow, endRow) {
-        var doc = session.doc;
-
-        var ignoreBlankLines = true;
-        var shouldRemove = true;
-        var minIndent = Infinity;
-        var tabSize = session.getTabSize();
-        var insertAtTabStop = false;
-
-        if (!this.lineCommentStart) {
-            if (!this.blockComment)
-                return false;
-            var lineCommentStart = this.blockComment.start;
-            var lineCommentEnd = this.blockComment.end;
-            var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")");
-            var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$");
-
-            var comment = function(line, i) {
-                if (testRemove(line, i))
-                    return;
-                if (!ignoreBlankLines || /\S/.test(line)) {
-                    doc.insertInLine({row: i, column: line.length}, lineCommentEnd);
-                    doc.insertInLine({row: i, column: minIndent}, lineCommentStart);
-                }
-            };
-
-            var uncomment = function(line, i) {
-                var m;
-                if (m = line.match(regexpEnd))
-                    doc.removeInLine(i, line.length - m[0].length, line.length);
-                if (m = line.match(regexpStart))
-                    doc.removeInLine(i, m[1].length, m[0].length);
-            };
-
-            var testRemove = function(line, row) {
-                if (regexpStart.test(line))
-                    return true;
-                var tokens = session.getTokens(row);
-                for (var i = 0; i < tokens.length; i++) {
-                    if (tokens[i].type === 'comment')
-                        return true;
-                }
-            };
-        } else {
-            if (Array.isArray(this.lineCommentStart)) {
-                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|");
-                var lineCommentStart = this.lineCommentStart[0];
-            } else {
-                var regexpStart = lang.escapeRegExp(this.lineCommentStart);
-                var lineCommentStart = this.lineCommentStart;
-            }
-            regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?");
-            
-            insertAtTabStop = session.getUseSoftTabs();
-
-            var uncomment = function(line, i) {
-                var m = line.match(regexpStart);
-                if (!m) return;
-                var start = m[1].length, end = m[0].length;
-                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ")
-                    end--;
-                doc.removeInLine(i, start, end);
-            };
-            var commentWithSpace = lineCommentStart + " ";
-            var comment = function(line, i) {
-                if (!ignoreBlankLines || /\S/.test(line)) {
-                    if (shouldInsertSpace(line, minIndent, minIndent))
-                        doc.insertInLine({row: i, column: minIndent}, commentWithSpace);
-                    else
-                        doc.insertInLine({row: i, column: minIndent}, lineCommentStart);
-                }
-            };
-            var testRemove = function(line, i) {
-                return regexpStart.test(line);
-            };
-            
-            var shouldInsertSpace = function(line, before, after) {
-                var spaces = 0;
-                while (before-- && line.charAt(before) == " ")
-                    spaces++;
-                if (spaces % tabSize != 0)
-                    return false;
-                var spaces = 0;
-                while (line.charAt(after++) == " ")
-                    spaces++;
-                if (tabSize > 2)
-                    return spaces % tabSize != tabSize - 1;
-                else
-                    return spaces % tabSize == 0;
-                return true;
-            };
-        }
-
-        function iter(fun) {
-            for (var i = startRow; i <= endRow; i++)
-                fun(doc.getLine(i), i);
-        }
-
-
-        var minEmptyLength = Infinity;
-        iter(function(line, i) {
-            var indent = line.search(/\S/);
-            if (indent !== -1) {
-                if (indent < minIndent)
-                    minIndent = indent;
-                if (shouldRemove && !testRemove(line, i))
-                    shouldRemove = false;
-            } else if (minEmptyLength > line.length) {
-                minEmptyLength = line.length;
-            }
-        });
-
-        if (minIndent == Infinity) {
-            minIndent = minEmptyLength;
-            ignoreBlankLines = false;
-            shouldRemove = false;
-        }
-
-        if (insertAtTabStop && minIndent % tabSize != 0)
-            minIndent = Math.floor(minIndent / tabSize) * tabSize;
-
-        iter(shouldRemove ? uncomment : comment);
-    };
-
-    this.toggleBlockComment = function(state, session, range, cursor) {
-        var comment = this.blockComment;
-        if (!comment)
-            return;
-        if (!comment.start && comment[0])
-            comment = comment[0];
-
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        var token = iterator.getCurrentToken();
-
-        var sel = session.selection;
-        var initialRange = session.selection.toOrientedRange();
-        var startRow, colDiff;
-
-        if (token && /comment/.test(token.type)) {
-            var startRange, endRange;
-            while (token && /comment/.test(token.type)) {
-                var i = token.value.indexOf(comment.start);
-                if (i != -1) {
-                    var row = iterator.getCurrentTokenRow();
-                    var column = iterator.getCurrentTokenColumn() + i;
-                    startRange = new Range(row, column, row, column + comment.start.length);
-                    break
-                }
-                token = iterator.stepBackward();
-            };
-
-            var iterator = new TokenIterator(session, cursor.row, cursor.column);
-            var token = iterator.getCurrentToken();
-            while (token && /comment/.test(token.type)) {
-                var i = token.value.indexOf(comment.end);
-                if (i != -1) {
-                    var row = iterator.getCurrentTokenRow();
-                    var column = iterator.getCurrentTokenColumn() + i;
-                    endRange = new Range(row, column, row, column + comment.end.length);
-                    break;
-                }
-                token = iterator.stepForward();
-            }
-            if (endRange)
-                session.remove(endRange);
-            if (startRange) {
-                session.remove(startRange);
-                startRow = startRange.start.row;
-                colDiff = -comment.start.length
-            }
-        } else {
-            colDiff = comment.start.length
-            startRow = range.start.row;
-            session.insert(range.end, comment.end);
-            session.insert(range.start, comment.start);
-        }
-        if (initialRange.start.row == startRow)
-            initialRange.start.column += colDiff;
-        if (initialRange.end.row == startRow)
-            initialRange.end.column += colDiff;
-        session.selection.fromOrientedRange(initialRange);
-    };
-
-    this.getNextLineIndent = function(state, line, tab) {
-        return this.$getIndent(line);
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return false;
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-    this.createWorker = function(session) {
-        return null;
-    };
-
-    this.createModeDelegates = function (mapping) {
-        if (!this.$embeds) {
-            return;
-        }
-        this.$modes = {};
-        for (var i = 0; i < this.$embeds.length; i++) {
-            if (mapping[this.$embeds[i]]) {
-                this.$modes[this.$embeds[i]] = new mapping[this.$embeds[i]]();
-            }
-        }
-
-        var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent', 'transformAction'];
-
-        for (var i = 0; i < delegations.length; i++) {
-            (function(scope) {
-              var functionName = delegations[i];
-              var defaultHandler = scope[functionName];
-              scope[delegations[i]] = function() {
-                  return this.$delegator(functionName, arguments, defaultHandler);
-              }
-            } (this));
-        }
-    };
-
-    this.$delegator = function(method, args, defaultHandler) {
-        var state = args[0];
-        if (typeof state != "string")
-            state = state[0];
-        for (var i = 0; i < this.$embeds.length; i++) {
-            if (!this.$modes[this.$embeds[i]]) continue;
-
-            var split = state.split(this.$embeds[i]);
-            if (!split[0] && split[1]) {
-                args[0] = split[1];
-                var mode = this.$modes[this.$embeds[i]];
-                return mode[method].apply(mode, args);
-            }
-        }
-        var ret = defaultHandler.apply(this, args);
-        return defaultHandler ? ret : undefined;
-    };
-
-    this.transformAction = function(state, action, editor, session, param) {
-        if (this.$behaviour) {
-            var behaviours = this.$behaviour.getBehaviours();
-            for (var key in behaviours) {
-                if (behaviours[key][action]) {
-                    var ret = behaviours[key][action].apply(this, arguments);
-                    if (ret) {
-                        return ret;
-                    }
-                }
-            }
-        }
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/tokenizer', ['require', 'exports', 'module' ], function(require, exports, module) {
-var MAX_TOKEN_COUNT = 1000;
-var Tokenizer = function(rules) {
-    this.states = rules;
-
-    this.regExps = {};
-    this.matchMappings = {};
-    for (var key in this.states) {
-        var state = this.states[key];
-        var ruleRegExps = [];
-        var matchTotal = 0;
-        var mapping = this.matchMappings[key] = {defaultToken: "text"};
-        var flag = "g";
-
-        var splitterRurles = [];
-        for (var i = 0; i < state.length; i++) {
-            var rule = state[i];
-            if (rule.defaultToken)
-                mapping.defaultToken = rule.defaultToken;
-            if (rule.caseInsensitive)
-                flag = "gi";
-            if (rule.regex == null)
-                continue;
-
-            if (rule.regex instanceof RegExp)
-                rule.regex = rule.regex.toString().slice(1, -1);
-            var adjustedregex = rule.regex;
-            var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2;
-            if (Array.isArray(rule.token)) {
-                if (rule.token.length == 1 || matchcount == 1) {
-                    rule.token = rule.token[0];
-                } else if (matchcount - 1 != rule.token.length) {
-                    throw new Error("number of classes and regexp groups in '" + 
-                        rule.token + "'\n'" + rule.regex +  "' doesn't match\n"
-                        + (matchcount - 1) + "!=" + rule.token.length);
-                } else {
-                    rule.tokenArray = rule.token;
-                    rule.token = null;
-                    rule.onMatch = this.$arrayTokens;
-                }
-            } else if (typeof rule.token == "function" && !rule.onMatch) {
-                if (matchcount > 1)
-                    rule.onMatch = this.$applyToken;
-                else
-                    rule.onMatch = rule.token;
-            }
-
-            if (matchcount > 1) {
-                if (/\\\d/.test(rule.regex)) {
-                    adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) {
-                        return "\\" + (parseInt(digit, 10) + matchTotal + 1);
-                    });
-                } else {
-                    matchcount = 1;
-                    adjustedregex = this.removeCapturingGroups(rule.regex);
-                }
-                if (!rule.splitRegex && typeof rule.token != "string")
-                    splitterRurles.push(rule); // flag will be known only at the very end
-            }
-
-            mapping[matchTotal] = i;
-            matchTotal += matchcount;
-
-            ruleRegExps.push(adjustedregex);
-            if (!rule.onMatch)
-                rule.onMatch = null;
-            rule.__proto__ = null;
-        }
-        
-        splitterRurles.forEach(function(rule) {
-            rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);
-        }, this);
-
-        this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag);
-    }
-};
-
-(function() {
-    this.$applyToken = function(str) {
-        var values = this.splitRegex.exec(str).slice(1);
-        var types = this.token.apply(this, values);
-        if (typeof types === "string")
-            return [{type: types, value: str}];
-
-        var tokens = [];
-        for (var i = 0, l = types.length; i < l; i++) {
-            if (values[i])
-                tokens[tokens.length] = {
-                    type: types[i],
-                    value: values[i]
-                };
-        }
-        return tokens;
-    },
-
-    this.$arrayTokens = function(str) {
-        if (!str)
-            return [];
-        var values = this.splitRegex.exec(str);
-        if (!values)
-            return "text";
-        var tokens = [];
-        var types = this.tokenArray;
-        for (var i = 0, l = types.length; i < l; i++) {
-            if (values[i + 1])
-                tokens[tokens.length] = {
-                    type: types[i],
-                    value: values[i + 1]
-                };
-        }
-        return tokens;
-    };
-
-    this.removeCapturingGroups = function(src) {
-        var r = src.replace(
-            /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g,
-            function(x, y) {return y ? "(?:" : x;}
-        );
-        return r;
-    };
-
-    this.createSplitterRegexp = function(src, flag) {
-        if (src.indexOf("(?=") != -1) {
-            var stack = 0;
-            var inChClass = false;
-            var lastCapture = {};
-            src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function(
-                m, esc, parenOpen, parenClose, square, index
-            ) {
-                if (inChClass) {
-                    inChClass = square != "]";
-                } else if (square) {
-                    inChClass = true;
-                } else if (parenClose) {
-                    if (stack == lastCapture.stack) {
-                        lastCapture.end = index+1;
-                        lastCapture.stack = -1;
-                    }
-                    stack--;
-                } else if (parenOpen) {
-                    stack++;
-                    if (parenOpen.length != 1) {
-                        lastCapture.stack = stack
-                        lastCapture.start = index;
-                    }
-                }
-                return m;
-            });
-
-            if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end)))
-                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);
-        }
-        return new RegExp(src, (flag||"").replace("g", ""));
-    };
-    this.getLineTokens = function(line, startState) {
-        if (startState && typeof startState != "string") {
-            var stack = startState.slice(0);
-            startState = stack[0];
-        } else
-            var stack = [];
-
-        var currentState = startState || "start";
-        var state = this.states[currentState];
-        var mapping = this.matchMappings[currentState];
-        var re = this.regExps[currentState];
-        re.lastIndex = 0;
-
-        var match, tokens = [];
-        var lastIndex = 0;
-
-        var token = {type: null, value: ""};
-
-        while (match = re.exec(line)) {
-            var type = mapping.defaultToken;
-            var rule = null;
-            var value = match[0];
-            var index = re.lastIndex;
-
-            if (index - value.length > lastIndex) {
-                var skipped = line.substring(lastIndex, index - value.length);
-                if (token.type == type) {
-                    token.value += skipped;
-                } else {
-                    if (token.type)
-                        tokens.push(token);
-                    token = {type: type, value: skipped};
-                }
-            }
-
-            for (var i = 0; i < match.length-2; i++) {
-                if (match[i + 1] === undefined)
-                    continue;
-
-                rule = state[mapping[i]];
-
-                if (rule.onMatch)
-                    type = rule.onMatch(value, currentState, stack);
-                else
-                    type = rule.token;
-
-                if (rule.next) {
-                    if (typeof rule.next == "string")
-                        currentState = rule.next;
-                    else
-                        currentState = rule.next(currentState, stack);
-
-                    state = this.states[currentState];
-                    if (!state) {
-                        window.console && console.error && console.error(currentState, "doesn't exist");
-                        currentState = "start";
-                        state = this.states[currentState];
-                    }
-                    mapping = this.matchMappings[currentState];
-                    lastIndex = index;
-                    re = this.regExps[currentState];
-                    re.lastIndex = index;
-                }
-                break;
-            }
-
-            if (value) {
-                if (typeof type == "string") {
-                    if ((!rule || rule.merge !== false) && token.type === type) {
-                        token.value += value;
-                    } else {
-                        if (token.type)
-                            tokens.push(token);
-                        token = {type: type, value: value};
-                    }
-                } else if (type) {
-                    if (token.type)
-                        tokens.push(token);
-                    token = {type: null, value: ""};
-                    for (var i = 0; i < type.length; i++)
-                        tokens.push(type[i]);
-                }
-            }
-
-            if (lastIndex == line.length)
-                break;
-
-            lastIndex = index;
-
-            if (tokens.length > MAX_TOKEN_COUNT) {
-                while (lastIndex < line.length) {
-                    if (token.type)
-                        tokens.push(token);
-                    token = {
-                        value: line.substring(lastIndex, lastIndex += 2000),
-                        type: "overflow"
-                    }    
-                }
-                currentState = "start";
-                stack = [];
-                break;
-            }
-        }
-
-        if (token.type)
-            tokens.push(token);
-
-        return {
-            tokens : tokens,
-            state : stack.length ? stack : currentState
-        };
-    };
-
-}).call(Tokenizer.prototype);
-
-exports.Tokenizer = Tokenizer;
-});
-
-define('ace/mode/text_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
-
-
-var lang = require("../lib/lang");
-
-var TextHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [{
-            token : "empty_line",
-            regex : '^$'
-        }, {
-            defaultToken : "text"
-        }]
-    };
-};
-
-(function() {
-
-    this.addRules = function(rules, prefix) {
-        for (var key in rules) {
-            var state = rules[key];
-            for (var i = 0; i < state.length; i++) {
-                var rule = state[i];
-                if (rule.next) {
-                    if (typeof rule.next != "string")
-                        rule.nextState = prefix + rule.nextState;
-                    else
-                        rule.next = prefix + rule.next;
-
-                }
-            }
-            this.$rules[prefix + key] = state;
-        }
-    };
-
-    this.getRules = function() {
-        return this.$rules;
-    };
-
-    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {
-        var embedRules = new HighlightRules().getRules();
-        if (states) {
-            for (var i = 0; i < states.length; i++)
-                states[i] = prefix + states[i];
-        } else {
-            states = [];
-            for (var key in embedRules)
-                states.push(prefix + key);
-        }
-
-        this.addRules(embedRules, prefix);
-
-        if (escapeRules) {
-            var addRules = Array.prototype[append ? "push" : "unshift"];
-            for (var i = 0; i < states.length; i++)
-                addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));
-        }
-
-        if (!this.$embeds)
-            this.$embeds = [];
-        this.$embeds.push(prefix);
-    }
-
-    this.getEmbeds = function() {
-        return this.$embeds;
-    };
-
-    var pushState = function(currentState, stack) {
-        if (currentState != "start")
-            stack.unshift(this.nextState, currentState);
-        return this.nextState;
-    };
-    var popState = function(currentState, stack) {
-        if (stack[0] !== currentState)
-            return "start";
-        stack.shift();
-        return stack.shift();
-    };
-
-    this.normalizeRules = function() {
-        var id = 0;
-        var rules = this.$rules;
-        function processState(key) {
-            var state = rules[key];
-            state.processed = true;
-            for (var i = 0; i < state.length; i++) {
-                var rule = state[i];
-                if (!rule.regex && rule.start) {
-                    rule.regex = rule.start;
-                    if (!rule.next)
-                        rule.next = [];
-                    rule.next.push({
-                        defaultToken: rule.token
-                    }, {
-                        token: rule.token + ".end",
-                        regex: rule.end || rule.start,
-                        next: "pop"
-                    });
-                    rule.token = rule.token + ".start";
-                    rule.push = true;
-                }
-                var next = rule.next || rule.push;
-                if (next && Array.isArray(next)) {
-                    var stateName = rule.stateName;
-                    if (!stateName)  {
-                        stateName = rule.token;
-                        if (typeof stateName != "string")
-                            stateName = stateName[0] || "";
-                        if (rules[stateName])
-                            stateName += id++;
-                    }
-                    rules[stateName] = next;
-                    rule.next = stateName;
-                    processState(stateName);
-                } else if (next == "pop") {
-                    rule.next = popState;
-                }
-
-                if (rule.push) {
-                    rule.nextState = rule.next || rule.push;
-                    rule.next = pushState;
-                    delete rule.push;
-                }
-
-                if (rule.rules) {
-                    for (var r in rule.rules) {
-                        if (rules[r]) {
-                            if (rules[r].push)
-                                rules[r].push.apply(rules[r], rule.rules[r]);
-                        } else {
-                            rules[r] = rule.rules[r];
-                        }
-                    }
-                }
-                if (rule.include || typeof rule == "string") {
-                    var includeName = rule.include || rule;
-                    var toInsert = rules[includeName];
-                } else if (Array.isArray(rule))
-                    toInsert = rule;
-
-                if (toInsert) {
-                    var args = [i, 1].concat(toInsert);
-                    if (rule.noEscape)
-                        args = args.filter(function(x) {return !x.next;});
-                    state.splice.apply(state, args);
-                    i--;
-                    toInsert = null
-                }
-                
-                if (rule.keywordMap) {
-                    rule.token = this.createKeywordMapper(
-                        rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive
-                    );
-                    delete rule.defaultToken;
-                }
-            }
-        };
-        Object.keys(rules).forEach(processState, this);
-    };
-
-    this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {
-        var keywords = Object.create(null);
-        Object.keys(map).forEach(function(className) {
-            var a = map[className];
-            if (ignoreCase)
-                a = a.toLowerCase();
-            var list = a.split(splitChar || "|");
-            for (var i = list.length; i--; )
-                keywords[list[i]] = className;
-        });
-        map = null;
-        return ignoreCase
-            ? function(value) {return keywords[value.toLowerCase()] || defaultToken }
-            : function(value) {return keywords[value] || defaultToken };
-    }
-
-    this.getKeywords = function() {
-        return this.$keywords;
-    };
-
-}).call(TextHighlightRules.prototype);
-
-exports.TextHighlightRules = TextHighlightRules;
-});
-
-define('ace/mode/behaviour', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var Behaviour = function() {
-   this.$behaviours = {};
-};
-
-(function () {
-
-    this.add = function (name, action, callback) {
-        switch (undefined) {
-          case this.$behaviours:
-              this.$behaviours = {};
-          case this.$behaviours[name]:
-              this.$behaviours[name] = {};
-        }
-        this.$behaviours[name][action] = callback;
-    }
-    
-    this.addBehaviours = function (behaviours) {
-        for (var key in behaviours) {
-            for (var action in behaviours[key]) {
-                this.add(key, action, behaviours[key][action]);
-            }
-        }
-    }
-    
-    this.remove = function (name) {
-        if (this.$behaviours && this.$behaviours[name]) {
-            delete this.$behaviours[name];
-        }
-    }
-    
-    this.inherit = function (mode, filter) {
-        if (typeof mode === "function") {
-            var behaviours = new mode().getBehaviours(filter);
-        } else {
-            var behaviours = mode.getBehaviours(filter);
-        }
-        this.addBehaviours(behaviours);
-    }
-    
-    this.getBehaviours = function (filter) {
-        if (!filter) {
-            return this.$behaviours;
-        } else {
-            var ret = {}
-            for (var i = 0; i < filter.length; i++) {
-                if (this.$behaviours[filter[i]]) {
-                    ret[filter[i]] = this.$behaviours[filter[i]];
-                }
-            }
-            return ret;
-        }
-    }
-
-}).call(Behaviour.prototype);
-
-exports.Behaviour = Behaviour;
-});
-define('ace/unicode', ['require', 'exports', 'module' ], function(require, exports, module) {
-exports.packages = {};
-
-addUnicodePackage({
-    L:  "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
-    Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",
-    Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",
-    Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",
-    Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",
-    Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",
-    M:  "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",
-    Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",
-    Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",
-    Me: "0488048906DE20DD-20E020E2-20E4A670-A672",
-    N:  "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",
-    Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",
-    Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",
-    No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",
-    P:  "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",
-    Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",
-    Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",
-    Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",
-    Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",
-    Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21",
-    Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F",
-    Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",
-    S:  "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",
-    Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",
-    Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",
-    Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",
-    So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",
-    Z:  "002000A01680180E2000-200A20282029202F205F3000",
-    Zs: "002000A01680180E2000-200A202F205F3000",
-    Zl: "2028",
-    Zp: "2029",
-    C:  "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",
-    Cc: "0000-001F007F-009F",
-    Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",
-    Co: "E000-F8FF",
-    Cs: "D800-DFFF",
-    Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"
-});
-
-function addUnicodePackage (pack) {
-    var codePoint = /\w{4}/g;
-    for (var name in pack)
-        exports.packages[name] = pack[name].replace(codePoint, "\\u$&");
-};
-
-});
-
-define('ace/token_iterator', ['require', 'exports', 'module' ], function(require, exports, module) {
-var TokenIterator = function(session, initialRow, initialColumn) {
-    this.$session = session;
-    this.$row = initialRow;
-    this.$rowTokens = session.getTokens(initialRow);
-
-    var token = session.getTokenAt(initialRow, initialColumn);
-    this.$tokenIndex = token ? token.index : -1;
-};
-
-(function() { 
-    this.stepBackward = function() {
-        this.$tokenIndex -= 1;
-        
-        while (this.$tokenIndex < 0) {
-            this.$row -= 1;
-            if (this.$row < 0) {
-                this.$row = 0;
-                return null;
-            }
-                
-            this.$rowTokens = this.$session.getTokens(this.$row);
-            this.$tokenIndex = this.$rowTokens.length - 1;
-        }
-            
-        return this.$rowTokens[this.$tokenIndex];
-    };   
-    this.stepForward = function() {
-        this.$tokenIndex += 1;
-        var rowCount;
-        while (this.$tokenIndex >= this.$rowTokens.length) {
-            this.$row += 1;
-            if (!rowCount)
-                rowCount = this.$session.getLength();
-            if (this.$row >= rowCount) {
-                this.$row = rowCount - 1;
-                return null;
-            }
-
-            this.$rowTokens = this.$session.getTokens(this.$row);
-            this.$tokenIndex = 0;
-        }
-            
-        return this.$rowTokens[this.$tokenIndex];
-    };      
-    this.getCurrentToken = function () {
-        return this.$rowTokens[this.$tokenIndex];
-    };      
-    this.getCurrentTokenRow = function () {
-        return this.$row;
-    };     
-    this.getCurrentTokenColumn = function() {
-        var rowTokens = this.$rowTokens;
-        var tokenIndex = this.$tokenIndex;
-        var column = rowTokens[tokenIndex].start;
-        if (column !== undefined)
-            return column;
-            
-        column = 0;
-        while (tokenIndex > 0) {
-            tokenIndex -= 1;
-            column += rowTokens[tokenIndex].value.length;
-        }
-        
-        return column;  
-    };
-            
-}).call(TokenIterator.prototype);
-
-exports.TokenIterator = TokenIterator;
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-
-define('ace/background_tokenizer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var BackgroundTokenizer = function(tokenizer, editor) {
-    this.running = false;
-    this.lines = [];
-    this.states = [];
-    this.currentLine = 0;
-    this.tokenizer = tokenizer;
-
-    var self = this;
-
-    this.$worker = function() {
-        if (!self.running) { return; }
-
-        var workerStart = new Date();
-        var startLine = self.currentLine;
-        var doc = self.doc;
-
-        var processedLines = 0;
-
-        var len = doc.getLength();
-        while (self.currentLine < len) {
-            self.$tokenizeRow(self.currentLine);
-            while (self.lines[self.currentLine])
-                self.currentLine++;
-            processedLines ++;
-            if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) {
-                self.fireUpdateEvent(startLine, self.currentLine-1);
-                self.running = setTimeout(self.$worker, 20);
-                return;
-            }
-        }
-
-        self.running = false;
-
-        self.fireUpdateEvent(startLine, len - 1);
-    };
-};
-
-(function(){
-
-    oop.implement(this, EventEmitter);
-    this.setTokenizer = function(tokenizer) {
-        this.tokenizer = tokenizer;
-        this.lines = [];
-        this.states = [];
-
-        this.start(0);
-    };
-    this.setDocument = function(doc) {
-        this.doc = doc;
-        this.lines = [];
-        this.states = [];
-
-        this.stop();
-    };
-    this.fireUpdateEvent = function(firstRow, lastRow) {
-        var data = {
-            first: firstRow,
-            last: lastRow
-        };
-        this._emit("update", {data: data});
-    };
-    this.start = function(startRow) {
-        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());
-        this.lines.splice(this.currentLine, this.lines.length);
-        this.states.splice(this.currentLine, this.states.length);
-
-        this.stop();
-        this.running = setTimeout(this.$worker, 700);
-    };
-
-    this.$updateOnChange = function(delta) {
-        var range = delta.range;
-        var startRow = range.start.row;
-        var len = range.end.row - startRow;
-
-        if (len === 0) {
-            this.lines[startRow] = null;
-        } else if (delta.action == "removeText" || delta.action == "removeLines") {
-            this.lines.splice(startRow, len + 1, null);
-            this.states.splice(startRow, len + 1, null);
-        } else {
-            var args = Array(len + 1);
-            args.unshift(startRow, 1);
-            this.lines.splice.apply(this.lines, args);
-            this.states.splice.apply(this.states, args);
-        }
-
-        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());
-
-        this.stop();
-        this.running = setTimeout(this.$worker, 700);
-    };
-    this.stop = function() {
-        if (this.running)
-            clearTimeout(this.running);
-        this.running = false;
-    };
-    this.getTokens = function(row) {
-        return this.lines[row] || this.$tokenizeRow(row);
-    };
-    this.getState = function(row) {
-        if (this.currentLine == row)
-            this.$tokenizeRow(row);
-        return this.states[row] || "start";
-    };
-
-    this.$tokenizeRow = function(row) {
-        var line = this.doc.getLine(row);
-        var state = this.states[row - 1];
-
-        var data = this.tokenizer.getLineTokens(line, state, row);
-
-        if (this.states[row] + "" !== data.state + "") {
-            this.states[row] = data.state;
-            this.lines[row + 1] = null;
-            if (this.currentLine > row + 1)
-                this.currentLine = row + 1;
-        } else if (this.currentLine == row) {
-            this.currentLine = row + 1;
-        }
-
-        return this.lines[row] = data.tokens;
-    };
-
-}).call(BackgroundTokenizer.prototype);
-
-exports.BackgroundTokenizer = BackgroundTokenizer;
-});
-
-define('ace/search_highlight', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/range'], function(require, exports, module) {
-
-
-var lang = require("./lib/lang");
-var oop = require("./lib/oop");
-var Range = require("./range").Range;
-
-var SearchHighlight = function(regExp, clazz, type) {
-    this.setRegexp(regExp);
-    this.clazz = clazz;
-    this.type = type || "text";
-};
-
-(function() {
-    this.MAX_RANGES = 500;
-    
-    this.setRegexp = function(regExp) {
-        if (this.regExp+"" == regExp+"")
-            return;
-        this.regExp = regExp;
-        this.cache = [];
-    };
-
-    this.update = function(html, markerLayer, session, config) {
-        if (!this.regExp)
-            return;
-        var start = config.firstRow, end = config.lastRow;
-
-        for (var i = start; i <= end; i++) {
-            var ranges = this.cache[i];
-            if (ranges == null) {
-                ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);
-                if (ranges.length > this.MAX_RANGES)
-                    ranges = ranges.slice(0, this.MAX_RANGES);
-                ranges = ranges.map(function(match) {
-                    return new Range(i, match.offset, i, match.offset + match.length);
-                });
-                this.cache[i] = ranges.length ? ranges : "";
-            }
-
-            for (var j = ranges.length; j --; ) {
-                markerLayer.drawSingleLineMarker(
-                    html, ranges[j].toScreenRange(session), this.clazz, config);
-            }
-        }
-    };
-
-}).call(SearchHighlight.prototype);
-
-exports.SearchHighlight = SearchHighlight;
-});
-
-define('ace/edit_session/folding', ['require', 'exports', 'module' , 'ace/range', 'ace/edit_session/fold_line', 'ace/edit_session/fold', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-var FoldLine = require("./fold_line").FoldLine;
-var Fold = require("./fold").Fold;
-var TokenIterator = require("../token_iterator").TokenIterator;
-
-function Folding() {
-    this.getFoldAt = function(row, column, side) {
-        var foldLine = this.getFoldLine(row);
-        if (!foldLine)
-            return null;
-
-        var folds = foldLine.folds;
-        for (var i = 0; i < folds.length; i++) {
-            var fold = folds[i];
-            if (fold.range.contains(row, column)) {
-                if (side == 1 && fold.range.isEnd(row, column)) {
-                    continue;
-                } else if (side == -1 && fold.range.isStart(row, column)) {
-                    continue;
-                }
-                return fold;
-            }
-        }
-    };
-    this.getFoldsInRange = function(range) {
-        var start = range.start;
-        var end = range.end;
-        var foldLines = this.$foldData;
-        var foundFolds = [];
-
-        start.column += 1;
-        end.column -= 1;
-
-        for (var i = 0; i < foldLines.length; i++) {
-            var cmp = foldLines[i].range.compareRange(range);
-            if (cmp == 2) {
-                continue;
-            }
-            else if (cmp == -2) {
-                break;
-            }
-
-            var folds = foldLines[i].folds;
-            for (var j = 0; j < folds.length; j++) {
-                var fold = folds[j];
-                cmp = fold.range.compareRange(range);
-                if (cmp == -2) {
-                    break;
-                } else if (cmp == 2) {
-                    continue;
-                } else
-                if (cmp == 42) {
-                    break;
-                }
-                foundFolds.push(fold);
-            }
-        }
-        start.column -= 1;
-        end.column += 1;
-
-        return foundFolds;
-    };
-    this.getAllFolds = function() {
-        var folds = [];
-        var foldLines = this.$foldData;
-        
-        function addFold(fold) {
-            folds.push(fold);
-        }
-        
-        for (var i = 0; i < foldLines.length; i++)
-            for (var j = 0; j < foldLines[i].folds.length; j++)
-                addFold(foldLines[i].folds[j]);
-
-        return folds;
-    };
-    this.getFoldStringAt = function(row, column, trim, foldLine) {
-        foldLine = foldLine || this.getFoldLine(row);
-        if (!foldLine)
-            return null;
-
-        var lastFold = {
-            end: { column: 0 }
-        };
-        var str, fold;
-        for (var i = 0; i < foldLine.folds.length; i++) {
-            fold = foldLine.folds[i];
-            var cmp = fold.range.compareEnd(row, column);
-            if (cmp == -1) {
-                str = this
-                    .getLine(fold.start.row)
-                    .substring(lastFold.end.column, fold.start.column);
-                break;
-            }
-            else if (cmp === 0) {
-                return null;
-            }
-            lastFold = fold;
-        }
-        if (!str)
-            str = this.getLine(fold.start.row).substring(lastFold.end.column);
-
-        if (trim == -1)
-            return str.substring(0, column - lastFold.end.column);
-        else if (trim == 1)
-            return str.substring(column - lastFold.end.column);
-        else
-            return str;
-    };
-
-    this.getFoldLine = function(docRow, startFoldLine) {
-        var foldData = this.$foldData;
-        var i = 0;
-        if (startFoldLine)
-            i = foldData.indexOf(startFoldLine);
-        if (i == -1)
-            i = 0;
-        for (i; i < foldData.length; i++) {
-            var foldLine = foldData[i];
-            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {
-                return foldLine;
-            } else if (foldLine.end.row > docRow) {
-                return null;
-            }
-        }
-        return null;
-    };
-    this.getNextFoldLine = function(docRow, startFoldLine) {
-        var foldData = this.$foldData;
-        var i = 0;
-        if (startFoldLine)
-            i = foldData.indexOf(startFoldLine);
-        if (i == -1)
-            i = 0;
-        for (i; i < foldData.length; i++) {
-            var foldLine = foldData[i];
-            if (foldLine.end.row >= docRow) {
-                return foldLine;
-            }
-        }
-        return null;
-    };
-
-    this.getFoldedRowCount = function(first, last) {
-        var foldData = this.$foldData, rowCount = last-first+1;
-        for (var i = 0; i < foldData.length; i++) {
-            var foldLine = foldData[i],
-                end = foldLine.end.row,
-                start = foldLine.start.row;
-            if (end >= last) {
-                if(start < last) {
-                    if(start >= first)
-                        rowCount -= last-start;
-                    else
-                        rowCount = 0;//in one fold
-                }
-                break;
-            } else if(end >= first){
-                if (start >= first) //fold inside range
-                    rowCount -=  end-start;
-                else
-                    rowCount -=  end-first+1;
-            }
-        }
-        return rowCount;
-    };
-
-    this.$addFoldLine = function(foldLine) {
-        this.$foldData.push(foldLine);
-        this.$foldData.sort(function(a, b) {
-            return a.start.row - b.start.row;
-        });
-        return foldLine;
-    };
-    this.addFold = function(placeholder, range) {
-        var foldData = this.$foldData;
-        var added = false;
-        var fold;
-        
-        if (placeholder instanceof Fold)
-            fold = placeholder;
-        else {
-            fold = new Fold(range, placeholder);
-            fold.collapseChildren = range.collapseChildren;
-        }
-        this.$clipRangeToDocument(fold.range);
-
-        var startRow = fold.start.row;
-        var startColumn = fold.start.column;
-        var endRow = fold.end.row;
-        var endColumn = fold.end.column;
-        if (startRow == endRow && endColumn - startColumn < 2)
-            throw "The range has to be at least 2 characters width";
-
-        var startFold = this.getFoldAt(startRow, startColumn, 1);
-        var endFold = this.getFoldAt(endRow, endColumn, -1);
-        if (startFold && endFold == startFold)
-            return startFold.addSubFold(fold);
-
-        if (
-            (startFold && !startFold.range.isStart(startRow, startColumn))
-            || (endFold && !endFold.range.isEnd(endRow, endColumn))
-        ) {
-            throw "A fold can't intersect already existing fold" + fold.range + startFold.range;
-        }
-        var folds = this.getFoldsInRange(fold.range);
-        if (folds.length > 0) {
-            this.removeFolds(folds);
-            folds.forEach(function(subFold) {
-                fold.addSubFold(subFold);
-            });
-        }
-
-        for (var i = 0; i < foldData.length; i++) {
-            var foldLine = foldData[i];
-            if (endRow == foldLine.start.row) {
-                foldLine.addFold(fold);
-                added = true;
-                break;
-            } else if (startRow == foldLine.end.row) {
-                foldLine.addFold(fold);
-                added = true;
-                if (!fold.sameRow) {
-                    var foldLineNext = foldData[i + 1];
-                    if (foldLineNext && foldLineNext.start.row == endRow) {
-                        foldLine.merge(foldLineNext);
-                        break;
-                    }
-                }
-                break;
-            } else if (endRow <= foldLine.start.row) {
-                break;
-            }
-        }
-
-        if (!added)
-            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));
-
-        if (this.$useWrapMode)
-            this.$updateWrapData(foldLine.start.row, foldLine.start.row);
-        else
-            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);
-        this.$modified = true;
-        this._emit("changeFold", { data: fold, action: "add" });
-
-        return fold;
-    };
-
-    this.addFolds = function(folds) {
-        folds.forEach(function(fold) {
-            this.addFold(fold);
-        }, this);
-    };
-
-    this.removeFold = function(fold) {
-        var foldLine = fold.foldLine;
-        var startRow = foldLine.start.row;
-        var endRow = foldLine.end.row;
-
-        var foldLines = this.$foldData;
-        var folds = foldLine.folds;
-        if (folds.length == 1) {
-            foldLines.splice(foldLines.indexOf(foldLine), 1);
-        } else
-        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {
-            folds.pop();
-            foldLine.end.row = folds[folds.length - 1].end.row;
-            foldLine.end.column = folds[folds.length - 1].end.column;
-        } else
-        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {
-            folds.shift();
-            foldLine.start.row = folds[0].start.row;
-            foldLine.start.column = folds[0].start.column;
-        } else
-        if (fold.sameRow) {
-            folds.splice(folds.indexOf(fold), 1);
-        } else
-        {
-            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);
-            folds = newFoldLine.folds;
-            folds.shift();
-            newFoldLine.start.row = folds[0].start.row;
-            newFoldLine.start.column = folds[0].start.column;
-        }
-
-        if (!this.$updating) {
-            if (this.$useWrapMode)
-                this.$updateWrapData(startRow, endRow);
-            else
-                this.$updateRowLengthCache(startRow, endRow);
-        }
-        this.$modified = true;
-        this._emit("changeFold", { data: fold, action: "remove" });
-    };
-
-    this.removeFolds = function(folds) {
-        var cloneFolds = [];
-        for (var i = 0; i < folds.length; i++) {
-            cloneFolds.push(folds[i]);
-        }
-
-        cloneFolds.forEach(function(fold) {
-            this.removeFold(fold);
-        }, this);
-        this.$modified = true;
-    };
-
-    this.expandFold = function(fold) {
-        this.removeFold(fold);        
-        fold.subFolds.forEach(function(subFold) {
-            fold.restoreRange(subFold);
-            this.addFold(subFold);
-        }, this);
-        if (fold.collapseChildren > 0) {
-            this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);
-        }
-        fold.subFolds = [];
-    };
-
-    this.expandFolds = function(folds) {
-        folds.forEach(function(fold) {
-            this.expandFold(fold);
-        }, this);
-    };
-
-    this.unfold = function(location, expandInner) {
-        var range, folds;
-        if (location == null) {
-            range = new Range(0, 0, this.getLength(), 0);
-            expandInner = true;
-        } else if (typeof location == "number")
-            range = new Range(location, 0, location, this.getLine(location).length);
-        else if ("row" in location)
-            range = Range.fromPoints(location, location);
-        else
-            range = location;
-
-        folds = this.getFoldsInRange(range);
-        if (expandInner) {
-            this.removeFolds(folds);
-        } else {
-            while (folds.length) {
-                this.expandFolds(folds);
-                folds = this.getFoldsInRange(range);
-            }
-        }
-    };
-    this.isRowFolded = function(docRow, startFoldRow) {
-        return !!this.getFoldLine(docRow, startFoldRow);
-    };
-
-    this.getRowFoldEnd = function(docRow, startFoldRow) {
-        var foldLine = this.getFoldLine(docRow, startFoldRow);
-        return foldLine ? foldLine.end.row : docRow;
-    };
-
-    this.getRowFoldStart = function(docRow, startFoldRow) {
-        var foldLine = this.getFoldLine(docRow, startFoldRow);
-        return foldLine ? foldLine.start.row : docRow;
-    };
-
-    this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {
-        if (startRow == null) {
-            startRow = foldLine.start.row;
-            startColumn = 0;
-        }
-
-        if (endRow == null) {
-            endRow = foldLine.end.row;
-            endColumn = this.getLine(endRow).length;
-        }
-        var doc = this.doc;
-        var textLine = "";
-
-        foldLine.walk(function(placeholder, row, column, lastColumn) {
-            if (row < startRow)
-                return;
-            if (row == startRow) {
-                if (column < startColumn)
-                    return;
-                lastColumn = Math.max(startColumn, lastColumn);
-            }
-
-            if (placeholder != null) {
-                textLine += placeholder;
-            } else {
-                textLine += doc.getLine(row).substring(lastColumn, column);
-            }
-        }, endRow, endColumn);
-        return textLine;
-    };
-
-    this.getDisplayLine = function(row, endColumn, startRow, startColumn) {
-        var foldLine = this.getFoldLine(row);
-
-        if (!foldLine) {
-            var line;
-            line = this.doc.getLine(row);
-            return line.substring(startColumn || 0, endColumn || line.length);
-        } else {
-            return this.getFoldDisplayLine(
-                foldLine, row, endColumn, startRow, startColumn);
-        }
-    };
-
-    this.$cloneFoldData = function() {
-        var fd = [];
-        fd = this.$foldData.map(function(foldLine) {
-            var folds = foldLine.folds.map(function(fold) {
-                return fold.clone();
-            });
-            return new FoldLine(fd, folds);
-        });
-
-        return fd;
-    };
-
-    this.toggleFold = function(tryToUnfold) {
-        var selection = this.selection;
-        var range = selection.getRange();
-        var fold;
-        var bracketPos;
-
-        if (range.isEmpty()) {
-            var cursor = range.start;
-            fold = this.getFoldAt(cursor.row, cursor.column);
-
-            if (fold) {
-                this.expandFold(fold);
-                return;
-            } else if (bracketPos = this.findMatchingBracket(cursor)) {
-                if (range.comparePoint(bracketPos) == 1) {
-                    range.end = bracketPos;
-                } else {
-                    range.start = bracketPos;
-                    range.start.column++;
-                    range.end.column--;
-                }
-            } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {
-                if (range.comparePoint(bracketPos) == 1)
-                    range.end = bracketPos;
-                else
-                    range.start = bracketPos;
-
-                range.start.column++;
-            } else {
-                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;
-            }
-        } else {
-            var folds = this.getFoldsInRange(range);
-            if (tryToUnfold && folds.length) {
-                this.expandFolds(folds);
-                return;
-            } else if (folds.length == 1 ) {
-                fold = folds[0];
-            }
-        }
-
-        if (!fold)
-            fold = this.getFoldAt(range.start.row, range.start.column);
-
-        if (fold && fold.range.toString() == range.toString()) {
-            this.expandFold(fold);
-            return;
-        }
-
-        var placeholder = "...";
-        if (!range.isMultiLine()) {
-            placeholder = this.getTextRange(range);
-            if(placeholder.length < 4)
-                return;
-            placeholder = placeholder.trim().substring(0, 2) + "..";
-        }
-
-        this.addFold(placeholder, range);
-    };
-
-    this.getCommentFoldRange = function(row, column, dir) {
-        var iterator = new TokenIterator(this, row, column);
-        var token = iterator.getCurrentToken();
-        if (token && /^comment|string/.test(token.type)) {
-            var range = new Range();
-            var re = new RegExp(token.type.replace(/\..*/, "\\."));
-            if (dir != 1) {
-                do {
-                    token = iterator.stepBackward();
-                } while(token && re.test(token.type));
-                iterator.stepForward();
-            }
-            
-            range.start.row = iterator.getCurrentTokenRow();
-            range.start.column = iterator.getCurrentTokenColumn() + 2;
-
-            iterator = new TokenIterator(this, row, column);
-            
-            if (dir != -1) {
-                do {
-                    token = iterator.stepForward();
-                } while(token && re.test(token.type));
-                token = iterator.stepBackward();
-            } else
-                token = iterator.getCurrentToken();
-
-            range.end.row = iterator.getCurrentTokenRow();
-            range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;
-            return range;
-        }
-    };
-
-    this.foldAll = function(startRow, endRow, depth) {
-        if (depth == undefined)
-            depth = 100000; // JSON.stringify doesn't hanle Infinity
-        var foldWidgets = this.foldWidgets;
-        endRow = endRow || this.getLength();
-        for (var row = startRow || 0; row < endRow; row++) {
-            if (foldWidgets[row] == null)
-                foldWidgets[row] = this.getFoldWidget(row);
-            if (foldWidgets[row] != "start")
-                continue;
-
-            var range = this.getFoldWidgetRange(row);
-            if (range && range.end.row <= endRow) try {
-                var fold = this.addFold("...", range);
-                fold.collapseChildren = depth;
-            } catch(e) {}
-            row = range.end.row;
-        }
-    };
-    this.$foldStyles = {
-        "manual": 1,
-        "markbegin": 1,
-        "markbeginend": 1
-    };
-    this.$foldStyle = "markbegin";
-    this.setFoldStyle = function(style) {
-        if (!this.$foldStyles[style])
-            throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]");
-        
-        if (this.$foldStyle == style)
-            return;
-
-        this.$foldStyle = style;
-        
-        if (style == "manual")
-            this.unfold();
-        var mode = this.$foldMode;
-        this.$setFolding(null);
-        this.$setFolding(mode);
-    };
-
-    this.$setFolding = function(foldMode) {
-        if (this.$foldMode == foldMode)
-            return;
-            
-        this.$foldMode = foldMode;
-        
-        this.removeListener('change', this.$updateFoldWidgets);
-        this._emit("changeAnnotation");
-        
-        if (!foldMode || this.$foldStyle == "manual") {
-            this.foldWidgets = null;
-            return;
-        }
-        
-        this.foldWidgets = [];
-        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);
-        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);
-        
-        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);
-        this.on('change', this.$updateFoldWidgets);
-        
-    };
-
-    this.getParentFoldRangeData = function (row, ignoreCurrent) {
-        var fw = this.foldWidgets;
-        if (!fw || (ignoreCurrent && fw[row]))
-            return {};
-
-        var i = row - 1, firstRange;
-        while (i >= 0) {
-            var c = fw[i];
-            if (c == null)
-                c = fw[i] = this.getFoldWidget(i);
-
-            if (c == "start") {
-                var range = this.getFoldWidgetRange(i);
-                if (!firstRange)
-                    firstRange = range;
-                if (range && range.end.row >= row)
-                    break;
-            }
-            i--;
-        }
-
-        return {
-            range: i !== -1 && range,
-            firstRange: firstRange
-        };
-    }
-
-    this.onFoldWidgetClick = function(row, e) {
-        var type = this.getFoldWidget(row);
-        var line = this.getLine(row);
-        e = e.domEvent;
-        var children = e.shiftKey;
-        var all = e.ctrlKey || e.metaKey;
-        var siblings = e.altKey;
-
-        var dir = type === "end" ? -1 : 1;
-        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);
-
-        if (fold) {
-            if (children || all)
-                this.removeFold(fold);
-            else
-                this.expandFold(fold);
-            return;
-        }
-
-        var range = this.getFoldWidgetRange(row);
-        if (range && !range.isMultiLine()) {
-            fold = this.getFoldAt(range.start.row, range.start.column, 1);
-            if (fold && range.isEqual(fold.range)) {
-                this.removeFold(fold);
-                return;
-            }
-        }
-        
-        if (siblings) {
-            var data = this.getParentFoldRangeData(row);
-            if (data.range) {
-                var startRow = data.range.start.row + 1;
-                var endRow = data.range.end.row;
-            }
-            this.foldAll(startRow, endRow, all ? 10000 : 0);
-        } else if (children) {
-            var endRow = range ? range.end.row : this.getLength();
-            this.foldAll(row + 1, range.end.row, all ? 10000 : 0);
-        } else if (range) {
-            if (all) 
-                range.collapseChildren = 10000;
-            this.addFold("...", range);
-        }
-        
-        if (!range)
-            (e.target || e.srcElement).className += " ace_invalid"
-    };
-
-    this.updateFoldWidgets = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-        var firstRow = range.start.row;
-        var len = range.end.row - firstRow;
-
-        if (len === 0) {
-            this.foldWidgets[firstRow] = null;
-        } else if (delta.action == "removeText" || delta.action == "removeLines") {
-            this.foldWidgets.splice(firstRow, len + 1, null);
-        } else {
-            var args = Array(len + 1);
-            args.unshift(firstRow, 1);
-            this.foldWidgets.splice.apply(this.foldWidgets, args);
-        }
-    };
-
-}
-
-exports.Folding = Folding;
-
-});
-
-define('ace/edit_session/fold_line', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-function FoldLine(foldData, folds) {
-    this.foldData = foldData;
-    if (Array.isArray(folds)) {
-        this.folds = folds;
-    } else {
-        folds = this.folds = [ folds ];
-    }
-
-    var last = folds[folds.length - 1]
-    this.range = new Range(folds[0].start.row, folds[0].start.column,
-                           last.end.row, last.end.column);
-    this.start = this.range.start;
-    this.end   = this.range.end;
-
-    this.folds.forEach(function(fold) {
-        fold.setFoldLine(this);
-    }, this);
-}
-
-(function() {
-    this.shiftRow = function(shift) {
-        this.start.row += shift;
-        this.end.row += shift;
-        this.folds.forEach(function(fold) {
-            fold.start.row += shift;
-            fold.end.row += shift;
-        });
-    }
-
-    this.addFold = function(fold) {
-        if (fold.sameRow) {
-            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {
-                throw "Can't add a fold to this FoldLine as it has no connection";
-            }
-            this.folds.push(fold);
-            this.folds.sort(function(a, b) {
-                return -a.range.compareEnd(b.start.row, b.start.column);
-            });
-            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {
-                this.end.row = fold.end.row;
-                this.end.column =  fold.end.column;
-            } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {
-                this.start.row = fold.start.row;
-                this.start.column = fold.start.column;
-            }
-        } else if (fold.start.row == this.end.row) {
-            this.folds.push(fold);
-            this.end.row = fold.end.row;
-            this.end.column = fold.end.column;
-        } else if (fold.end.row == this.start.row) {
-            this.folds.unshift(fold);
-            this.start.row = fold.start.row;
-            this.start.column = fold.start.column;
-        } else {
-            throw "Trying to add fold to FoldRow that doesn't have a matching row";
-        }
-        fold.foldLine = this;
-    }
-
-    this.containsRow = function(row) {
-        return row >= this.start.row && row <= this.end.row;
-    }
-
-    this.walk = function(callback, endRow, endColumn) {
-        var lastEnd = 0,
-            folds = this.folds,
-            fold,
-            comp, stop, isNewRow = true;
-
-        if (endRow == null) {
-            endRow = this.end.row;
-            endColumn = this.end.column;
-        }
-
-        for (var i = 0; i < folds.length; i++) {
-            fold = folds[i];
-
-            comp = fold.range.compareStart(endRow, endColumn);
-            if (comp == -1) {
-                callback(null, endRow, endColumn, lastEnd, isNewRow);
-                return;
-            }
-
-            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);
-            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);
-            if (stop || comp == 0) {
-                return;
-            }
-            isNewRow = !fold.sameRow;
-            lastEnd = fold.end.column;
-        }
-        callback(null, endRow, endColumn, lastEnd, isNewRow);
-    }
-
-    this.getNextFoldTo = function(row, column) {
-        var fold, cmp;
-        for (var i = 0; i < this.folds.length; i++) {
-            fold = this.folds[i];
-            cmp = fold.range.compareEnd(row, column);
-            if (cmp == -1) {
-                return {
-                    fold: fold,
-                    kind: "after"
-                };
-            } else if (cmp == 0) {
-                return {
-                    fold: fold,
-                    kind: "inside"
-                }
-            }
-        }
-        return null;
-    }
-
-    this.addRemoveChars = function(row, column, len) {
-        var ret = this.getNextFoldTo(row, column),
-            fold, folds;
-        if (ret) {
-            fold = ret.fold;
-            if (ret.kind == "inside"
-                && fold.start.column != column
-                && fold.start.row != row)
-            {
-                window.console && window.console.log(row, column, fold);
-            } else if (fold.start.row == row) {
-                folds = this.folds;
-                var i = folds.indexOf(fold);
-                if (i == 0) {
-                    this.start.column += len;
-                }
-                for (i; i < folds.length; i++) {
-                    fold = folds[i];
-                    fold.start.column += len;
-                    if (!fold.sameRow) {
-                        return;
-                    }
-                    fold.end.column += len;
-                }
-                this.end.column += len;
-            }
-        }
-    }
-
-    this.split = function(row, column) {
-        var fold = this.getNextFoldTo(row, column).fold;
-        var folds = this.folds;
-        var foldData = this.foldData;
-
-        if (!fold)
-            return null;
-
-        var i = folds.indexOf(fold);
-        var foldBefore = folds[i - 1];
-        this.end.row = foldBefore.end.row;
-        this.end.column = foldBefore.end.column;
-        folds = folds.splice(i, folds.length - i);
-
-        var newFoldLine = new FoldLine(foldData, folds);
-        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);
-        return newFoldLine;
-    }
-
-    this.merge = function(foldLineNext) {
-        var folds = foldLineNext.folds;
-        for (var i = 0; i < folds.length; i++) {
-            this.addFold(folds[i]);
-        }
-        var foldData = this.foldData;
-        foldData.splice(foldData.indexOf(foldLineNext), 1);
-    }
-
-    this.toString = function() {
-        var ret = [this.range.toString() + ": [" ];
-
-        this.folds.forEach(function(fold) {
-            ret.push("  " + fold.toString());
-        });
-        ret.push("]")
-        return ret.join("\n");
-    }
-
-    this.idxToPosition = function(idx) {
-        var lastFoldEndColumn = 0;
-        var fold;
-
-        for (var i = 0; i < this.folds.length; i++) {
-            var fold = this.folds[i];
-
-            idx -= fold.start.column - lastFoldEndColumn;
-            if (idx < 0) {
-                return {
-                    row: fold.start.row,
-                    column: fold.start.column + idx
-                };
-            }
-
-            idx -= fold.placeholder.length;
-            if (idx < 0) {
-                return fold.start;
-            }
-
-            lastFoldEndColumn = fold.end.column;
-        }
-
-        return {
-            row: this.end.row,
-            column: this.end.column + idx
-        };
-    }
-}).call(FoldLine.prototype);
-
-exports.FoldLine = FoldLine;
-});
-
-define('ace/edit_session/fold', ['require', 'exports', 'module' , 'ace/range', 'ace/range_list', 'ace/lib/oop'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-var RangeList = require("../range_list").RangeList;
-var oop = require("../lib/oop")
-var Fold = exports.Fold = function(range, placeholder) {
-    this.foldLine = null;
-    this.placeholder = placeholder;
-    this.range = range;
-    this.start = range.start;
-    this.end = range.end;
-
-    this.sameRow = range.start.row == range.end.row;
-    this.subFolds = this.ranges = [];
-};
-
-oop.inherits(Fold, RangeList);
-
-(function() {
-
-    this.toString = function() {
-        return '"' + this.placeholder + '" ' + this.range.toString();
-    };
-
-    this.setFoldLine = function(foldLine) {
-        this.foldLine = foldLine;
-        this.subFolds.forEach(function(fold) {
-            fold.setFoldLine(foldLine);
-        });
-    };
-
-    this.clone = function() {
-        var range = this.range.clone();
-        var fold = new Fold(range, this.placeholder);
-        this.subFolds.forEach(function(subFold) {
-            fold.subFolds.push(subFold.clone());
-        });
-        fold.collapseChildren = this.collapseChildren;
-        return fold;
-    };
-
-    this.addSubFold = function(fold) {
-        if (this.range.isEqual(fold))
-            return;
-
-        if (!this.range.containsRange(fold))
-            throw "A fold can't intersect already existing fold" + fold.range + this.range;
-        consumeRange(fold, this.start);
-
-        var row = fold.start.row, column = fold.start.column;
-        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {
-            cmp = this.subFolds[i].range.compare(row, column);
-            if (cmp != 1)
-                break;
-        }
-        var afterStart = this.subFolds[i];
-
-        if (cmp == 0)
-            return afterStart.addSubFold(fold);
-        var row = fold.range.end.row, column = fold.range.end.column;
-        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {
-            cmp = this.subFolds[j].range.compare(row, column);
-            if (cmp != 1)
-                break;
-        }
-        var afterEnd = this.subFolds[j];
-
-        if (cmp == 0)
-            throw "A fold can't intersect already existing fold" + fold.range + this.range;
-
-        var consumedFolds = this.subFolds.splice(i, j - i, fold);
-        fold.setFoldLine(this.foldLine);
-
-        return fold;
-    };
-    
-    this.restoreRange = function(range) {
-        return restoreRange(range, this.start);
-    };
-
-}).call(Fold.prototype);
-
-function consumePoint(point, anchor) {
-    point.row -= anchor.row;
-    if (point.row == 0)
-        point.column -= anchor.column;
-}
-function consumeRange(range, anchor) {
-    consumePoint(range.start, anchor);
-    consumePoint(range.end, anchor);
-}
-function restorePoint(point, anchor) {
-    if (point.row == 0)
-        point.column += anchor.column;
-    point.row += anchor.row;
-}
-function restoreRange(range, anchor) {
-    restorePoint(range.start, anchor);
-    restorePoint(range.end, anchor);
-}
-
-});
-
-define('ace/range_list', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-var Range = require("./range").Range;
-var comparePoints = Range.comparePoints;
-
-var RangeList = function() {
-    this.ranges = [];
-};
-
-(function() {
-    this.comparePoints = comparePoints;
-
-    this.pointIndex = function(pos, excludeEdges, startIndex) {
-        var list = this.ranges;
-
-        for (var i = startIndex || 0; i < list.length; i++) {
-            var range = list[i];
-            var cmpEnd = comparePoints(pos, range.end);
-            if (cmpEnd > 0)
-                continue;
-            var cmpStart = comparePoints(pos, range.start);
-            if (cmpEnd === 0)
-                return excludeEdges && cmpStart !== 0 ? -i-2 : i;
-            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))
-                return i;
-
-            return -i-1;
-        }
-        return -i - 1;
-    };
-
-    this.add = function(range) {
-        var excludeEdges = !range.isEmpty();
-        var startIndex = this.pointIndex(range.start, excludeEdges);
-        if (startIndex < 0)
-            startIndex = -startIndex - 1;
-
-        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);
-
-        if (endIndex < 0)
-            endIndex = -endIndex - 1;
-        else
-            endIndex++;
-        return this.ranges.splice(startIndex, endIndex - startIndex, range);
-    };
-
-    this.addList = function(list) {
-        var removed = [];
-        for (var i = list.length; i--; ) {
-            removed.push.call(removed, this.add(list[i]));
-        }
-        return removed;
-    };
-
-    this.substractPoint = function(pos) {
-        var i = this.pointIndex(pos);
-
-        if (i >= 0)
-            return this.ranges.splice(i, 1);
-    };
-    this.merge = function() {
-        var removed = [];
-        var list = this.ranges;
-        
-        list = list.sort(function(a, b) {
-            return comparePoints(a.start, b.start);
-        });
-        
-        var next = list[0], range;
-        for (var i = 1; i < list.length; i++) {
-            range = next;
-            next = list[i];
-            var cmp = comparePoints(range.end, next.start);
-            if (cmp < 0)
-                continue;
-
-            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())
-                continue;
-
-            if (comparePoints(range.end, next.end) < 0) {
-                range.end.row = next.end.row;
-                range.end.column = next.end.column;
-            }
-
-            list.splice(i, 1);
-            removed.push(next);
-            next = range;
-            i--;
-        }
-        
-        this.ranges = list;
-
-        return removed;
-    };
-
-    this.contains = function(row, column) {
-        return this.pointIndex({row: row, column: column}) >= 0;
-    };
-
-    this.containsPoint = function(pos) {
-        return this.pointIndex(pos) >= 0;
-    };
-
-    this.rangeAtPoint = function(pos) {
-        var i = this.pointIndex(pos);
-        if (i >= 0)
-            return this.ranges[i];
-    };
-
-
-    this.clipRows = function(startRow, endRow) {
-        var list = this.ranges;
-        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)
-            return [];
-
-        var startIndex = this.pointIndex({row: startRow, column: 0});
-        if (startIndex < 0)
-            startIndex = -startIndex - 1;
-        var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);
-        if (endIndex < 0)
-            endIndex = -endIndex - 1;
-
-        var clipped = [];
-        for (var i = startIndex; i < endIndex; i++) {
-            clipped.push(list[i]);
-        }
-        return clipped;
-    };
-
-    this.removeAll = function() {
-        return this.ranges.splice(0, this.ranges.length);
-    };
-
-    this.attach = function(session) {
-        if (this.session)
-            this.detach();
-
-        this.session = session;
-        this.onChange = this.$onChange.bind(this);
-
-        this.session.on('change', this.onChange);
-    };
-
-    this.detach = function() {
-        if (!this.session)
-            return;
-        this.session.removeListener('change', this.onChange);
-        this.session = null;
-    };
-
-    this.$onChange = function(e) {
-        var changeRange = e.data.range;
-        if (e.data.action[0] == "i"){
-            var start = changeRange.start;
-            var end = changeRange.end;
-        } else {
-            var end = changeRange.start;
-            var start = changeRange.end;
-        }
-        var startRow = start.row;
-        var endRow = end.row;
-        var lineDif = endRow - startRow;
-
-        var colDiff = -start.column + end.column;
-        var ranges = this.ranges;
-
-        for (var i = 0, n = ranges.length; i < n; i++) {
-            var r = ranges[i];
-            if (r.end.row < startRow)
-                continue;
-            if (r.start.row > startRow)
-                break;
-
-            if (r.start.row == startRow && r.start.column >= start.column ) {
-                
-                r.start.column += colDiff;
-                r.start.row += lineDif;
-            }
-            if (r.end.row == startRow && r.end.column >= start.column) {
-                if (r.end.column == start.column && colDiff > 0 && i < n - 1) {                
-                    if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)
-                        r.end.column -= colDiff;
-                }
-                r.end.column += colDiff;
-                r.end.row += lineDif;
-            }
-        }
-
-        if (lineDif != 0 && i < n) {
-            for (; i < n; i++) {
-                var r = ranges[i];
-                r.start.row += lineDif;
-                r.end.row += lineDif;
-            }
-        }
-    };
-
-}).call(RangeList.prototype);
-
-exports.RangeList = RangeList;
-});
-
-define('ace/edit_session/bracket_match', ['require', 'exports', 'module' , 'ace/token_iterator', 'ace/range'], function(require, exports, module) {
-
-
-var TokenIterator = require("../token_iterator").TokenIterator;
-var Range = require("../range").Range;
-
-
-function BracketMatch() {
-
-    this.findMatchingBracket = function(position, chr) {
-        if (position.column == 0) return null;
-
-        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);
-        if (charBeforeCursor == "") return null;
-
-        var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/);
-        if (!match)
-            return null;
-
-        if (match[1])
-            return this.$findClosingBracket(match[1], position);
-        else
-            return this.$findOpeningBracket(match[2], position);
-    };
-    
-    this.getBracketRange = function(pos) {
-        var line = this.getLine(pos.row);
-        var before = true, range;
-
-        var chr = line.charAt(pos.column-1);
-        var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/);
-        if (!match) {
-            chr = line.charAt(pos.column);
-            pos = {row: pos.row, column: pos.column + 1};
-            match = chr && chr.match(/([\(\[\{])|([\)\]\}])/);
-            before = false;
-        }
-        if (!match)
-            return null;
-
-        if (match[1]) {
-            var bracketPos = this.$findClosingBracket(match[1], pos);
-            if (!bracketPos)
-                return null;
-            range = Range.fromPoints(pos, bracketPos);
-            if (!before) {
-                range.end.column++;
-                range.start.column--;
-            }
-            range.cursor = range.end;
-        } else {
-            var bracketPos = this.$findOpeningBracket(match[2], pos);
-            if (!bracketPos)
-                return null;
-            range = Range.fromPoints(bracketPos, pos);
-            if (!before) {
-                range.start.column++;
-                range.end.column--;
-            }
-            range.cursor = range.start;
-        }
-        
-        return range;
-    };
-
-    this.$brackets = {
-        ")": "(",
-        "(": ")",
-        "]": "[",
-        "[": "]",
-        "{": "}",
-        "}": "{"
-    };
-
-    this.$findOpeningBracket = function(bracket, position, typeRe) {
-        var openBracket = this.$brackets[bracket];
-        var depth = 1;
-
-        var iterator = new TokenIterator(this, position.row, position.column);
-        var token = iterator.getCurrentToken();
-        if (!token)
-            token = iterator.stepForward();
-        if (!token)
-            return;
-        
-         if (!typeRe){
-            typeRe = new RegExp(
-                "(\\.?" +
-                token.type.replace(".", "\\.").replace("rparen", ".paren")
-                + ")+"
-            );
-        }
-        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;
-        var value = token.value;
-        
-        while (true) {
-        
-            while (valueIndex >= 0) {
-                var chr = value.charAt(valueIndex);
-                if (chr == openBracket) {
-                    depth -= 1;
-                    if (depth == 0) {
-                        return {row: iterator.getCurrentTokenRow(),
-                            column: valueIndex + iterator.getCurrentTokenColumn()};
-                    }
-                }
-                else if (chr == bracket) {
-                    depth += 1;
-                }
-                valueIndex -= 1;
-            }
-            do {
-                token = iterator.stepBackward();
-            } while (token && !typeRe.test(token.type));
-
-            if (token == null)
-                break;
-                
-            value = token.value;
-            valueIndex = value.length - 1;
-        }
-        
-        return null;
-    };
-
-    this.$findClosingBracket = function(bracket, position, typeRe) {
-        var closingBracket = this.$brackets[bracket];
-        var depth = 1;
-
-        var iterator = new TokenIterator(this, position.row, position.column);
-        var token = iterator.getCurrentToken();
-        if (!token)
-            token = iterator.stepForward();
-        if (!token)
-            return;
-
-        if (!typeRe){
-            typeRe = new RegExp(
-                "(\\.?" +
-                token.type.replace(".", "\\.").replace("lparen", ".paren")
-                + ")+"
-            );
-        }
-        var valueIndex = position.column - iterator.getCurrentTokenColumn();
-
-        while (true) {
-
-            var value = token.value;
-            var valueLength = value.length;
-            while (valueIndex < valueLength) {
-                var chr = value.charAt(valueIndex);
-                if (chr == closingBracket) {
-                    depth -= 1;
-                    if (depth == 0) {
-                        return {row: iterator.getCurrentTokenRow(),
-                            column: valueIndex + iterator.getCurrentTokenColumn()};
-                    }
-                }
-                else if (chr == bracket) {
-                    depth += 1;
-                }
-                valueIndex += 1;
-            }
-            do {
-                token = iterator.stepForward();
-            } while (token && !typeRe.test(token.type));
-
-            if (token == null)
-                break;
-
-            valueIndex = 0;
-        }
-        
-        return null;
-    };
-}
-exports.BracketMatch = BracketMatch;
-
-});
-
-define('ace/search', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/range'], function(require, exports, module) {
-
-
-var lang = require("./lib/lang");
-var oop = require("./lib/oop");
-var Range = require("./range").Range;
-
-var Search = function() {
-    this.$options = {};
-};
-
-(function() {
-    this.set = function(options) {
-        oop.mixin(this.$options, options);
-        return this;
-    };
-    this.getOptions = function() {
-        return lang.copyObject(this.$options);
-    };
-    this.setOptions = function(options) {
-        this.$options = options;
-    };
-    this.find = function(session) {
-        var iterator = this.$matchIterator(session, this.$options);
-
-        if (!iterator)
-            return false;
-
-        var firstRange = null;
-        iterator.forEach(function(range, row, offset) {
-            if (!range.start) {
-                var column = range.offset + (offset || 0);
-                firstRange = new Range(row, column, row, column+range.length);
-            } else
-                firstRange = range;
-            return true;
-        });
-
-        return firstRange;
-    };
-    this.findAll = function(session) {
-        var options = this.$options;
-        if (!options.needle)
-            return [];
-        this.$assembleRegExp(options);
-
-        var range = options.range;
-        var lines = range
-            ? session.getLines(range.start.row, range.end.row)
-            : session.doc.getAllLines();
-
-        var ranges = [];
-        var re = options.re;
-        if (options.$isMultiLine) {
-            var len = re.length;
-            var maxRow = lines.length - len;
-            for (var row = re.offset || 0; row <= maxRow; row++) {
-                for (var j = 0; j < len; j++)
-                    if (lines[row + j].search(re[j]) == -1)
-                        break;
-                
-                var startLine = lines[row];
-                var line = lines[row + len - 1];
-                var startIndex = startLine.match(re[0])[0].length;
-                var endIndex = line.match(re[len - 1])[0].length;
-
-                ranges.push(new Range(
-                    row, startLine.length - startIndex,
-                    row + len - 1, endIndex
-                ));
-            }
-        } else {
-            for (var i = 0; i < lines.length; i++) {
-                var matches = lang.getMatchOffsets(lines[i], re);
-                for (var j = 0; j < matches.length; j++) {
-                    var match = matches[j];
-                    ranges.push(new Range(i, match.offset, i, match.offset + match.length));
-                }
-            }
-        }
-
-        if (range) {
-            var startColumn = range.start.column;
-            var endColumn = range.start.column;
-            var i = 0, j = ranges.length - 1;
-            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)
-                i++;
-
-            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)
-                j--;
-            
-            ranges = ranges.slice(i, j + 1);
-            for (i = 0, j = ranges.length; i < j; i++) {
-                ranges[i].start.row += range.start.row;
-                ranges[i].end.row += range.start.row;
-            }
-        }
-
-        return ranges;
-    };
-    this.replace = function(input, replacement) {
-        var options = this.$options;
-
-        var re = this.$assembleRegExp(options);
-        if (options.$isMultiLine)
-            return replacement;
-
-        if (!re)
-            return;
-
-        var match = re.exec(input);
-        if (!match || match[0].length != input.length)
-            return null;
-        
-        replacement = input.replace(re, replacement);
-        if (options.preserveCase) {
-            replacement = replacement.split("");
-            for (var i = Math.min(input.length, input.length); i--; ) {
-                var ch = input[i];
-                if (ch && ch.toLowerCase() != ch)
-                    replacement[i] = replacement[i].toUpperCase();
-                else
-                    replacement[i] = replacement[i].toLowerCase();
-            }
-            replacement = replacement.join("");
-        }
-        
-        return replacement;
-    };
-
-    this.$matchIterator = function(session, options) {
-        var re = this.$assembleRegExp(options);
-        if (!re)
-            return false;
-
-        var self = this, callback, backwards = options.backwards;
-
-        if (options.$isMultiLine) {
-            var len = re.length;
-            var matchIterator = function(line, row, offset) {
-                var startIndex = line.search(re[0]);
-                if (startIndex == -1)
-                    return;
-                for (var i = 1; i < len; i++) {
-                    line = session.getLine(row + i);
-                    if (line.search(re[i]) == -1)
-                        return;
-                }
-
-                var endIndex = line.match(re[len - 1])[0].length;
-
-                var range = new Range(row, startIndex, row + len - 1, endIndex);
-                if (re.offset == 1) {
-                    range.start.row--;
-                    range.start.column = Number.MAX_VALUE;
-                } else if (offset)
-                    range.start.column += offset;
-
-                if (callback(range))
-                    return true;
-            };
-        } else if (backwards) {
-            var matchIterator = function(line, row, startIndex) {
-                var matches = lang.getMatchOffsets(line, re);
-                for (var i = matches.length-1; i >= 0; i--)
-                    if (callback(matches[i], row, startIndex))
-                        return true;
-            };
-        } else {
-            var matchIterator = function(line, row, startIndex) {
-                var matches = lang.getMatchOffsets(line, re);
-                for (var i = 0; i < matches.length; i++)
-                    if (callback(matches[i], row, startIndex))
-                        return true;
-            };
-        }
-
-        return {
-            forEach: function(_callback) {
-                callback = _callback;
-                self.$lineIterator(session, options).forEach(matchIterator);
-            }
-        };
-    };
-
-    this.$assembleRegExp = function(options, $disableFakeMultiline) {
-        if (options.needle instanceof RegExp)
-            return options.re = options.needle;
-
-        var needle = options.needle;
-
-        if (!options.needle)
-            return options.re = false;
-
-        if (!options.regExp)
-            needle = lang.escapeRegExp(needle);
-
-        if (options.wholeWord)
-            needle = "\\b" + needle + "\\b";
-
-        var modifier = options.caseSensitive ? "g" : "gi";
-
-        options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle);
-        if (options.$isMultiLine)
-            return options.re = this.$assembleMultilineRegExp(needle, modifier);
-
-        try {
-            var re = new RegExp(needle, modifier);
-        } catch(e) {
-            re = false;
-        }
-        return options.re = re;
-    };
-
-    this.$assembleMultilineRegExp = function(needle, modifier) {
-        var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n");
-        var re = [];
-        for (var i = 0; i < parts.length; i++) try {
-            re.push(new RegExp(parts[i], modifier));
-        } catch(e) {
-            return false;
-        }
-        if (parts[0] == "") {
-            re.shift();
-            re.offset = 1;
-        } else {
-            re.offset = 0;
-        }
-        return re;
-    };
-
-    this.$lineIterator = function(session, options) {
-        var backwards = options.backwards == true;
-        var skipCurrent = options.skipCurrent != false;
-
-        var range = options.range;
-        var start = options.start;
-        if (!start)
-            start = range ? range[backwards ? "end" : "start"] : session.selection.getRange();
-         
-        if (start.start)
-            start = start[skipCurrent != backwards ? "end" : "start"];
-
-        var firstRow = range ? range.start.row : 0;
-        var lastRow = range ? range.end.row : session.getLength() - 1;
-
-        var forEach = backwards ? function(callback) {
-                var row = start.row;
-
-                var line = session.getLine(row).substring(0, start.column);
-                if (callback(line, row))
-                    return;
-
-                for (row--; row >= firstRow; row--)
-                    if (callback(session.getLine(row), row))
-                        return;
-
-                if (options.wrap == false)
-                    return;
-
-                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)
-                    if (callback(session.getLine(row), row))
-                        return;
-            } : function(callback) {
-                var row = start.row;
-
-                var line = session.getLine(row).substr(start.column);
-                if (callback(line, row, start.column))
-                    return;
-
-                for (row = row+1; row <= lastRow; row++)
-                    if (callback(session.getLine(row), row))
-                        return;
-
-                if (options.wrap == false)
-                    return;
-
-                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)
-                    if (callback(session.getLine(row), row))
-                        return;
-            };
-        
-        return {forEach: forEach};
-    };
-
-}).call(Search.prototype);
-
-exports.Search = Search;
-});
-define('ace/commands/command_manager', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/keyboard/hash_handler', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var HashHandler = require("../keyboard/hash_handler").HashHandler;
-var EventEmitter = require("../lib/event_emitter").EventEmitter;
-
-var CommandManager = function(platform, commands) {
-    this.platform = platform;
-    this.commands = this.byName = {};
-    this.commmandKeyBinding = {};
-
-    this.addCommands(commands);
-
-    this.setDefaultHandler("exec", function(e) {
-        return e.command.exec(e.editor, e.args || {});
-    });
-};
-
-oop.inherits(CommandManager, HashHandler);
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.exec = function(command, editor, args) {
-        if (typeof command === 'string')
-            command = this.commands[command];
-
-        if (!command)
-            return false;
-
-        if (editor && editor.$readOnly && !command.readOnly)
-            return false;
-
-        var e = {editor: editor, command: command, args: args};
-        var retvalue = this._emit("exec", e);
-        this._signal("afterExec", e);
-
-        return retvalue === false ? false : true;
-    };
-
-    this.toggleRecording = function(editor) {
-        if (this.$inReplay)
-            return;
-
-        editor && editor._emit("changeStatus");
-        if (this.recording) {
-            this.macro.pop();
-            this.removeEventListener("exec", this.$addCommandToMacro);
-
-            if (!this.macro.length)
-                this.macro = this.oldMacro;
-
-            return this.recording = false;
-        }
-        if (!this.$addCommandToMacro) {
-            this.$addCommandToMacro = function(e) {
-                this.macro.push([e.command, e.args]);
-            }.bind(this);
-        }
-
-        this.oldMacro = this.macro;
-        this.macro = [];
-        this.on("exec", this.$addCommandToMacro);
-        return this.recording = true;
-    };
-
-    this.replay = function(editor) {
-        if (this.$inReplay || !this.macro)
-            return;
-
-        if (this.recording)
-            return this.toggleRecording(editor);
-
-        try {
-            this.$inReplay = true;
-            this.macro.forEach(function(x) {
-                if (typeof x == "string")
-                    this.exec(x, editor);
-                else
-                    this.exec(x[0], editor, x[1]);
-            }, this);
-        } finally {
-            this.$inReplay = false;
-        }
-    };
-
-    this.trimMacro = function(m) {
-        return m.map(function(x){
-            if (typeof x[0] != "string")
-                x[0] = x[0].name;
-            if (!x[1])
-                x = x[0];
-            return x;
-        });
-    };
-
-}).call(CommandManager.prototype);
-
-exports.CommandManager = CommandManager;
-
-});
-
-define('ace/keyboard/hash_handler', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/useragent'], function(require, exports, module) {
-
-
-var keyUtil = require("../lib/keys");
-var useragent = require("../lib/useragent");
-
-function HashHandler(config, platform) {
-    this.platform = platform || (useragent.isMac ? "mac" : "win");
-    this.commands = {};
-    this.commmandKeyBinding = {};
-
-    this.addCommands(config);
-};
-
-(function() {
-
-    this.addCommand = function(command) {
-        if (this.commands[command.name])
-            this.removeCommand(command);
-
-        this.commands[command.name] = command;
-
-        if (command.bindKey)
-            this._buildKeyHash(command);
-    };
-
-    this.removeCommand = function(command) {
-        var name = (typeof command === 'string' ? command : command.name);
-        command = this.commands[name];
-        delete this.commands[name];
-        var ckb = this.commmandKeyBinding;
-        for (var hashId in ckb) {
-            for (var key in ckb[hashId]) {
-                if (ckb[hashId][key] == command)
-                    delete ckb[hashId][key];
-            }
-        }
-    };
-
-    this.bindKey = function(key, command) {
-        if(!key)
-            return;
-        if (typeof command == "function") {
-            this.addCommand({exec: command, bindKey: key, name: command.name || key});
-            return;
-        }
-
-        var ckb = this.commmandKeyBinding;
-        key.split("|").forEach(function(keyPart) {
-            var binding = this.parseKeys(keyPart, command);
-            var hashId = binding.hashId;
-            (ckb[hashId] || (ckb[hashId] = {}))[binding.key] = command;
-        }, this);
-    };
-
-    this.addCommands = function(commands) {
-        commands && Object.keys(commands).forEach(function(name) {
-            var command = commands[name];
-            if (typeof command === "string")
-                return this.bindKey(command, name);
-
-            if (typeof command === "function")
-                command = { exec: command };
-
-            if (!command.name)
-                command.name = name;
-
-            this.addCommand(command);
-        }, this);
-    };
-
-    this.removeCommands = function(commands) {
-        Object.keys(commands).forEach(function(name) {
-            this.removeCommand(commands[name]);
-        }, this);
-    };
-
-    this.bindKeys = function(keyList) {
-        Object.keys(keyList).forEach(function(key) {
-            this.bindKey(key, keyList[key]);
-        }, this);
-    };
-
-    this._buildKeyHash = function(command) {
-        var binding = command.bindKey;
-        if (!binding)
-            return;
-
-        var key = typeof binding == "string" ? binding: binding[this.platform];
-        this.bindKey(key, command);
-    };
-    this.parseKeys = function(keys) {
-        if (keys.indexOf(" ") != -1)
-            keys = keys.split(/\s+/).pop();
-
-        var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x});
-        var key = parts.pop();
-
-        var keyCode = keyUtil[key];
-        if (keyUtil.FUNCTION_KEYS[keyCode])
-            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();
-        else if (!parts.length)
-            return {key: key, hashId: -1};
-        else if (parts.length == 1 && parts[0] == "shift")
-            return {key: key.toUpperCase(), hashId: -1};
-
-        var hashId = 0;
-        for (var i = parts.length; i--;) {
-            var modifier = keyUtil.KEY_MODS[parts[i]];
-            if (modifier == null) {
-                if (typeof console != "undefined")
-                console.error("invalid modifier " + parts[i] + " in " + keys);
-                return false;
-            }
-            hashId |= modifier;
-        }
-        return {key: key, hashId: hashId};
-    };
-
-    this.findKeyCommand = function findKeyCommand(hashId, keyString) {
-        var ckbr = this.commmandKeyBinding;
-        return ckbr[hashId] && ckbr[hashId][keyString];
-    };
-
-    this.handleKeyboard = function(data, hashId, keyString, keyCode) {
-        return {
-            command: this.findKeyCommand(hashId, keyString)
-        };
-    };
-
-}).call(HashHandler.prototype)
-
-exports.HashHandler = HashHandler;
-});
-
-define('ace/commands/default_commands', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/config'], function(require, exports, module) {
-
-
-var lang = require("../lib/lang");
-var config = require("../config");
-
-function bindKey(win, mac) {
-    return {
-        win: win,
-        mac: mac
-    };
-}
-
-exports.commands = [{
-    name: "showSettingsMenu",
-    bindKey: bindKey("Ctrl-,", "Command-,"),
-    exec: function(editor) {
-        config.loadModule("ace/ext/settings_menu", function(module) {
-            module.init(editor);
-            editor.showSettingsMenu();
-        });
-    },
-    readOnly: true
-}, {
-    name: "selectall",
-    bindKey: bindKey("Ctrl-A", "Command-A"),
-    exec: function(editor) { editor.selectAll(); },
-    readOnly: true
-}, {
-    name: "centerselection",
-    bindKey: bindKey(null, "Ctrl-L"),
-    exec: function(editor) { editor.centerSelection(); },
-    readOnly: true
-}, {
-    name: "gotoline",
-    bindKey: bindKey("Ctrl-L", "Command-L"),
-    exec: function(editor) {
-        var line = parseInt(prompt("Enter line number:"), 10);
-        if (!isNaN(line)) {
-            editor.gotoLine(line);
-        }
-    },
-    readOnly: true
-}, {
-    name: "fold",
-    bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"),
-    exec: function(editor) { editor.session.toggleFold(false); },
-    readOnly: true
-}, {
-    name: "unfold",
-    bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"),
-    exec: function(editor) { editor.session.toggleFold(true); },
-    readOnly: true
-}, {
-    name: "foldall",
-    bindKey: bindKey("Alt-0", "Command-Option-0"),
-    exec: function(editor) { editor.session.foldAll(); },
-    readOnly: true
-}, {
-    name: "unfoldall",
-    bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"),
-    exec: function(editor) { editor.session.unfold(); },
-    readOnly: true
-}, {
-    name: "findnext",
-    bindKey: bindKey("Ctrl-K", "Command-G"),
-    exec: function(editor) { editor.findNext(); },
-    readOnly: true
-}, {
-    name: "findprevious",
-    bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"),
-    exec: function(editor) { editor.findPrevious(); },
-    readOnly: true
-}, {
-    name: "find",
-    bindKey: bindKey("Ctrl-F", "Command-F"),
-    exec: function(editor) {
-        config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)});
-    },
-    readOnly: true
-}, {
-    name: "overwrite",
-    bindKey: "Insert",
-    exec: function(editor) { editor.toggleOverwrite(); },
-    readOnly: true
-}, {
-    name: "selecttostart",
-    bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"),
-    exec: function(editor) { editor.getSelection().selectFileStart(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotostart",
-    bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"),
-    exec: function(editor) { editor.navigateFileStart(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectup",
-    bindKey: bindKey("Shift-Up", "Shift-Up"),
-    exec: function(editor) { editor.getSelection().selectUp(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "golineup",
-    bindKey: bindKey("Up", "Up|Ctrl-P"),
-    exec: function(editor, args) { editor.navigateUp(args.times); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selecttoend",
-    bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"),
-    exec: function(editor) { editor.getSelection().selectFileEnd(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotoend",
-    bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"),
-    exec: function(editor) { editor.navigateFileEnd(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectdown",
-    bindKey: bindKey("Shift-Down", "Shift-Down"),
-    exec: function(editor) { editor.getSelection().selectDown(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "golinedown",
-    bindKey: bindKey("Down", "Down|Ctrl-N"),
-    exec: function(editor, args) { editor.navigateDown(args.times); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectwordleft",
-    bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"),
-    exec: function(editor) { editor.getSelection().selectWordLeft(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotowordleft",
-    bindKey: bindKey("Ctrl-Left", "Option-Left"),
-    exec: function(editor) { editor.navigateWordLeft(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selecttolinestart",
-    bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"),
-    exec: function(editor) { editor.getSelection().selectLineStart(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotolinestart",
-    bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"),
-    exec: function(editor) { editor.navigateLineStart(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectleft",
-    bindKey: bindKey("Shift-Left", "Shift-Left"),
-    exec: function(editor) { editor.getSelection().selectLeft(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotoleft",
-    bindKey: bindKey("Left", "Left|Ctrl-B"),
-    exec: function(editor, args) { editor.navigateLeft(args.times); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectwordright",
-    bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"),
-    exec: function(editor) { editor.getSelection().selectWordRight(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotowordright",
-    bindKey: bindKey("Ctrl-Right", "Option-Right"),
-    exec: function(editor) { editor.navigateWordRight(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selecttolineend",
-    bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"),
-    exec: function(editor) { editor.getSelection().selectLineEnd(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotolineend",
-    bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"),
-    exec: function(editor) { editor.navigateLineEnd(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectright",
-    bindKey: bindKey("Shift-Right", "Shift-Right"),
-    exec: function(editor) { editor.getSelection().selectRight(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "gotoright",
-    bindKey: bindKey("Right", "Right|Ctrl-F"),
-    exec: function(editor, args) { editor.navigateRight(args.times); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectpagedown",
-    bindKey: "Shift-PageDown",
-    exec: function(editor) { editor.selectPageDown(); },
-    readOnly: true
-}, {
-    name: "pagedown",
-    bindKey: bindKey(null, "Option-PageDown"),
-    exec: function(editor) { editor.scrollPageDown(); },
-    readOnly: true
-}, {
-    name: "gotopagedown",
-    bindKey: bindKey("PageDown", "PageDown|Ctrl-V"),
-    exec: function(editor) { editor.gotoPageDown(); },
-    readOnly: true
-}, {
-    name: "selectpageup",
-    bindKey: "Shift-PageUp",
-    exec: function(editor) { editor.selectPageUp(); },
-    readOnly: true
-}, {
-    name: "pageup",
-    bindKey: bindKey(null, "Option-PageUp"),
-    exec: function(editor) { editor.scrollPageUp(); },
-    readOnly: true
-}, {
-    name: "gotopageup",
-    bindKey: "PageUp",
-    exec: function(editor) { editor.gotoPageUp(); },
-    readOnly: true
-}, {
-    name: "scrollup",
-    bindKey: bindKey("Ctrl-Up", null),
-    exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },
-    readOnly: true
-}, {
-    name: "scrolldown",
-    bindKey: bindKey("Ctrl-Down", null),
-    exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },
-    readOnly: true
-}, {
-    name: "selectlinestart",
-    bindKey: "Shift-Home",
-    exec: function(editor) { editor.getSelection().selectLineStart(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selectlineend",
-    bindKey: "Shift-End",
-    exec: function(editor) { editor.getSelection().selectLineEnd(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "togglerecording",
-    bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"),
-    exec: function(editor) { editor.commands.toggleRecording(editor); },
-    readOnly: true
-}, {
-    name: "replaymacro",
-    bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"),
-    exec: function(editor) { editor.commands.replay(editor); },
-    readOnly: true
-}, {
-    name: "jumptomatching",
-    bindKey: bindKey("Ctrl-P", "Ctrl-Shift-P"),
-    exec: function(editor) { editor.jumpToMatching(); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, {
-    name: "selecttomatching",
-    bindKey: bindKey("Ctrl-Shift-P", null),
-    exec: function(editor) { editor.jumpToMatching(true); },
-    multiSelectAction: "forEach",
-    readOnly: true
-}, 
-{
-    name: "cut",
-    exec: function(editor) {
-        var range = editor.getSelectionRange();
-        editor._emit("cut", range);
-
-        if (!editor.selection.isEmpty()) {
-            editor.session.remove(range);
-            editor.clearSelection();
-        }
-    },
-    multiSelectAction: "forEach"
-}, {
-    name: "removeline",
-    bindKey: bindKey("Ctrl-D", "Command-D"),
-    exec: function(editor) { editor.removeLines(); },
-    multiSelectAction: "forEachLine"
-}, {
-    name: "duplicateSelection",
-    bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"),
-    exec: function(editor) { editor.duplicateSelection(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "sortlines",
-    bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"),
-    exec: function(editor) { editor.sortLines(); },
-    multiSelectAction: "forEachLine"
-}, {
-    name: "togglecomment",
-    bindKey: bindKey("Ctrl-/", "Command-/"),
-    exec: function(editor) { editor.toggleCommentLines(); },
-    multiSelectAction: "forEachLine"
-}, {
-    name: "toggleBlockComment",
-    bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"),
-    exec: function(editor) { editor.toggleBlockComment(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "modifyNumberUp",
-    bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"),
-    exec: function(editor) { editor.modifyNumber(1); },
-    multiSelectAction: "forEach"
-}, {
-    name: "modifyNumberDown",
-    bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"),
-    exec: function(editor) { editor.modifyNumber(-1); },
-    multiSelectAction: "forEach"
-}, {
-    name: "replace",
-    bindKey: bindKey("Ctrl-H", "Command-Option-F"),
-    exec: function(editor) {
-        config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)});
-    }
-}, {
-    name: "undo",
-    bindKey: bindKey("Ctrl-Z", "Command-Z"),
-    exec: function(editor) { editor.undo(); }
-}, {
-    name: "redo",
-    bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"),
-    exec: function(editor) { editor.redo(); }
-}, {
-    name: "copylinesup",
-    bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"),
-    exec: function(editor) { editor.copyLinesUp(); }
-}, {
-    name: "movelinesup",
-    bindKey: bindKey("Alt-Up", "Option-Up"),
-    exec: function(editor) { editor.moveLinesUp(); }
-}, {
-    name: "copylinesdown",
-    bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"),
-    exec: function(editor) { editor.copyLinesDown(); }
-}, {
-    name: "movelinesdown",
-    bindKey: bindKey("Alt-Down", "Option-Down"),
-    exec: function(editor) { editor.moveLinesDown(); }
-}, {
-    name: "del",
-    bindKey: bindKey("Delete", "Delete|Ctrl-D"),
-    exec: function(editor) { editor.remove("right"); },
-    multiSelectAction: "forEach"
-}, {
-    name: "backspace",
-    bindKey: bindKey(
-        "Command-Backspace|Option-Backspace|Shift-Backspace|Backspace",
-        "Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"
-    ),
-    exec: function(editor) { editor.remove("left"); },
-    multiSelectAction: "forEach"
-}, {
-    name: "removetolinestart",
-    bindKey: bindKey("Alt-Backspace", "Command-Backspace"),
-    exec: function(editor) { editor.removeToLineStart(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "removetolineend",
-    bindKey: bindKey("Alt-Delete", "Ctrl-K"),
-    exec: function(editor) { editor.removeToLineEnd(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "removewordleft",
-    bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"),
-    exec: function(editor) { editor.removeWordLeft(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "removewordright",
-    bindKey: bindKey("Ctrl-Delete", "Alt-Delete"),
-    exec: function(editor) { editor.removeWordRight(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "outdent",
-    bindKey: bindKey("Shift-Tab", "Shift-Tab"),
-    exec: function(editor) { editor.blockOutdent(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "indent",
-    bindKey: bindKey("Tab", "Tab"),
-    exec: function(editor) { editor.indent(); },
-    multiSelectAction: "forEach"
-},{
-    name: "blockoutdent",
-    bindKey: bindKey("Ctrl-[", "Ctrl-["),
-    exec: function(editor) { editor.blockOutdent(); },
-    multiSelectAction: "forEachLine"
-},{
-    name: "blockindent",
-    bindKey: bindKey("Ctrl-]", "Ctrl-]"),
-    exec: function(editor) { editor.blockIndent(); },
-    multiSelectAction: "forEachLine"
-}, {
-    name: "insertstring",
-    exec: function(editor, str) { editor.insert(str); },
-    multiSelectAction: "forEach"
-}, {
-    name: "inserttext",
-    exec: function(editor, args) {
-        editor.insert(lang.stringRepeat(args.text  || "", args.times || 1));
-    },
-    multiSelectAction: "forEach"
-}, {
-    name: "splitline",
-    bindKey: bindKey(null, "Ctrl-O"),
-    exec: function(editor) { editor.splitLine(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "transposeletters",
-    bindKey: bindKey("Ctrl-T", "Ctrl-T"),
-    exec: function(editor) { editor.transposeLetters(); },
-    multiSelectAction: function(editor) {editor.transposeSelections(1); }
-}, {
-    name: "touppercase",
-    bindKey: bindKey("Ctrl-U", "Ctrl-U"),
-    exec: function(editor) { editor.toUpperCase(); },
-    multiSelectAction: "forEach"
-}, {
-    name: "tolowercase",
-    bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"),
-    exec: function(editor) { editor.toLowerCase(); },
-    multiSelectAction: "forEach"
-}];
-
-});
-
-define('ace/undomanager', ['require', 'exports', 'module' ], function(require, exports, module) {
-var UndoManager = function() {
-    this.reset();
-};
-
-(function() {
-    this.execute = function(options) {
-        var deltas = options.args[0];
-        this.$doc  = options.args[1];
-        this.$undoStack.push(deltas);
-        this.$redoStack = [];
-
-        if (this.dirtyCounter < 0) {
-            this.dirtyCounter = NaN;
-        }
-        this.dirtyCounter++;
-    };
-    this.undo = function(dontSelect) {
-        var deltas = this.$undoStack.pop();
-        var undoSelectionRange = null;
-        if (deltas) {
-            undoSelectionRange =
-                this.$doc.undoChanges(deltas, dontSelect);
-            this.$redoStack.push(deltas);
-            this.dirtyCounter--;
-        }
-
-        return undoSelectionRange;
-    };
-    this.redo = function(dontSelect) {
-        var deltas = this.$redoStack.pop();
-        var redoSelectionRange = null;
-        if (deltas) {
-            redoSelectionRange =
-                this.$doc.redoChanges(deltas, dontSelect);
-            this.$undoStack.push(deltas);
-            this.dirtyCounter++;
-        }
-
-        return redoSelectionRange;
-    };
-    this.reset = function() {
-        this.$undoStack = [];
-        this.$redoStack = [];
-        this.dirtyCounter = 0;
-    };
-    this.hasUndo = function() {
-        return this.$undoStack.length > 0;
-    };
-    this.hasRedo = function() {
-        return this.$redoStack.length > 0;
-    };
-    this.markClean = function() {
-        this.dirtyCounter = 0;
-    };
-    this.isClean = function() {
-        return this.dirtyCounter === 0;
-    };
-
-}).call(UndoManager.prototype);
-
-exports.UndoManager = UndoManager;
-});
-
-define('ace/virtual_renderer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/event', 'ace/lib/useragent', 'ace/config', 'ace/layer/gutter', 'ace/layer/marker', 'ace/layer/text', 'ace/layer/cursor', 'ace/scrollbar', 'ace/renderloop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var dom = require("./lib/dom");
-var event = require("./lib/event");
-var useragent = require("./lib/useragent");
-var config = require("./config");
-var GutterLayer = require("./layer/gutter").Gutter;
-var MarkerLayer = require("./layer/marker").Marker;
-var TextLayer = require("./layer/text").Text;
-var CursorLayer = require("./layer/cursor").Cursor;
-var ScrollBar = require("./scrollbar").ScrollBar;
-var RenderLoop = require("./renderloop").RenderLoop;
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var editorCss = ".ace_editor {\
-position: relative;\
-overflow: hidden;\
-font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\
-font-size: 12px;\
-line-height: normal;\
-color: black;\
-}\
-.ace_scroller {\
-position: absolute;\
-overflow: hidden;\
-top: 0;\
-bottom: 0;\
-background-color: inherit;\
-}\
-.ace_content {\
-position: absolute;\
--moz-box-sizing: border-box;\
--webkit-box-sizing: border-box;\
-box-sizing: border-box;\
-cursor: text;\
-}\
-.ace_gutter {\
-position: absolute;\
-overflow : hidden;\
-width: auto;\
-top: 0;\
-bottom: 0;\
-left: 0;\
-cursor: default;\
-z-index: 4;\
-}\
-.ace_gutter-active-line {\
-position: absolute;\
-left: 0;\
-right: 0;\
-}\
-.ace_scroller.ace_scroll-left {\
-box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\
-}\
-.ace_gutter-cell {\
-padding-left: 19px;\
-padding-right: 6px;\
-background-repeat: no-repeat;\
-}\
-.ace_gutter-cell.ace_error {\
-background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUM2OEZDQTQ4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUM2OEZDQTU4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQzY4RkNBMjhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQzY4RkNBMzhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkgXxbAAAAJbSURBVHjapFNNaBNBFH4zs5vdZLP5sQmNpT82QY209heh1ioWisaDRcSKF0WKJ0GQnrzrxasHsR6EnlrwD0TagxJabaVEpFYxLWlLSS822tr87m66ccfd2GKyVhA6MMybgfe97/vmPUQphd0sZjto9XIn9OOsvlu2nkqRzVU+6vvlzPf8W6bk8dxQ0NPbxAALgCgg2JkaQuhzQau/El0zbmUA7U0Es8v2CiYmKQJHGO1QICCLoqilMhkmurDAyapKgqItezi/USRdJqEYY4D5jCy03ht2yMkkvL91jTTX10qzyyu2hruPRN7jgbH+EOsXcMLgYiThEgAMhABW85oqy1DXdRIdvP1AHJ2acQXvDIrVHcdQNrEKNYSVMSZGMjEzIIAwDXIo+6G/FxcGnzkC3T2oMhLjre49sBB+RRcHLqdafK6sYdE/GGBwU1VpFNj0aN8pJbe+BkZyevUrvLl6Xmm0W9IuTc0DxrDNAJd5oEvI/KRsNC3bQyNjPO9yQ1YHcfj2QvfQc/5TUhJTBc2iM0U7AWDQtc1nJHvD/cfO2s7jaGkiTEfa/Ep8coLu7zmNmh8+dc5lZDuUeFAGUNA/OY6JVaypQ0vjr7XYjUvJM37vt+j1vuTK5DgVfVUoTjVe+y3/LxMxY2GgU+CSLy4cpfsYorRXuXIOi0Vt40h67uZFTdIo6nLaZcwUJWAzwNS0tBnqqKzQDnjdG/iPyZxo46HaKUpbvYkj8qYRTZsBhge+JHhZyh0x9b95JqjVJkT084kZIPwu/mPWqPgfQ5jXh2+92Ay7HedfAgwA6KDWafb4w3cAAAAASUVORK5CYII=\");\
-background-repeat: no-repeat;\
-background-position: 2px center;\
-}\
-.ace_gutter-cell.ace_warning {\
-background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUM2OEZDQTg4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUM2OEZDQTk4RTU0MTFFMUEzM0VFRTM2RUY1M0RBMjYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQzY4RkNBNjhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQzY4RkNBNzhFNTQxMUUxQTMzRUVFMzZFRjUzREEyNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pgd7PfIAAAGmSURBVHjaYvr//z8DJZiJgUIANoCRkREb9gLiSVAaQx4OQM7AAkwd7XU2/v++/rOttdYGEB9dASEvOMydGKfH8Gv/p4XTkvRBfLxeQAP+1cUhXopyvzhP7P/IoSj7g7Mw09cNKO6J1QQ0L4gICPIv/veg/8W+JdFvQNLHVsW9/nmn9zk7B+cCkDwhL7gt6knSZnx9/LuCEOcvkIAMP+cvto9nfqyZmmUAksfnBUtbM60gX/3/kgyv3/xSFOL5DZT+L8vP+Yfh5cvfPvp/xUHyQHXGyAYwgpwBjZYFT3Y1OEl/OfCH4ffv3wzc4iwMvNIsDJ+f/mH4+vIPAxsb631WW0Yln6ZpQLXdMK/DXGDflh+sIv37EivD5x//Gb7+YWT4y86sl7BCCkSD+Z++/1dkvsFRl+HnD1Rvje4F8whjMXmGj58YGf5zsDMwcnAwfPvKcml62DsQDeaDxN+/Y0qwlpEHqrdB94IRNIDUgfgfKJChGK4OikEW3gTiXUB950ASLFAF54AC94A0G9QAfOnmF9DCDzABFqS08IHYDIScdijOjQABBgC+/9awBH96jwAAAABJRU5ErkJggg==\");\
-background-position: 2px center;\
-}\
-.ace_gutter-cell.ace_info {\
-background-image: url(\"data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7\");\
-background-position: 2px center;\
-}\
-.ace_dark .ace_gutter-cell.ace_info {\
-background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRTk5MTVGREIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRTk5MTVGRUIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZFOTkxNUZCQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkZFOTkxNUZDQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SIDkjAAAAJ1JREFUeNpi/P//PwMlgImBQkB7A6qrq/+DMC55FkIGKCoq4pVnpFkgTp069f/+/fv/r1u37r+tre1/kg0A+ptn9uzZYLaRkRHpLvjw4cNXWVlZhufPnzOcO3eOdAO0tbVPAjHDmzdvGA4fPsxIsgGSkpJmv379Ynj37h2DjIyMCMkG3LhxQ/T27dsMampqDHZ2dq/pH41DxwCAAAMAFdc68dUsFZgAAAAASUVORK5CYII=\");\
-}\
-.ace_scrollbar {\
-position: absolute;\
-overflow-x: hidden;\
-overflow-y: scroll;\
-right: 0;\
-top: 0;\
-bottom: 0;\
-}\
-.ace_scrollbar-inner {\
-position: absolute;\
-width: 1px;\
-left: 0;\
-}\
-.ace_print-margin {\
-position: absolute;\
-height: 100%;\
-}\
-.ace_text-input {\
-position: absolute;\
-z-index: 0;\
-width: 0.5em;\
-height: 1em;\
-opacity: 0;\
-background: transparent;\
--moz-appearance: none;\
-appearance: none;\
-border: none;\
-resize: none;\
-outline: none;\
-overflow: hidden;\
-font: inherit;\
-padding: 0 1px;\
-margin: 0 -1px;\
-}\
-.ace_text-input.ace_composition {\
-background: #f8f8f8;\
-color: #111;\
-z-index: 1000;\
-opacity: 1;\
-}\
-.ace_layer {\
-z-index: 1;\
-position: absolute;\
-overflow: hidden;\
-white-space: nowrap;\
-height: 100%;\
-width: 100%;\
--moz-box-sizing: border-box;\
--webkit-box-sizing: border-box;\
-box-sizing: border-box;\
-/* setting pointer-events: auto; on node under the mouse, which changes\
-during scroll, will break mouse wheel scrolling in Safari */\
-pointer-events: none;\
-}\
-.ace_gutter-layer {\
-position: relative;\
-width: auto;\
-text-align: right;\
-pointer-events: auto;\
-}\
-.ace_text-layer {\
-font: inherit !important;\
-}\
-.ace_cjk {\
-display: inline-block;\
-text-align: center;\
-}\
-.ace_cursor-layer {\
-z-index: 4;\
-}\
-.ace_cursor {\
-z-index: 4;\
-position: absolute;\
--moz-box-sizing: border-box;\
--webkit-box-sizing: border-box;\
-box-sizing: border-box;\
-}\
-.ace_hidden-cursors .ace_cursor {\
-opacity: 0.2;\
-}\
-.ace_smooth-blinking .ace_cursor {\
--moz-transition: opacity 0.18s;\
--webkit-transition: opacity 0.18s;\
--o-transition: opacity 0.18s;\
--ms-transition: opacity 0.18s;\
-transition: opacity 0.18s;\
-}\
-.ace_cursor[style*=\"opacity: 0\"]{\
--ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\
-}\
-.ace_editor.ace_multiselect .ace_cursor {\
-border-left-width: 1px;\
-}\
-.ace_line {\
-white-space: nowrap;\
-}\
-.ace_marker-layer .ace_step {\
-position: absolute;\
-z-index: 3;\
-}\
-.ace_marker-layer .ace_selection {\
-position: absolute;\
-z-index: 5;\
-}\
-.ace_marker-layer .ace_bracket {\
-position: absolute;\
-z-index: 6;\
-}\
-.ace_marker-layer .ace_active-line {\
-position: absolute;\
-z-index: 2;\
-}\
-.ace_marker-layer .ace_selected-word {\
-position: absolute;\
-z-index: 4;\
--moz-box-sizing: border-box;\
--webkit-box-sizing: border-box;\
-box-sizing: border-box;\
-}\
-.ace_line .ace_fold {\
--moz-box-sizing: border-box;\
--webkit-box-sizing: border-box;\
-box-sizing: border-box;\
-display: inline-block;\
-height: 11px;\
-margin-top: -2px;\
-vertical-align: middle;\
-background-image:\
-url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\
-url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%3AIDAT8%11c%FC%FF%FF%7F%18%03%1A%60%01%F2%3F%A0%891%80%04%FF%11-%F8%17%9BJ%E2%05%B1ZD%81v%26t%E7%80%F8%A3%82h%A12%1A%20%A3%01%02%0F%01%BA%25%06%00%19%C0%0D%AEF%D5%3ES%00%00%00%00IEND%AEB%60%82\");\
-background-repeat: no-repeat, repeat-x;\
-background-position: center center, top left;\
-color: transparent;\
-border: 1px solid black;\
--moz-border-radius: 2px;\
--webkit-border-radius: 2px;\
-border-radius: 2px;\
-cursor: pointer;\
-pointer-events: auto;\
-}\
-.ace_dark .ace_fold {\
-}\
-.ace_fold:hover{\
-background-image:\
-url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\
-url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%003IDAT8%11c%FC%FF%FF%7F%3E%03%1A%60%01%F2%3F%A3%891%80%04%FFQ%26%F8w%C0%B43%A1%DB%0C%E2%8F%0A%A2%85%CAh%80%8C%06%08%3C%04%E8%96%18%00%A3S%0D%CD%CF%D8%C1%9D%00%00%00%00IEND%AEB%60%82\");\
-background-repeat: no-repeat, repeat-x;\
-background-position: center center, top left;\
-}\
-.ace_editor.ace_dragging .ace_content {\
-cursor: move;\
-}\
-.ace_gutter-tooltip {\
-background-color: #FFF;\
-background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\
-background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\
-border: 1px solid gray;\
-border-radius: 1px;\
-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\
-color: black;\
-display: inline-block;\
-max-width: 500px;\
-padding: 4px;\
-position: fixed;\
-z-index: 300;\
--moz-box-sizing: border-box;\
--webkit-box-sizing: border-box;\
-box-sizing: border-box;\
-cursor: default;\
-white-space: pre-line;\
-word-wrap: break-word;\
-line-height: normal;\
-font-style: normal;\
-font-weight: normal;\
-letter-spacing: normal;\
-}\
-.ace_folding-enabled > .ace_gutter-cell {\
-padding-right: 13px;\
-}\
-.ace_fold-widget {\
--moz-box-sizing: border-box;\
--webkit-box-sizing: border-box;\
-box-sizing: border-box;\
-margin: 0 -12px 0 1px;\
-display: none;\
-width: 11px;\
-vertical-align: top;\
-background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82\");\
-background-repeat: no-repeat;\
-background-position: center;\
-border-radius: 3px;\
-border: 1px solid transparent;\
-cursor: pointer;\
-}\
-.ace_folding-enabled .ace_fold-widget {\
-display: inline-block;   \
-}\
-.ace_fold-widget.ace_end {\
-background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAm%C7%C1%09%000%08C%D1%8C%ECE%C8E(%8E%EC%02)%1EZJ%F1%C1'%04%07I%E1%E5%EE%CAL%F5%A2%99%99%22%E2%D6%1FU%B5%FE0%D9x%A7%26Wz5%0E%D5%00%00%00%00IEND%AEB%60%82\");\
-}\
-.ace_fold-widget.ace_closed {\
-background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%03%00%00%00%06%08%06%00%00%00%06%E5%24%0C%00%00%009IDATx%DA5%CA%C1%09%000%08%03%C0%AC*(%3E%04%C1%0D%BA%B1%23%A4Uh%E0%20%81%C0%CC%F8%82%81%AA%A2%AArGfr%88%08%11%11%1C%DD%7D%E0%EE%5B%F6%F6%CB%B8%05Q%2F%E9tai%D9%00%00%00%00IEND%AEB%60%82\");\
-}\
-.ace_fold-widget:hover {\
-border: 1px solid rgba(0, 0, 0, 0.3);\
-background-color: rgba(255, 255, 255, 0.2);\
--moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\
--webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\
-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\
-}\
-.ace_fold-widget:active {\
-border: 1px solid rgba(0, 0, 0, 0.4);\
-background-color: rgba(0, 0, 0, 0.05);\
--moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\
--webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\
-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\
-}\
-/**\
-* Dark version for fold widgets\
-*/\
-.ace_dark .ace_fold-widget {\
-background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\
-}\
-.ace_dark .ace_fold-widget.ace_end {\
-background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\
-}\
-.ace_dark .ace_fold-widget.ace_closed {\
-background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\
-}\
-.ace_dark .ace_fold-widget:hover {\
-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\
-background-color: rgba(255, 255, 255, 0.1);\
-}\
-.ace_dark .ace_fold-widget:active {\
--moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\
--webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\
-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\
-}\
-.ace_fold-widget.ace_invalid {\
-background-color: #FFB4B4;\
-border-color: #DE5555;\
-}\
-.ace_fade-fold-widgets .ace_fold-widget {\
--moz-transition: opacity 0.4s ease 0.05s;\
--webkit-transition: opacity 0.4s ease 0.05s;\
--o-transition: opacity 0.4s ease 0.05s;\
--ms-transition: opacity 0.4s ease 0.05s;\
-transition: opacity 0.4s ease 0.05s;\
-opacity: 0;\
-}\
-.ace_fade-fold-widgets:hover .ace_fold-widget {\
--moz-transition: opacity 0.05s ease 0.05s;\
--webkit-transition: opacity 0.05s ease 0.05s;\
--o-transition: opacity 0.05s ease 0.05s;\
--ms-transition: opacity 0.05s ease 0.05s;\
-transition: opacity 0.05s ease 0.05s;\
-opacity:1;\
-}\
-.ace_underline {\
-text-decoration: underline;\
-}\
-.ace_bold {\
-font-weight: bold;\
-}\
-.ace_nobold .ace_bold {\
-font-weight: normal;\
-}\
-.ace_italic {\
-font-style: italic;\
-}\
-";
-
-dom.importCssString(editorCss, "ace_editor");
-
-var VirtualRenderer = function(container, theme) {
-    var _self = this;
-
-    this.container = container || dom.createElement("div");
-    this.$keepTextAreaAtCursor = !useragent.isIE;
-
-    dom.addCssClass(this.container, "ace_editor");
-
-    this.setTheme(theme);
-
-    this.$gutter = dom.createElement("div");
-    this.$gutter.className = "ace_gutter";
-    this.container.appendChild(this.$gutter);
-
-    this.scroller = dom.createElement("div");
-    this.scroller.className = "ace_scroller";
-    this.container.appendChild(this.scroller);
-
-    this.content = dom.createElement("div");
-    this.content.className = "ace_content";
-    this.scroller.appendChild(this.content);
-
-    this.$gutterLayer = new GutterLayer(this.$gutter);
-    this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this));
-
-    this.$markerBack = new MarkerLayer(this.content);
-
-    var textLayer = this.$textLayer = new TextLayer(this.content);
-    this.canvas = textLayer.element;
-
-    this.$markerFront = new MarkerLayer(this.content);
-
-    this.$cursorLayer = new CursorLayer(this.content);
-    this.$horizScroll = false;
-
-    this.scrollBar = new ScrollBar(this.container);
-    this.scrollBar.addEventListener("scroll", function(e) {
-        if (!_self.$scrollAnimation)
-            _self.session.setScrollTop(e.data);
-    });
-
-    this.scrollTop = 0;
-    this.scrollLeft = 0;
-
-    event.addListener(this.scroller, "scroll", function() {
-        var scrollLeft = _self.scroller.scrollLeft;
-        _self.scrollLeft = scrollLeft;
-        _self.session.setScrollLeft(scrollLeft);
-    });
-
-    this.cursorPos = {
-        row : 0,
-        column : 0
-    };
-
-    this.$textLayer.addEventListener("changeCharacterSize", function() {
-        _self.updateCharacterSize();
-        _self.onResize(true);
-    });
-
-    this.$size = {
-        width: 0,
-        height: 0,
-        scrollerHeight: 0,
-        scrollerWidth: 0
-    };
-
-    this.layerConfig = {
-        width : 1,
-        padding : 0,
-        firstRow : 0,
-        firstRowScreen: 0,
-        lastRow : 0,
-        lineHeight : 1,
-        characterWidth : 1,
-        minHeight : 1,
-        maxHeight : 1,
-        offset : 0,
-        height : 1
-    };
-
-    this.$loop = new RenderLoop(
-        this.$renderChanges.bind(this),
-        this.container.ownerDocument.defaultView
-    );
-    this.$loop.schedule(this.CHANGE_FULL);
-
-    this.updateCharacterSize();
-    this.setPadding(4);
-    config.resetOptions(this);
-    config._emit("renderer", this);
-};
-
-(function() {
-
-    this.CHANGE_CURSOR = 1;
-    this.CHANGE_MARKER = 2;
-    this.CHANGE_GUTTER = 4;
-    this.CHANGE_SCROLL = 8;
-    this.CHANGE_LINES = 16;
-    this.CHANGE_TEXT = 32;
-    this.CHANGE_SIZE = 64;
-    this.CHANGE_MARKER_BACK = 128;
-    this.CHANGE_MARKER_FRONT = 256;
-    this.CHANGE_FULL = 512;
-    this.CHANGE_H_SCROLL = 1024;
-
-    oop.implement(this, EventEmitter);
-
-    this.updateCharacterSize = function() {
-        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {
-            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;
-            this.setStyle("ace_nobold", !this.$allowBoldFonts);
-        }
-
-        this.characterWidth = this.$textLayer.getCharacterWidth();
-        this.lineHeight = this.$textLayer.getLineHeight();
-        this.$updatePrintMargin();
-    };
-    this.setSession = function(session) {
-        this.session = session;
-
-        this.scroller.className = "ace_scroller";
-
-        this.$cursorLayer.setSession(session);
-        this.$markerBack.setSession(session);
-        this.$markerFront.setSession(session);
-        this.$gutterLayer.setSession(session);
-        this.$textLayer.setSession(session);
-        this.$loop.schedule(this.CHANGE_FULL);
-
-    };
-    this.updateLines = function(firstRow, lastRow) {
-        if (lastRow === undefined)
-            lastRow = Infinity;
-
-        if (!this.$changedLines) {
-            this.$changedLines = {
-                firstRow: firstRow,
-                lastRow: lastRow
-            };
-        }
-        else {
-            if (this.$changedLines.firstRow > firstRow)
-                this.$changedLines.firstRow = firstRow;
-
-            if (this.$changedLines.lastRow < lastRow)
-                this.$changedLines.lastRow = lastRow;
-        }
-
-        if (this.$changedLines.firstRow > this.layerConfig.lastRow ||
-            this.$changedLines.lastRow < this.layerConfig.firstRow)
-            return;
-        this.$loop.schedule(this.CHANGE_LINES);
-    };
-
-    this.onChangeTabSize = function() {
-        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);
-        this.$textLayer.onChangeTabSize();
-    };
-    this.updateText = function() {
-        this.$loop.schedule(this.CHANGE_TEXT);
-    };
-    this.updateFull = function(force) {
-        if (force)
-            this.$renderChanges(this.CHANGE_FULL, true);
-        else
-            this.$loop.schedule(this.CHANGE_FULL);
-    };
-    this.updateFontSize = function() {
-        this.$textLayer.checkForSizeChanges();
-    };
-    this.onResize = function(force, gutterWidth, width, height) {
-        var changes = 0;
-        var size = this.$size;
-
-        if (this.resizing > 2)
-            return;
-        else if (this.resizing > 1)
-            this.resizing++;
-        else
-            this.resizing = force ? 1 : 0;
-        if (!height)
-            height = dom.getInnerHeight(this.container);
-
-        if (height && (force || size.height != height)) {
-            size.height = height;
-            changes = this.CHANGE_SIZE;
-
-            size.scrollerHeight = this.scroller.clientHeight;
-            if (force || !size.scrollerHeight) {
-                size.scrollerHeight = size.height;
-                if (this.$horizScroll)
-                    size.scrollerHeight -= this.scrollBar.getWidth();
-            }
-            this.scrollBar.setHeight(size.scrollerHeight);
-
-            if (this.session) {
-                this.session.setScrollTop(this.getScrollTop());
-                changes = changes | this.CHANGE_FULL;
-            }
-        }
-
-        if (!width)
-            width = dom.getInnerWidth(this.container);
-
-        if (width && (force || this.resizing > 1 || size.width != width)) {
-            changes = this.CHANGE_SIZE;
-            size.width = width;
-
-            var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;
-            this.scroller.style.left = gutterWidth + "px";
-            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth());
-            this.scroller.style.right = this.scrollBar.getWidth() + "px";
-
-            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)
-                changes = changes | this.CHANGE_FULL;
-        }
-
-        if (!this.$size.scrollerHeight)
-            return;
-
-        if (force)
-            this.$renderChanges(changes, true);
-        else
-            this.$loop.schedule(changes);
-
-        if (force)
-            this.$gutterLayer.$padding = null;
-
-        if (force)
-            delete this.resizing;
-    };
-
-    this.onGutterResize = function() {
-        var width = this.$size.width;
-        var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;
-        this.scroller.style.left = gutterWidth + "px";
-        this.$size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth());
-
-        if (this.session.getUseWrapMode() && this.adjustWrapLimit())
-            this.$loop.schedule(this.CHANGE_FULL);
-        else
-            this.$loop.schedule(this.CHANGE_MARKER);
-    };
-    this.adjustWrapLimit = function() {
-        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;
-        var limit = Math.floor(availableWidth / this.characterWidth);
-        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);
-    };
-    this.setAnimatedScroll = function(shouldAnimate){
-        this.setOption("animatedScroll", shouldAnimate);
-    };
-    this.getAnimatedScroll = function() {
-        return this.$animatedScroll;
-    };
-    this.setShowInvisibles = function(showInvisibles) {
-        this.setOption("showInvisibles", showInvisibles);
-    };
-    this.getShowInvisibles = function() {
-        return this.getOption("showInvisibles");
-    };
-    this.getDisplayIndentGuides = function() {
-        return this.getOption("displayIndentGuides");
-    };
-
-    this.setDisplayIndentGuides = function(display) {
-        this.setOption("displayIndentGuides", display);
-    };
-    this.setShowPrintMargin = function(showPrintMargin) {
-        this.setOption("showPrintMargin", showPrintMargin);
-    };
-    this.getShowPrintMargin = function() {
-        return this.getOption("showPrintMargin");
-    };
-    this.setPrintMarginColumn = function(showPrintMargin) {
-        this.setOption("printMarginColumn", showPrintMargin);
-    };
-    this.getPrintMarginColumn = function() {
-        return this.getOption("printMarginColumn");
-    };
-    this.getShowGutter = function(){
-        return this.getOption("showGutter");
-    };
-    this.setShowGutter = function(show){
-        return this.setOption("showGutter", show);
-    };
-
-    this.getFadeFoldWidgets = function(){
-        return this.getOption("fadeFoldWidgets")
-    };
-
-    this.setFadeFoldWidgets = function(show) {
-        this.setOption("fadeFoldWidgets", show);
-    };
-
-    this.setHighlightGutterLine = function(shouldHighlight) {
-        this.setOption("highlightGutterLine", shouldHighlight);
-    };
-
-    this.getHighlightGutterLine = function() {
-        return this.getOption("highlightGutterLine");
-    };
-
-    this.$updateGutterLineHighlight = function() {
-        var pos = this.$cursorLayer.$pixelPos;
-        var height = this.layerConfig.lineHeight;
-        if (this.session.getUseWrapMode()) {
-            var cursor = this.session.selection.getCursor();
-            cursor.column = 0;
-            pos = this.$cursorLayer.getPixelPosition(cursor, true);
-            height *= this.session.getRowLength(cursor.row);
-        }
-        this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px";
-        this.$gutterLineHighlight.style.height = height + "px";
-    };
-
-    this.$updatePrintMargin = function() {
-        if (!this.$showPrintMargin && !this.$printMarginEl)
-            return;
-
-        if (!this.$printMarginEl) {
-            var containerEl = dom.createElement("div");
-            containerEl.className = "ace_layer ace_print-margin-layer";
-            this.$printMarginEl = dom.createElement("div");
-            this.$printMarginEl.className = "ace_print-margin";
-            containerEl.appendChild(this.$printMarginEl);
-            this.content.insertBefore(containerEl, this.content.firstChild);
-        }
-
-        var style = this.$printMarginEl.style;
-        style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px";
-        style.visibility = this.$showPrintMargin ? "visible" : "hidden";
-        
-        if (this.session && this.session.$wrap == -1)
-            this.adjustWrapLimit();
-    };
-    this.getContainerElement = function() {
-        return this.container;
-    };
-    this.getMouseEventTarget = function() {
-        return this.content;
-    };
-    this.getTextAreaContainer = function() {
-        return this.container;
-    };
-    this.$moveTextAreaToCursor = function() {
-        if (!this.$keepTextAreaAtCursor)
-            return;
-        var config = this.layerConfig;
-        var posTop = this.$cursorLayer.$pixelPos.top;
-        var posLeft = this.$cursorLayer.$pixelPos.left;
-        posTop -= config.offset;
-
-        var h = this.lineHeight;
-        if (posTop < 0 || posTop > config.height - h)
-            return;
-
-        var w = this.characterWidth;
-        if (this.$composition) {
-            var val = this.textarea.value.replace(/^\x01+/, "");
-            w *= (this.session.$getStringScreenWidth(val)[0]+2);
-            h += 2;
-            posTop -= 1;
-        }
-        posLeft -= this.scrollLeft;
-        if (posLeft > this.$size.scrollerWidth - w)
-            posLeft = this.$size.scrollerWidth - w;
-
-        posLeft -= this.scrollBar.width;
-
-        this.textarea.style.height = h + "px";
-        this.textarea.style.width = w + "px";
-        this.textarea.style.right = Math.max(0, this.$size.scrollerWidth - posLeft - w) + "px";
-        this.textarea.style.bottom = Math.max(0, this.$size.height - posTop - h) + "px";
-    };
-    this.getFirstVisibleRow = function() {
-        return this.layerConfig.firstRow;
-    };
-    this.getFirstFullyVisibleRow = function() {
-        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);
-    };
-    this.getLastFullyVisibleRow = function() {
-        var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight);
-        return this.layerConfig.firstRow - 1 + flint;
-    };
-    this.getLastVisibleRow = function() {
-        return this.layerConfig.lastRow;
-    };
-
-    this.$padding = null;
-    this.setPadding = function(padding) {
-        this.$padding = padding;
-        this.$textLayer.setPadding(padding);
-        this.$cursorLayer.setPadding(padding);
-        this.$markerFront.setPadding(padding);
-        this.$markerBack.setPadding(padding);
-        this.$loop.schedule(this.CHANGE_FULL);
-        this.$updatePrintMargin();
-    };
-    this.getHScrollBarAlwaysVisible = function() {
-        return this.$hScrollBarAlwaysVisible;
-    };
-    this.setHScrollBarAlwaysVisible = function(alwaysVisible) {
-        this.setOption("hScrollBarAlwaysVisible", alwaysVisible);
-    };
-
-    this.$updateScrollBar = function() {
-        this.scrollBar.setInnerHeight(this.layerConfig.maxHeight);
-        this.scrollBar.setScrollTop(this.scrollTop);
-    };
-
-    this.$renderChanges = function(changes, force) {
-        if (!force && (!changes || !this.session || !this.container.offsetWidth))
-            return;
-
-        this._signal("beforeRender");
-        if (changes & this.CHANGE_FULL ||
-            changes & this.CHANGE_SIZE ||
-            changes & this.CHANGE_TEXT ||
-            changes & this.CHANGE_LINES ||
-            changes & this.CHANGE_SCROLL
-        )
-            this.$computeLayerConfig();
-        if (changes & this.CHANGE_H_SCROLL) {
-            this.scroller.scrollLeft = this.scrollLeft;
-            var scrollLeft = this.scroller.scrollLeft;
-            this.scrollLeft = scrollLeft;
-            this.session.setScrollLeft(scrollLeft);
-
-            this.scroller.className = this.scrollLeft == 0 ? "ace_scroller" : "ace_scroller ace_scroll-left";
-        }
-        if (changes & this.CHANGE_FULL) {
-            this.$textLayer.checkForSizeChanges();
-            this.$updateScrollBar();
-            this.$textLayer.update(this.layerConfig);
-            if (this.$showGutter)
-                this.$gutterLayer.update(this.layerConfig);
-            this.$markerBack.update(this.layerConfig);
-            this.$markerFront.update(this.layerConfig);
-            this.$cursorLayer.update(this.layerConfig);
-            this.$moveTextAreaToCursor();
-            this.$highlightGutterLine && this.$updateGutterLineHighlight();
-            this._signal("afterRender");
-            return;
-        }
-        if (changes & this.CHANGE_SCROLL) {
-            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)
-                this.$textLayer.update(this.layerConfig);
-            else
-                this.$textLayer.scrollLines(this.layerConfig);
-
-            if (this.$showGutter)
-                this.$gutterLayer.update(this.layerConfig);
-            this.$markerBack.update(this.layerConfig);
-            this.$markerFront.update(this.layerConfig);
-            this.$cursorLayer.update(this.layerConfig);
-            this.$highlightGutterLine && this.$updateGutterLineHighlight();
-            this.$moveTextAreaToCursor();
-            this.$updateScrollBar();
-            this._signal("afterRender");
-            return;
-        }
-
-        if (changes & this.CHANGE_TEXT) {
-            this.$textLayer.update(this.layerConfig);
-            if (this.$showGutter)
-                this.$gutterLayer.update(this.layerConfig);
-        }
-        else if (changes & this.CHANGE_LINES) {
-            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)
-                this.$gutterLayer.update(this.layerConfig);
-        }
-        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {
-            if (this.$showGutter)
-                this.$gutterLayer.update(this.layerConfig);
-        }
-
-        if (changes & this.CHANGE_CURSOR) {
-            this.$cursorLayer.update(this.layerConfig);
-            this.$moveTextAreaToCursor();
-            this.$highlightGutterLine && this.$updateGutterLineHighlight();
-        }
-
-        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {
-            this.$markerFront.update(this.layerConfig);
-        }
-
-        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {
-            this.$markerBack.update(this.layerConfig);
-        }
-
-        if (changes & this.CHANGE_SIZE)
-            this.$updateScrollBar();
-
-        this._signal("afterRender");
-    };
-
-    this.$computeLayerConfig = function() {
-        if (!this.$size.scrollerHeight)
-            return this.onResize(true);
-
-        var session = this.session;
-
-        var offset = this.scrollTop % this.lineHeight;
-        var minHeight = this.$size.scrollerHeight + this.lineHeight;
-
-        var longestLine = this.$getLongestLine();
-
-        var horizScroll = this.$hScrollBarAlwaysVisible || this.$size.scrollerWidth - longestLine < 0;
-        var horizScrollChanged = this.$horizScroll !== horizScroll;
-        this.$horizScroll = horizScroll;
-        if (horizScrollChanged) {
-            this.scroller.style.overflowX = horizScroll ? "scroll" : "hidden";
-            if (!horizScroll)
-                this.session.setScrollLeft(0);
-        }
-        var maxHeight = this.session.getScreenLength() * this.lineHeight;
-        this.session.setScrollTop(Math.max(0, Math.min(this.scrollTop, maxHeight - this.$size.scrollerHeight)));
-
-        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;
-        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));
-        var lastRow = firstRow + lineCount;
-        var firstRowScreen, firstRowHeight;
-        var lineHeight = this.lineHeight;
-        firstRow = session.screenToDocumentRow(firstRow, 0);
-        var foldLine = session.getFoldLine(firstRow);
-        if (foldLine) {
-            firstRow = foldLine.start.row;
-        }
-
-        firstRowScreen = session.documentToScreenRow(firstRow, 0);
-        firstRowHeight = session.getRowLength(firstRow) * lineHeight;
-
-        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);
-        minHeight = this.$size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +
-                                                firstRowHeight;
-
-        offset = this.scrollTop - firstRowScreen * lineHeight;
-
-        this.layerConfig = {
-            width : longestLine,
-            padding : this.$padding,
-            firstRow : firstRow,
-            firstRowScreen: firstRowScreen,
-            lastRow : lastRow,
-            lineHeight : lineHeight,
-            characterWidth : this.characterWidth,
-            minHeight : minHeight,
-            maxHeight : maxHeight,
-            offset : offset,
-            height : this.$size.scrollerHeight
-        };
-
-        this.$gutterLayer.element.style.marginTop = (-offset) + "px";
-        this.content.style.marginTop = (-offset) + "px";
-        this.content.style.width = longestLine + 2 * this.$padding + "px";
-        this.content.style.height = minHeight + "px";
-        if (horizScrollChanged)
-            this.onResize(true);
-    };
-
-    this.$updateLines = function() {
-        var firstRow = this.$changedLines.firstRow;
-        var lastRow = this.$changedLines.lastRow;
-        this.$changedLines = null;
-
-        var layerConfig = this.layerConfig;
-
-        if (firstRow > layerConfig.lastRow + 1) { return; }
-        if (lastRow < layerConfig.firstRow) { return; }
-        if (lastRow === Infinity) {
-            if (this.$showGutter)
-                this.$gutterLayer.update(layerConfig);
-            this.$textLayer.update(layerConfig);
-            return;
-        }
-        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);
-        return true;
-    };
-
-    this.$getLongestLine = function() {
-        var charCount = this.session.getScreenWidth();
-        if (this.$textLayer.showInvisibles)
-            charCount += 1;
-
-        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));
-    };
-    this.updateFrontMarkers = function() {
-        this.$markerFront.setMarkers(this.session.getMarkers(true));
-        this.$loop.schedule(this.CHANGE_MARKER_FRONT);
-    };
-    this.updateBackMarkers = function() {
-        this.$markerBack.setMarkers(this.session.getMarkers());
-        this.$loop.schedule(this.CHANGE_MARKER_BACK);
-    };
-    this.addGutterDecoration = function(row, className){
-        this.$gutterLayer.addGutterDecoration(row, className);
-    };
-    this.removeGutterDecoration = function(row, className){
-        this.$gutterLayer.removeGutterDecoration(row, className);
-    };
-    this.updateBreakpoints = function(rows) {
-        this.$loop.schedule(this.CHANGE_GUTTER);
-    };
-    this.setAnnotations = function(annotations) {
-        this.$gutterLayer.setAnnotations(annotations);
-        this.$loop.schedule(this.CHANGE_GUTTER);
-    };
-    this.updateCursor = function() {
-        this.$loop.schedule(this.CHANGE_CURSOR);
-    };
-    this.hideCursor = function() {
-        this.$cursorLayer.hideCursor();
-    };
-    this.showCursor = function() {
-        this.$cursorLayer.showCursor();
-    };
-
-    this.scrollSelectionIntoView = function(anchor, lead, offset) {
-        this.scrollCursorIntoView(anchor, offset);
-        this.scrollCursorIntoView(lead, offset);
-    };
-    this.scrollCursorIntoView = function(cursor, offset) {
-        if (this.$size.scrollerHeight === 0)
-            return;
-
-        var pos = this.$cursorLayer.getPixelPosition(cursor);
-
-        var left = pos.left;
-        var top = pos.top;
-
-        if (this.scrollTop > top) {
-            if (offset)
-                top -= offset * this.$size.scrollerHeight;
-            this.session.setScrollTop(top);
-        } else if (this.scrollTop + this.$size.scrollerHeight < top + this.lineHeight) {
-            if (offset)
-                top += offset * this.$size.scrollerHeight;
-            this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);
-        }
-
-        var scrollLeft = this.scrollLeft;
-
-        if (scrollLeft > left) {
-            if (left < this.$padding + 2 * this.layerConfig.characterWidth)
-                left = 0;
-            this.session.setScrollLeft(left);
-        } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {
-            this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));
-        }
-    };
-    this.getScrollTop = function() {
-        return this.session.getScrollTop();
-    };
-    this.getScrollLeft = function() {
-        return this.session.getScrollLeft();
-    };
-    this.getScrollTopRow = function() {
-        return this.scrollTop / this.lineHeight;
-    };
-    this.getScrollBottomRow = function() {
-        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);
-    };
-    this.scrollToRow = function(row) {
-        this.session.setScrollTop(row * this.lineHeight);
-    };
-
-    this.alignCursor = function(cursor, alignment) {
-        if (typeof cursor == "number")
-            cursor = {row: cursor, column: 0};
-
-        var pos = this.$cursorLayer.getPixelPosition(cursor);
-        var h = this.$size.scrollerHeight - this.lineHeight;
-        var offset = pos.top - h * (alignment || 0);
-
-        this.session.setScrollTop(offset);
-        return offset;
-    };
-
-    this.STEPS = 8;
-    this.$calcSteps = function(fromValue, toValue){
-        var i = 0;
-        var l = this.STEPS;
-        var steps = [];
-
-        var func  = function(t, x_min, dx) {
-            return dx * (Math.pow(t - 1, 3) + 1) + x_min;
-        };
-
-        for (i = 0; i < l; ++i)
-            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));
-
-        return steps;
-    };
-    this.scrollToLine = function(line, center, animate, callback) {
-        var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});
-        var offset = pos.top;
-        if (center)
-            offset -= this.$size.scrollerHeight / 2;
-
-        var initialScroll = this.scrollTop;
-        this.session.setScrollTop(offset);
-        if (animate !== false)
-            this.animateScrolling(initialScroll, callback);
-    };
-
-    this.animateScrolling = function(fromValue, callback) {
-        var toValue = this.scrollTop;
-        if (this.$animatedScroll) {
-            var _self = this;
-            var steps = _self.$calcSteps(fromValue, toValue);
-            this.$scrollAnimation = {from: fromValue, to: toValue};
-
-            clearInterval(this.$timer);
-
-            _self.session.setScrollTop(steps.shift());
-            this.$timer = setInterval(function() {
-                if (steps.length) {
-                    _self.session.setScrollTop(steps.shift());
-                    _self.session.$scrollTop = toValue;
-                } else if (toValue != null) {
-                    _self.session.$scrollTop = -1;
-                    _self.session.setScrollTop(toValue);
-                    toValue = null;
-                } else {
-                    _self.$timer = clearInterval(_self.$timer);
-                    _self.$scrollAnimation = null;
-                    callback && callback();
-                }
-            }, 10);
-        }
-    };
-    this.scrollToY = function(scrollTop) {
-        if (this.scrollTop !== scrollTop) {
-            this.$loop.schedule(this.CHANGE_SCROLL);
-            this.scrollTop = scrollTop;
-        }
-    };
-    this.scrollToX = function(scrollLeft) {
-        if (scrollLeft < 0)
-            scrollLeft = 0;
-
-        if (this.scrollLeft !== scrollLeft)
-            this.scrollLeft = scrollLeft;
-        this.$loop.schedule(this.CHANGE_H_SCROLL);
-    };
-    this.scrollBy = function(deltaX, deltaY) {
-        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);
-        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);
-    };
-    this.isScrollableBy = function(deltaX, deltaY) {
-        if (deltaY < 0 && this.session.getScrollTop() >= 1)
-           return true;
-        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1)
-           return true;
-    };
-
-    this.pixelToScreenCoordinates = function(x, y) {
-        var canvasPos = this.scroller.getBoundingClientRect();
-
-        var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;
-        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);
-        var col = Math.round(offset);
-
-        return {row: row, column: col, side: offset - col > 0 ? 1 : -1};
-    };
-
-    this.screenToTextCoordinates = function(x, y) {
-        var canvasPos = this.scroller.getBoundingClientRect();
-
-        var col = Math.round(
-            (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth
-        );
-        var row = Math.floor(
-            (y + this.scrollTop - canvasPos.top) / this.lineHeight
-        );
-
-        return this.session.screenToDocumentPosition(row, Math.max(col, 0));
-    };
-    this.textToScreenCoordinates = function(row, column) {
-        var canvasPos = this.scroller.getBoundingClientRect();
-        var pos = this.session.documentToScreenPosition(row, column);
-
-        var x = this.$padding + Math.round(pos.column * this.characterWidth);
-        var y = pos.row * this.lineHeight;
-
-        return {
-            pageX: canvasPos.left + x - this.scrollLeft,
-            pageY: canvasPos.top + y - this.scrollTop
-        };
-    };
-    this.visualizeFocus = function() {
-        dom.addCssClass(this.container, "ace_focus");
-    };
-    this.visualizeBlur = function() {
-        dom.removeCssClass(this.container, "ace_focus");
-    };
-    this.showComposition = function(position) {
-        if (!this.$composition)
-            this.$composition = {
-                keepTextAreaAtCursor: this.$keepTextAreaAtCursor,
-                cssText: this.textarea.style.cssText
-            };
-
-        this.$keepTextAreaAtCursor = true;
-        dom.addCssClass(this.textarea, "ace_composition");
-        this.textarea.style.cssText = "";
-        this.$moveTextAreaToCursor();
-    };
-    this.setCompositionText = function(text) {
-        this.$moveTextAreaToCursor();
-    };
-    this.hideComposition = function() {
-        if (!this.$composition)
-            return;
-
-        dom.removeCssClass(this.textarea, "ace_composition");
-        this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;
-        this.textarea.style.cssText = this.$composition.cssText;
-        this.$composition = null;
-    };
-    this.setTheme = function(theme) {
-        var _self = this;
-        this.$themeValue = theme;
-        _self._dispatchEvent('themeChange',{theme:theme});
-
-        if (!theme || typeof theme == "string") {
-            var moduleName = theme || "ace/theme/textmate";
-            config.loadModule(["theme", moduleName], afterLoad);
-        } else {
-            afterLoad(theme);
-        }
-
-        function afterLoad(module) {
-            if (_self.$themeValue != theme)
-                return;
-            if (!module.cssClass)
-                return;
-            dom.importCssString(
-                module.cssText,
-                module.cssClass,
-                _self.container.ownerDocument
-            );
-
-            if (_self.theme)
-                dom.removeCssClass(_self.container, _self.theme.cssClass);
-            _self.$theme = module.cssClass;
-
-            _self.theme = module;
-            dom.addCssClass(_self.container, module.cssClass);
-            dom.setCssClass(_self.container, "ace_dark", module.isDark);
-
-            var padding = module.padding || 4;
-            if (_self.$padding && padding != _self.$padding)
-                _self.setPadding(padding);
-            if (_self.$size) {
-                _self.$size.width = 0;
-                _self.onResize();
-            }
-
-            _self._dispatchEvent('themeLoaded',{theme:module});
-        }
-    };
-    this.getTheme = function() {
-        return this.$themeValue;
-    };
-    this.setStyle = function setStyle(style, include) {
-        dom.setCssClass(this.container, style, include != false);
-    };
-    this.unsetStyle = function unsetStyle(style) {
-        dom.removeCssClass(this.container, style);
-    };
-    this.destroy = function() {
-        this.$textLayer.destroy();
-        this.$cursorLayer.destroy();
-    };
-
-}).call(VirtualRenderer.prototype);
-
-
-config.defineOptions(VirtualRenderer.prototype, "renderer", {
-    animatedScroll: {initialValue: false},
-    showInvisibles: {
-        set: function(value) {
-            if (this.$textLayer.setShowInvisibles(value))
-                this.$loop.schedule(this.CHANGE_TEXT);
-        },
-        initialValue: false
-    },
-    showPrintMargin: {
-        set: function() { this.$updatePrintMargin(); },
-        initialValue: true
-    },
-    printMarginColumn: {
-        set: function() { this.$updatePrintMargin(); },
-        initialValue: 80
-    },
-    printMargin: {
-        set: function(val) {
-            if (typeof val == "number")
-                this.$printMarginColumn = val;
-            this.$showPrintMargin = !!val;
-            this.$updatePrintMargin();
-        },
-        get: function() {
-            return this.$showPrintMargin && this.$printMarginColumn; 
-        }
-    },
-    showGutter: {
-        set: function(show){
-            this.$gutter.style.display = show ? "block" : "none";
-            this.onGutterResize();
-        },
-        initialValue: true
-    },
-    fadeFoldWidgets: {
-        set: function(show) {
-            dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show);
-        },
-        initialValue: false
-    },
-    showFoldWidgets: {
-        set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},
-        initialValue: true
-    },
-    displayIndentGuides: {
-        set: function(show) {
-            if (this.$textLayer.setDisplayIndentGuides(show))
-                this.$loop.schedule(this.CHANGE_TEXT);
-        },
-        initialValue: true
-    },
-    highlightGutterLine: {
-        set: function(shouldHighlight) {
-            if (!this.$gutterLineHighlight) {
-                this.$gutterLineHighlight = dom.createElement("div");
-                this.$gutterLineHighlight.className = "ace_gutter-active-line";
-                this.$gutter.appendChild(this.$gutterLineHighlight);
-                return;
-            }
-
-            this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none";
-            if (this.$cursorLayer.$pixelPos)
-                this.$updateGutterLineHighlight();
-        },
-        initialValue: false,
-        value: true
-    },
-    hScrollBarAlwaysVisible: {
-        set: function(alwaysVisible) {
-            this.$hScrollBarAlwaysVisible = alwaysVisible;
-            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)
-                this.$loop.schedule(this.CHANGE_SCROLL);
-        },
-        initialValue: false
-    },
-    fontSize:  {
-        set: function(size) {
-            if (typeof size == "number")
-                size = size + "px";
-            this.container.style.fontSize = size;
-            this.updateFontSize();
-        },
-        initialValue: 12
-    },
-    fontFamily: {
-        set: function(name) {
-            this.container.style.fontFamily = name;
-            this.updateFontSize();
-        }
-    }
-});
-
-exports.VirtualRenderer = VirtualRenderer;
-});
-
-define('ace/layer/gutter', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var dom = require("../lib/dom");
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var EventEmitter = require("../lib/event_emitter").EventEmitter;
-
-var Gutter = function(parentEl) {
-    this.element = dom.createElement("div");
-    this.element.className = "ace_layer ace_gutter-layer";
-    parentEl.appendChild(this.element);
-    this.setShowFoldWidgets(this.$showFoldWidgets);
-    
-    this.gutterWidth = 0;
-
-    this.$annotations = [];
-    this.$updateAnnotations = this.$updateAnnotations.bind(this);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.setSession = function(session) {
-        if (this.session)
-            this.session.removeEventListener("change", this.$updateAnnotations);
-        this.session = session;
-        session.on("change", this.$updateAnnotations);
-    };
-
-    this.addGutterDecoration = function(row, className){
-        if (window.console)
-            console.warn && console.warn("deprecated use session.addGutterDecoration");
-        this.session.addGutterDecoration(row, className);
-    };
-
-    this.removeGutterDecoration = function(row, className){
-        if (window.console)
-            console.warn && console.warn("deprecated use session.removeGutterDecoration");
-        this.session.removeGutterDecoration(row, className);
-    };
-
-    this.setAnnotations = function(annotations) {
-        this.$annotations = []
-        var rowInfo, row;
-        for (var i = 0; i < annotations.length; i++) {
-            var annotation = annotations[i];
-            var row = annotation.row;
-            var rowInfo = this.$annotations[row];
-            if (!rowInfo)
-                rowInfo = this.$annotations[row] = {text: []};
-           
-            var annoText = annotation.text;
-            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || "";
-
-            if (rowInfo.text.indexOf(annoText) === -1)
-                rowInfo.text.push(annoText);
-
-            var type = annotation.type;
-            if (type == "error")
-                rowInfo.className = " ace_error";
-            else if (type == "warning" && rowInfo.className != " ace_error")
-                rowInfo.className = " ace_warning";
-            else if (type == "info" && (!rowInfo.className))
-                rowInfo.className = " ace_info";
-        }
-    };
-
-    this.$updateAnnotations = function (e) {
-        if (!this.$annotations.length)
-            return;
-        var delta = e.data;
-        var range = delta.range;
-        var firstRow = range.start.row;
-        var len = range.end.row - firstRow;
-        if (len === 0) {
-        } else if (delta.action == "removeText" || delta.action == "removeLines") {
-            this.$annotations.splice(firstRow, len + 1, null);
-        } else {
-            var args = Array(len + 1);
-            args.unshift(firstRow, 1);
-            this.$annotations.splice.apply(this.$annotations, args);
-        }
-    };
-
-    this.update = function(config) {
-        var emptyAnno = {className: ""};
-        var html = [];
-        var i = config.firstRow;
-        var lastRow = config.lastRow;
-        var fold = this.session.getNextFoldLine(i);
-        var foldStart = fold ? fold.start.row : Infinity;
-        var foldWidgets = this.$showFoldWidgets && this.session.foldWidgets;
-        var breakpoints = this.session.$breakpoints;
-        var decorations = this.session.$decorations;
-        var firstLineNumber = this.session.$firstLineNumber;
-        var lastLineNumber = 0;
-
-        while (true) {
-            if(i > foldStart) {
-                i = fold.end.row + 1;
-                fold = this.session.getNextFoldLine(i, fold);
-                foldStart = fold ?fold.start.row :Infinity;
-            }
-            if(i > lastRow)
-                break;
-
-            var annotation = this.$annotations[i] || emptyAnno;
-            html.push(
-                "<div class='ace_gutter-cell ",
-                breakpoints[i] || "", decorations[i] || "", annotation.className,
-                "' style='height:", this.session.getRowLength(i) * config.lineHeight, "px;'>", 
-                lastLineNumber = i + firstLineNumber
-            );
-
-            if (foldWidgets) {
-                var c = foldWidgets[i];
-                if (c == null)
-                    c = foldWidgets[i] = this.session.getFoldWidget(i);
-                if (c)
-                    html.push(
-                        "<span class='ace_fold-widget ace_", c,
-                        c == "start" && i == foldStart && i < fold.end.row ? " ace_closed" : " ace_open",
-                        "' style='height:", config.lineHeight, "px",
-                        "'></span>"
-                    );
-            }
-
-            html.push("</div>");
-
-            i++;
-        }
-
-        this.element = dom.setInnerHtml(this.element, html.join(""));
-        this.element.style.height = config.minHeight + "px";
-        
-        if (this.session.$useWrapMode)
-            lastLineNumber = this.session.getLength();
-        
-        var gutterWidth = ("" + lastLineNumber).length * config.characterWidth;
-        var padding = this.$padding || this.$computePadding();
-        gutterWidth += padding.left + padding.right;
-        if (gutterWidth !== this.gutterWidth) {
-            this.gutterWidth = gutterWidth;
-            this.element.style.width = Math.ceil(this.gutterWidth) + "px";
-            this._emit("changeGutterWidth", gutterWidth);
-        }
-    };
-
-    this.$showFoldWidgets = true;
-    this.setShowFoldWidgets = function(show) {
-        if (show)
-            dom.addCssClass(this.element, "ace_folding-enabled");
-        else
-            dom.removeCssClass(this.element, "ace_folding-enabled");
-
-        this.$showFoldWidgets = show;
-        this.$padding = null;
-    };
-    
-    this.getShowFoldWidgets = function() {
-        return this.$showFoldWidgets;
-    };
-
-    this.$computePadding = function() {
-        if (!this.element.firstChild)
-            return {left: 0, right: 0};
-        var style = dom.computedStyle(this.element.firstChild);
-        this.$padding = {}
-        this.$padding.left = parseInt(style.paddingLeft) + 1;
-        this.$padding.right = parseInt(style.paddingRight);  
-        return this.$padding;
-    };
-
-    this.getRegion = function(point) {
-        var padding = this.$padding || this.$computePadding();
-        var rect = this.element.getBoundingClientRect();
-        if (point.x < padding.left + rect.left)
-            return "markers";
-        if (this.$showFoldWidgets && point.x > rect.right - padding.right)
-            return "foldWidgets";
-    };
-
-}).call(Gutter.prototype);
-
-exports.Gutter = Gutter;
-
-});
-
-define('ace/layer/marker', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/dom'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-var dom = require("../lib/dom");
-
-var Marker = function(parentEl) {
-    this.element = dom.createElement("div");
-    this.element.className = "ace_layer ace_marker-layer";
-    parentEl.appendChild(this.element);
-};
-
-(function() {
-
-    this.$padding = 0;
-
-    this.setPadding = function(padding) {
-        this.$padding = padding;
-    };
-    this.setSession = function(session) {
-        this.session = session;
-    };
-    
-    this.setMarkers = function(markers) {
-        this.markers = markers;
-    };
-
-    this.update = function(config) {
-        var config = config || this.config;
-        if (!config)
-            return;
-
-        this.config = config;
-
-
-        var html = [];
-        for (var key in this.markers) {
-            var marker = this.markers[key];
-
-            if (!marker.range) {
-                marker.update(html, this, this.session, config);
-                continue;
-            }
-
-            var range = marker.range.clipRows(config.firstRow, config.lastRow);
-            if (range.isEmpty()) continue;
-
-            range = range.toScreenRange(this.session);
-            if (marker.renderer) {
-                var top = this.$getTop(range.start.row, config);
-                var left = this.$padding + range.start.column * config.characterWidth;
-                marker.renderer(html, range, left, top, config);
-            } else if (marker.type == "fullLine") {
-                this.drawFullLineMarker(html, range, marker.clazz, config);
-            } else if (marker.type == "screenLine") {
-                this.drawScreenLineMarker(html, range, marker.clazz, config);
-            } else if (range.isMultiLine()) {
-                if (marker.type == "text")
-                    this.drawTextMarker(html, range, marker.clazz, config);
-                else
-                    this.drawMultiLineMarker(html, range, marker.clazz, config);
-            } else {
-                this.drawSingleLineMarker(html, range, marker.clazz + " ace_start", config);
-            }
-        }
-        this.element = dom.setInnerHtml(this.element, html.join(""));
-    };
-
-    this.$getTop = function(row, layerConfig) {
-        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;
-    };
-    this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {
-        var row = range.start.row;
-
-        var lineRange = new Range(
-            row, range.start.column,
-            row, this.session.getScreenLastRowColumn(row)
-        );
-        this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " ace_start", layerConfig, 1, extraStyle);
-        row = range.end.row;
-        lineRange = new Range(row, 0, row, range.end.column);
-        this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, extraStyle);
-
-        for (row = range.start.row + 1; row < range.end.row; row++) {
-            lineRange.start.row = row;
-            lineRange.end.row = row;
-            lineRange.end.column = this.session.getScreenLastRowColumn(row);
-            this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, extraStyle);
-        }
-    };
-    this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {
-        var padding = this.$padding;
-        var height = config.lineHeight;
-        var top = this.$getTop(range.start.row, config);
-        var left = padding + range.start.column * config.characterWidth;
-        extraStyle = extraStyle || "";
-
-        stringBuilder.push(
-            "<div class='", clazz, " ace_start' style='",
-            "height:", height, "px;",
-            "right:0;",
-            "top:", top, "px;",
-            "left:", left, "px;", extraStyle, "'></div>"
-        );
-        top = this.$getTop(range.end.row, config);
-        var width = range.end.column * config.characterWidth;
-
-        stringBuilder.push(
-            "<div class='", clazz, "' style='",
-            "height:", height, "px;",
-            "width:", width, "px;",
-            "top:", top, "px;",
-            "left:", padding, "px;", extraStyle, "'></div>"
-        );
-        height = (range.end.row - range.start.row - 1) * config.lineHeight;
-        if (height < 0)
-            return;
-        top = this.$getTop(range.start.row + 1, config);
-
-        stringBuilder.push(
-            "<div class='", clazz, "' style='",
-            "height:", height, "px;",
-            "right:0;",
-            "top:", top, "px;",
-            "left:", padding, "px;", extraStyle, "'></div>"
-        );
-    };
-    this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {
-        var height = config.lineHeight;
-        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;
-
-        var top = this.$getTop(range.start.row, config);
-        var left = this.$padding + range.start.column * config.characterWidth;
-
-        stringBuilder.push(
-            "<div class='", clazz, "' style='",
-            "height:", height, "px;",
-            "width:", width, "px;",
-            "top:", top, "px;",
-            "left:", left, "px;", extraStyle || "", "'></div>"
-        );
-    };
-
-    this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {
-        var top = this.$getTop(range.start.row, config);
-        var height = config.lineHeight;
-        if (range.start.row != range.end.row)
-            height += this.$getTop(range.end.row, config) - top;
-
-        stringBuilder.push(
-            "<div class='", clazz, "' style='",
-            "height:", height, "px;",
-            "top:", top, "px;",
-            "left:0;right:0;", extraStyle || "", "'></div>"
-        );
-    };
-    
-    this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {
-        var top = this.$getTop(range.start.row, config);
-        var height = config.lineHeight;
-
-        stringBuilder.push(
-            "<div class='", clazz, "' style='",
-            "height:", height, "px;",
-            "top:", top, "px;",
-            "left:0;right:0;", extraStyle || "", "'></div>"
-        );
-    };
-
-}).call(Marker.prototype);
-
-exports.Marker = Marker;
-
-});
-
-define('ace/layer/text', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/lang', 'ace/lib/useragent', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var dom = require("../lib/dom");
-var lang = require("../lib/lang");
-var useragent = require("../lib/useragent");
-var EventEmitter = require("../lib/event_emitter").EventEmitter;
-
-var Text = function(parentEl) {
-    this.element = dom.createElement("div");
-    this.element.className = "ace_layer ace_text-layer";
-    parentEl.appendChild(this.element);
-
-    this.$characterSize = {width: 0, height: 0};
-    this.checkForSizeChanges();
-    this.$pollSizeChanges();
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.EOF_CHAR = "\xB6"; //"&para;";
-    this.EOL_CHAR = "\xAC"; //"&not;";
-    this.TAB_CHAR = "\u2192"; //"&rarr;" "\u21E5";
-    this.SPACE_CHAR = "\xB7"; //"&middot;";
-    this.$padding = 0;
-
-    this.setPadding = function(padding) {
-        this.$padding = padding;
-        this.element.style.padding = "0 " + padding + "px";
-    };
-
-    this.getLineHeight = function() {
-        return this.$characterSize.height || 1;
-    };
-
-    this.getCharacterWidth = function() {
-        return this.$characterSize.width || 1;
-    };
-
-    this.checkForSizeChanges = function() {
-        var size = this.$measureSizes();
-        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {
-            this.$measureNode.style.fontWeight = "bold";
-            var boldSize = this.$measureSizes();
-            this.$measureNode.style.fontWeight = "";
-            this.$characterSize = size;
-            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;
-            this._emit("changeCharacterSize", {data: size});
-        }
-    };
-
-    this.$pollSizeChanges = function() {
-        var self = this;
-        this.$pollSizeChangesTimer = setInterval(function() {
-            self.checkForSizeChanges();
-        }, 500);
-    };
-
-    this.$fontStyles = {
-        fontFamily : 1,
-        fontSize : 1,
-        fontWeight : 1,
-        fontStyle : 1,
-        lineHeight : 1
-    };
-
-    this.$measureSizes = useragent.isIE || useragent.isOldGecko ? function() {
-        var n = 1000;
-        if (!this.$measureNode) {
-            var measureNode = this.$measureNode = dom.createElement("div");
-            var style = measureNode.style;
-
-            style.width = style.height = "auto";
-            style.left = style.top = (-n * 40)  + "px";
-
-            style.visibility = "hidden";
-            style.position = "fixed";
-            style.overflow = "visible";
-            style.whiteSpace = "nowrap";
-            measureNode.innerHTML = lang.stringRepeat("Xy", n);
-
-            if (this.element.ownerDocument.body) {
-                this.element.ownerDocument.body.appendChild(measureNode);
-            } else {
-                var container = this.element.parentNode;
-                while (!dom.hasCssClass(container, "ace_editor"))
-                    container = container.parentNode;
-                container.appendChild(measureNode);
-            }
-        }
-        if (!this.element.offsetWidth)
-            return null;
-
-        var style = this.$measureNode.style;
-        var computedStyle = dom.computedStyle(this.element);
-        for (var prop in this.$fontStyles)
-            style[prop] = computedStyle[prop];
-
-        var size = {
-            height: this.$measureNode.offsetHeight,
-            width: this.$measureNode.offsetWidth / (n * 2)
-        };
-        if (size.width == 0 || size.height == 0)
-            return null;
-
-        return size;
-    }
-    : function() {
-        if (!this.$measureNode) {
-            var measureNode = this.$measureNode = dom.createElement("div");
-            var style = measureNode.style;
-
-            style.width = style.height = "auto";
-            style.left = style.top = -100 + "px";
-
-            style.visibility = "hidden";
-            style.position = "fixed";
-            style.overflow = "visible";
-            style.whiteSpace = "nowrap";
-
-            measureNode.innerHTML = "X";
-
-            var container = this.element.parentNode;
-            while (container && !dom.hasCssClass(container, "ace_editor"))
-                container = container.parentNode;
-
-            if (!container)
-                return this.$measureNode = null;
-
-            container.appendChild(measureNode);
-        }
-
-        var rect = this.$measureNode.getBoundingClientRect();
-
-        var size = {
-            height: rect.height,
-            width: rect.width
-        };
-        if (size.width == 0 || size.height == 0)
-            return null;
-
-        return size;
-    };
-
-    this.setSession = function(session) {
-        this.session = session;
-        this.$computeTabString();
-    };
-
-    this.showInvisibles = false;
-    this.setShowInvisibles = function(showInvisibles) {
-        if (this.showInvisibles == showInvisibles)
-            return false;
-
-        this.showInvisibles = showInvisibles;
-        this.$computeTabString();
-        return true;
-    };
-
-    this.displayIndentGuides = true;
-    this.setDisplayIndentGuides = function(display) {
-        if (this.displayIndentGuides == display)
-            return false;
-
-        this.displayIndentGuides = display;
-        this.$computeTabString();
-        return true;
-    };
-
-    this.$tabStrings = [];
-    this.onChangeTabSize =
-    this.$computeTabString = function() {
-        var tabSize = this.session.getTabSize();
-        this.tabSize = tabSize;
-        var tabStr = this.$tabStrings = [0];
-        for (var i = 1; i < tabSize + 1; i++) {
-            if (this.showInvisibles) {
-                tabStr.push("<span class='ace_invisible'>"
-                    + this.TAB_CHAR
-                    + lang.stringRepeat("\xa0", i - 1)
-                    + "</span>");
-            } else {
-                tabStr.push(lang.stringRepeat("\xa0", i));
-            }
-        }
-        if (this.displayIndentGuides) {
-            this.$indentGuideRe =  /\s\S| \t|\t |\s$/;
-            var className = "ace_indent-guide";
-            if (this.showInvisibles) {
-                className += " ace_invisible";
-                var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);
-                var tabContent = this.TAB_CHAR + lang.stringRepeat("\xa0", this.tabSize - 1);
-            } else{
-                var spaceContent = lang.stringRepeat("\xa0", this.tabSize);
-                var tabContent = spaceContent;
-            }
-
-            this.$tabStrings[" "] = "<span class='" + className + "'>" + spaceContent + "</span>";
-            this.$tabStrings["\t"] = "<span class='" + className + "'>" + tabContent + "</span>";
-        }
-    };
-
-    this.updateLines = function(config, firstRow, lastRow) {
-        if (this.config.lastRow != config.lastRow ||
-            this.config.firstRow != config.firstRow) {
-            this.scrollLines(config);
-        }
-        this.config = config;
-
-        var first = Math.max(firstRow, config.firstRow);
-        var last = Math.min(lastRow, config.lastRow);
-
-        var lineElements = this.element.childNodes;
-        var lineElementsIdx = 0;
-
-        for (var row = config.firstRow; row < first; row++) {
-            var foldLine = this.session.getFoldLine(row);
-            if (foldLine) {
-                if (foldLine.containsRow(first)) {
-                    first = foldLine.start.row;
-                    break;
-                } else {
-                    row = foldLine.end.row;
-                }
-            }
-            lineElementsIdx ++;
-        }
-
-        var row = first;
-        var foldLine = this.session.getNextFoldLine(row);
-        var foldStart = foldLine ? foldLine.start.row : Infinity;
-
-        while (true) {
-            if (row > foldStart) {
-                row = foldLine.end.row+1;
-                foldLine = this.session.getNextFoldLine(row, foldLine);
-                foldStart = foldLine ? foldLine.start.row :Infinity;
-            }
-            if (row > last)
-                break;
-
-            var lineElement = lineElements[lineElementsIdx++];
-            if (lineElement) {
-                var html = [];
-                this.$renderLine(
-                    html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false
-                );
-                dom.setInnerHtml(lineElement, html.join(""));
-            }
-            row++;
-        }
-    };
-
-    this.scrollLines = function(config) {
-        var oldConfig = this.config;
-        this.config = config;
-
-        if (!oldConfig || oldConfig.lastRow < config.firstRow)
-            return this.update(config);
-
-        if (config.lastRow < oldConfig.firstRow)
-            return this.update(config);
-
-        var el = this.element;
-        if (oldConfig.firstRow < config.firstRow)
-            for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)
-                el.removeChild(el.firstChild);
-
-        if (oldConfig.lastRow > config.lastRow)
-            for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)
-                el.removeChild(el.lastChild);
-
-        if (config.firstRow < oldConfig.firstRow) {
-            var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);
-            if (el.firstChild)
-                el.insertBefore(fragment, el.firstChild);
-            else
-                el.appendChild(fragment);
-        }
-
-        if (config.lastRow > oldConfig.lastRow) {
-            var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);
-            el.appendChild(fragment);
-        }
-    };
-
-    this.$renderLinesFragment = function(config, firstRow, lastRow) {
-        var fragment = this.element.ownerDocument.createDocumentFragment();
-        var row = firstRow;
-        var foldLine = this.session.getNextFoldLine(row);
-        var foldStart = foldLine ? foldLine.start.row : Infinity;
-
-        while (true) {
-            if (row > foldStart) {
-                row = foldLine.end.row+1;
-                foldLine = this.session.getNextFoldLine(row, foldLine);
-                foldStart = foldLine ? foldLine.start.row : Infinity;
-            }
-            if (row > lastRow)
-                break;
-
-            var container = dom.createElement("div");
-
-            var html = [];
-            this.$renderLine(html, row, false, row == foldStart ? foldLine : false);
-            container.innerHTML = html.join("");
-            if (this.$useLineGroups()) {
-                container.className = 'ace_line_group';
-                fragment.appendChild(container);
-            } else {
-                var lines = container.childNodes
-                while(lines.length)
-                    fragment.appendChild(lines[0]);
-            }
-
-            row++;
-        }
-        return fragment;
-    };
-
-    this.update = function(config) {
-        this.config = config;
-
-        var html = [];
-        var firstRow = config.firstRow, lastRow = config.lastRow;
-
-        var row = firstRow;
-        var foldLine = this.session.getNextFoldLine(row);
-        var foldStart = foldLine ? foldLine.start.row : Infinity;
-
-        while (true) {
-            if (row > foldStart) {
-                row = foldLine.end.row+1;
-                foldLine = this.session.getNextFoldLine(row, foldLine);
-                foldStart = foldLine ? foldLine.start.row :Infinity;
-            }
-            if (row > lastRow)
-                break;
-
-            if (this.$useLineGroups())
-                html.push("<div class='ace_line_group'>")
-
-            this.$renderLine(html, row, false, row == foldStart ? foldLine : false);
-
-            if (this.$useLineGroups())
-                html.push("</div>"); // end the line group
-
-            row++;
-        }
-        this.element = dom.setInnerHtml(this.element, html.join(""));
-    };
-
-    this.$textToken = {
-        "text": true,
-        "rparen": true,
-        "lparen": true
-    };
-
-    this.$renderToken = function(stringBuilder, screenColumn, token, value) {
-        var self = this;
-        var replaceReg = /\t|&|<|( +)|([\x00-\x1f\x80-\xa0\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g;
-        var replaceFunc = function(c, a, b, tabIdx, idx4) {
-            if (a) {
-                return self.showInvisibles ?
-                    "<span class='ace_invisible'>" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "</span>" :
-                    lang.stringRepeat("\xa0", c.length);
-            } else if (c == "&") {
-                return "&#38;";
-            } else if (c == "<") {
-                return "&#60;";
-            } else if (c == "\t") {
-                var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);
-                screenColumn += tabSize - 1;
-                return self.$tabStrings[tabSize];
-            } else if (c == "\u3000") {
-                var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk";
-                var space = self.showInvisibles ? self.SPACE_CHAR : "";
-                screenColumn += 1;
-                return "<span class='" + classToUse + "' style='width:" +
-                    (self.config.characterWidth * 2) +
-                    "px'>" + space + "</span>";
-            } else if (b) {
-                return "<span class='ace_invisible ace_invalid'>" + self.SPACE_CHAR + "</span>";
-            } else {
-                screenColumn += 1;
-                return "<span class='ace_cjk' style='width:" +
-                    (self.config.characterWidth * 2) +
-                    "px'>" + c + "</span>";
-            }
-        };
-
-        var output = value.replace(replaceReg, replaceFunc);
-
-        if (!this.$textToken[token.type]) {
-            var classes = "ace_" + token.type.replace(/\./g, " ace_");
-            var style = "";
-            if (token.type == "fold")
-                style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' ";
-            stringBuilder.push("<span class='", classes, "'", style, ">", output, "</span>");
-        }
-        else {
-            stringBuilder.push(output);
-        }
-        return screenColumn + value.length;
-    };
-
-    this.renderIndentGuide = function(stringBuilder, value) {
-        var cols = value.search(this.$indentGuideRe);
-        if (cols <= 0)
-            return value;
-        if (value[0] == " ") {
-            cols -= cols % this.tabSize;
-            stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize));
-            return value.substr(cols);
-        } else if (value[0] == "\t") {
-            stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols));
-            return value.substr(cols);
-        }
-        return value;
-    };
-
-    this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {
-        var chars = 0;
-        var split = 0;
-        var splitChars = splits[0];
-        var screenColumn = 0;
-
-        for (var i = 0; i < tokens.length; i++) {
-            var token = tokens[i];
-            var value = token.value;
-            if (i == 0 && this.displayIndentGuides) {
-                chars = value.length;
-                value = this.renderIndentGuide(stringBuilder, value);
-                if (!value)
-                    continue;
-                chars -= value.length;
-            }
-
-            if (chars + value.length < splitChars) {
-                screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);
-                chars += value.length;
-            } else {
-                while (chars + value.length >= splitChars) {
-                    screenColumn = this.$renderToken(
-                        stringBuilder, screenColumn,
-                        token, value.substring(0, splitChars - chars)
-                    );
-                    value = value.substring(splitChars - chars);
-                    chars = splitChars;
-
-                    if (!onlyContents) {
-                        stringBuilder.push("</div>",
-                            "<div class='ace_line' style='height:",
-                            this.config.lineHeight, "px'>"
-                        );
-                    }
-
-                    split ++;
-                    screenColumn = 0;
-                    splitChars = splits[split] || Number.MAX_VALUE;
-                }
-                if (value.length != 0) {
-                    chars += value.length;
-                    screenColumn = this.$renderToken(
-                        stringBuilder, screenColumn, token, value
-                    );
-                }
-            }
-        }
-    };
-
-    this.$renderSimpleLine = function(stringBuilder, tokens) {
-        var screenColumn = 0;
-        var token = tokens[0];
-        var value = token.value;
-        if (this.displayIndentGuides)
-            value = this.renderIndentGuide(stringBuilder, value);
-        if (value)
-            screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);
-        for (var i = 1; i < tokens.length; i++) {
-            token = tokens[i];
-            value = token.value;
-            screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);
-        }
-    };
-    this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {
-        if (!foldLine && foldLine != false)
-            foldLine = this.session.getFoldLine(row);
-
-        if (foldLine)
-            var tokens = this.$getFoldLineTokens(row, foldLine);
-        else
-            var tokens = this.session.getTokens(row);
-
-
-        if (!onlyContents) {
-            stringBuilder.push(
-                "<div class='ace_line' style='height:", this.config.lineHeight, "px'>"
-            );
-        }
-
-        if (tokens.length) {
-            var splits = this.session.getRowSplitData(row);
-            if (splits && splits.length)
-                this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);
-            else
-                this.$renderSimpleLine(stringBuilder, tokens);
-        }
-
-        if (this.showInvisibles) {
-            if (foldLine)
-                row = foldLine.end.row
-
-            stringBuilder.push(
-                "<span class='ace_invisible'>",
-                row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,
-                "</span>"
-            );
-        }
-        if (!onlyContents)
-            stringBuilder.push("</div>");
-    };
-
-    this.$getFoldLineTokens = function(row, foldLine) {
-        var session = this.session;
-        var renderTokens = [];
-
-        function addTokens(tokens, from, to) {
-            var idx = 0, col = 0;
-            while ((col + tokens[idx].value.length) < from) {
-                col += tokens[idx].value.length;
-                idx++;
-
-                if (idx == tokens.length)
-                    return;
-            }
-            if (col != from) {
-                var value = tokens[idx].value.substring(from - col);
-                if (value.length > (to - from))
-                    value = value.substring(0, to - from);
-
-                renderTokens.push({
-                    type: tokens[idx].type,
-                    value: value
-                });
-
-                col = from + value.length;
-                idx += 1;
-            }
-
-            while (col < to && idx < tokens.length) {
-                var value = tokens[idx].value;
-                if (value.length + col > to) {
-                    renderTokens.push({
-                        type: tokens[idx].type,
-                        value: value.substring(0, to - col)
-                    });
-                } else
-                    renderTokens.push(tokens[idx]);
-                col += value.length;
-                idx += 1;
-            }
-        }
-
-        var tokens = session.getTokens(row);
-        foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {
-            if (placeholder != null) {
-                renderTokens.push({
-                    type: "fold",
-                    value: placeholder
-                });
-            } else {
-                if (isNewRow)
-                    tokens = session.getTokens(row);
-
-                if (tokens.length)
-                    addTokens(tokens, lastColumn, column);
-            }
-        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);
-
-        return renderTokens;
-    };
-
-    this.$useLineGroups = function() {
-        return this.session.getUseWrapMode();
-    };
-
-    this.destroy = function() {
-        clearInterval(this.$pollSizeChangesTimer);
-        if (this.$measureNode)
-            this.$measureNode.parentNode.removeChild(this.$measureNode);
-        delete this.$measureNode;
-    };
-
-}).call(Text.prototype);
-
-exports.Text = Text;
-
-});
-
-define('ace/layer/cursor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-
-var dom = require("../lib/dom");
-
-var Cursor = function(parentEl) {
-    this.element = dom.createElement("div");
-    this.element.className = "ace_layer ace_cursor-layer";
-    parentEl.appendChild(this.element);
-
-    this.isVisible = false;
-    this.isBlinking = true;
-    this.blinkInterval = 1000;
-    this.smoothBlinking = false;
-
-    this.cursors = [];
-    this.cursor = this.addCursor();
-    dom.addCssClass(this.element, "ace_hidden-cursors");
-};
-
-(function() {
-
-    this.$padding = 0;
-    this.setPadding = function(padding) {
-        this.$padding = padding;
-    };
-
-    this.setSession = function(session) {
-        this.session = session;
-    };
-
-    this.setBlinking = function(blinking) {
-        if (blinking != this.isBlinking){
-            this.isBlinking = blinking;
-            this.restartTimer();
-        }
-    };
-
-    this.setBlinkInterval = function(blinkInterval) {
-        if (blinkInterval != this.blinkInterval){
-            this.blinkInterval = blinkInterval;
-            this.restartTimer();
-        }
-    };
-
-    this.setSmoothBlinking = function(smoothBlinking) {
-        if (smoothBlinking != this.smoothBlinking) {
-            this.smoothBlinking = smoothBlinking;
-            if (smoothBlinking)
-                dom.addCssClass(this.element, "ace_smooth-blinking");
-            else
-                dom.removeCssClass(this.element, "ace_smooth-blinking");
-            this.restartTimer();
-        }
-    };
-
-    this.addCursor = function() {
-        var el = dom.createElement("div");
-        el.className = "ace_cursor";
-        this.element.appendChild(el);
-        this.cursors.push(el);
-        return el;
-    };
-
-    this.removeCursor = function() {
-        if (this.cursors.length > 1) {
-            var el = this.cursors.pop();
-            el.parentNode.removeChild(el);
-            return el;
-        }
-    };
-
-    this.hideCursor = function() {
-        this.isVisible = false;
-        dom.addCssClass(this.element, "ace_hidden-cursors");
-        this.restartTimer();
-    };
-
-    this.showCursor = function() {
-        this.isVisible = true;
-        dom.removeCssClass(this.element, "ace_hidden-cursors");
-        this.restartTimer();
-    };
-
-    this.restartTimer = function() {
-        clearInterval(this.intervalId);
-        clearTimeout(this.timeoutId);
-        if (this.smoothBlinking)
-            dom.removeCssClass(this.element, "ace_smooth-blinking");
-        for (var i = this.cursors.length; i--; )
-            this.cursors[i].style.opacity = "";
-
-        if (!this.isBlinking || !this.blinkInterval || !this.isVisible)
-            return;
-
-        if (this.smoothBlinking)
-            setTimeout(function(){
-                dom.addCssClass(this.element, "ace_smooth-blinking");
-            }.bind(this));
-
-        var blink = function(){
-            this.timeoutId = setTimeout(function() {
-                for (var i = this.cursors.length; i--; ) {
-                    this.cursors[i].style.opacity = 0;
-                }
-            }.bind(this), 0.6 * this.blinkInterval);
-        }.bind(this);
-
-        this.intervalId = setInterval(function() {
-            for (var i = this.cursors.length; i--; ) {
-                this.cursors[i].style.opacity = "";
-            }
-            blink();
-        }.bind(this), this.blinkInterval);
-
-        blink();
-    };
-
-    this.getPixelPosition = function(position, onScreen) {
-        if (!this.config || !this.session)
-            return {left : 0, top : 0};
-
-        if (!position)
-            position = this.session.selection.getCursor();
-        var pos = this.session.documentToScreenPosition(position);
-        var cursorLeft = this.$padding + pos.column * this.config.characterWidth;
-        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *
-            this.config.lineHeight;
-
-        return {left : cursorLeft, top : cursorTop};
-    };
-
-    this.update = function(config) {
-        this.config = config;
-
-        var selections = this.session.$selectionMarkers;
-        var i = 0, cursorIndex = 0;
-
-        if (selections === undefined || selections.length === 0){
-            selections = [{cursor: null}];
-        }
-
-        for (var i = 0, n = selections.length; i < n; i++) {
-            var pixelPos = this.getPixelPosition(selections[i].cursor, true);
-            if ((pixelPos.top > config.height + config.offset ||
-                 pixelPos.top < -config.offset) && i > 1) {
-                continue;
-            }
-
-            var style = (this.cursors[cursorIndex++] || this.addCursor()).style;
-
-            style.left = pixelPos.left + "px";
-            style.top = pixelPos.top + "px";
-            style.width = config.characterWidth + "px";
-            style.height = config.lineHeight + "px";
-        }
-        while (this.cursors.length > cursorIndex)
-            this.removeCursor();
-
-        var overwrite = this.session.getOverwrite();
-        this.$setOverwrite(overwrite);
-        this.$pixelPos = pixelPos;
-        this.restartTimer();
-    };
-
-    this.$setOverwrite = function(overwrite) {
-        if (overwrite != this.overwrite) {
-            this.overwrite = overwrite;
-            if (overwrite)
-                dom.addCssClass(this.element, "ace_overwrite-cursors");
-            else
-                dom.removeCssClass(this.element, "ace_overwrite-cursors");
-        }
-    };
-
-    this.destroy = function() {
-        clearInterval(this.intervalId);
-        clearTimeout(this.timeoutId);
-    };
-
-}).call(Cursor.prototype);
-
-exports.Cursor = Cursor;
-
-});
-
-define('ace/scrollbar', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/event', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var dom = require("./lib/dom");
-var event = require("./lib/event");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var ScrollBar = function(parent) {
-    this.element = dom.createElement("div");
-    this.element.className = "ace_scrollbar";
-
-    this.inner = dom.createElement("div");
-    this.inner.className = "ace_scrollbar-inner";
-    this.element.appendChild(this.inner);
-
-    parent.appendChild(this.element);
-    this.width = dom.scrollbarWidth(parent.ownerDocument);
-    this.element.style.width = (this.width || 15) + 5 + "px";
-
-    event.addListener(this.element, "scroll", this.onScroll.bind(this));
-};
-
-(function() {
-    oop.implement(this, EventEmitter);
-    this.onScroll = function() {
-        if (!this.skipEvent) {
-            this.scrollTop = this.element.scrollTop;
-            this._emit("scroll", {data: this.scrollTop});
-        }
-        this.skipEvent = false;
-    };
-    this.getWidth = function() {
-        return this.width;
-    };
-    this.setHeight = function(height) {
-        this.element.style.height = height + "px";
-    };
-    this.setInnerHeight = function(height) {
-        this.inner.style.height = height + "px";
-    };
-    this.setScrollTop = function(scrollTop) {
-        if (this.scrollTop != scrollTop) {
-            this.skipEvent = true;
-            this.scrollTop = this.element.scrollTop = scrollTop;
-        }
-    };
-
-}).call(ScrollBar.prototype);
-
-exports.ScrollBar = ScrollBar;
-});
-
-define('ace/renderloop', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) {
-
-
-var event = require("./lib/event");
-
-
-var RenderLoop = function(onRender, win) {
-    this.onRender = onRender;
-    this.pending = false;
-    this.changes = 0;
-    this.window = win || window;
-};
-
-(function() {
-
-
-    this.schedule = function(change) {
-        this.changes = this.changes | change;
-        if (!this.pending) {
-            this.pending = true;
-            var _self = this;
-            event.nextFrame(function() {
-                _self.pending = false;
-                var changes;
-                while (changes = _self.changes) {
-                    _self.changes = 0;
-                    _self.onRender(changes);
-                }
-            }, this.window);
-        }
-    };
-
-}).call(RenderLoop.prototype);
-
-exports.RenderLoop = RenderLoop;
-});
-
-define('ace/multi_select', ['require', 'exports', 'module' , 'ace/range_list', 'ace/range', 'ace/selection', 'ace/mouse/multi_select_handler', 'ace/lib/event', 'ace/lib/lang', 'ace/commands/multi_select_commands', 'ace/search', 'ace/edit_session', 'ace/editor'], function(require, exports, module) {
-
-var RangeList = require("./range_list").RangeList;
-var Range = require("./range").Range;
-var Selection = require("./selection").Selection;
-var onMouseDown = require("./mouse/multi_select_handler").onMouseDown;
-var event = require("./lib/event");
-var lang = require("./lib/lang");
-var commands = require("./commands/multi_select_commands");
-exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);
-var Search = require("./search").Search;
-var search = new Search();
-
-function find(session, needle, dir) {
-    search.$options.wrap = true;
-    search.$options.needle = needle;
-    search.$options.backwards = dir == -1;
-    return search.find(session);
-}
-var EditSession = require("./edit_session").EditSession;
-(function() {
-    this.getSelectionMarkers = function() {
-        return this.$selectionMarkers;
-    };
-}).call(EditSession.prototype);
-(function() {
-    this.ranges = null;
-    this.rangeList = null;
-    this.addRange = function(range, $blockChangeEvents) {
-        if (!range)
-            return;
-
-        if (!this.inMultiSelectMode && this.rangeCount == 0) {
-            var oldRange = this.toOrientedRange();
-            this.rangeList.add(oldRange);
-            this.rangeList.add(range);
-            if (this.rangeList.ranges.length != 2) {
-                this.rangeList.removeAll();
-                return $blockChangeEvents || this.fromOrientedRange(range);
-            }
-            this.rangeList.removeAll();
-            this.rangeList.add(oldRange);
-            this.$onAddRange(oldRange);
-        }
-
-        if (!range.cursor)
-            range.cursor = range.end;
-
-        var removed = this.rangeList.add(range);
-
-        this.$onAddRange(range);
-
-        if (removed.length)
-            this.$onRemoveRange(removed);
-
-        if (this.rangeCount > 1 && !this.inMultiSelectMode) {
-            this._emit("multiSelect");
-            this.inMultiSelectMode = true;
-            this.session.$undoSelect = false;
-            this.rangeList.attach(this.session);
-        }
-
-        return $blockChangeEvents || this.fromOrientedRange(range);
-    };
-
-    this.toSingleRange = function(range) {
-        range = range || this.ranges[0];
-        var removed = this.rangeList.removeAll();
-        if (removed.length)
-            this.$onRemoveRange(removed);
-
-        range && this.fromOrientedRange(range);
-    };
-    this.substractPoint = function(pos) {
-        var removed = this.rangeList.substractPoint(pos);
-        if (removed) {
-            this.$onRemoveRange(removed);
-            return removed[0];
-        }
-    };
-    this.mergeOverlappingRanges = function() {
-        var removed = this.rangeList.merge();
-        if (removed.length)
-            this.$onRemoveRange(removed);
-        else if(this.ranges[0])
-            this.fromOrientedRange(this.ranges[0]);
-    };
-
-    this.$onAddRange = function(range) {
-        this.rangeCount = this.rangeList.ranges.length;
-        this.ranges.unshift(range);
-        this._emit("addRange", {range: range});
-    };
-
-    this.$onRemoveRange = function(removed) {
-        this.rangeCount = this.rangeList.ranges.length;
-        if (this.rangeCount == 1 && this.inMultiSelectMode) {
-            var lastRange = this.rangeList.ranges.pop();
-            removed.push(lastRange);
-            this.rangeCount = 0;
-        }
-
-        for (var i = removed.length; i--; ) {
-            var index = this.ranges.indexOf(removed[i]);
-            this.ranges.splice(index, 1);
-        }
-
-        this._emit("removeRange", {ranges: removed});
-
-        if (this.rangeCount == 0 && this.inMultiSelectMode) {
-            this.inMultiSelectMode = false;
-            this._emit("singleSelect");
-            this.session.$undoSelect = true;
-            this.rangeList.detach(this.session);
-        }
-
-        lastRange = lastRange || this.ranges[0];
-        if (lastRange && !lastRange.isEqual(this.getRange()))
-            this.fromOrientedRange(lastRange);
-    };
-    this.$initRangeList = function() {
-        if (this.rangeList)
-            return;
-
-        this.rangeList = new RangeList();
-        this.ranges = [];
-        this.rangeCount = 0;
-    };
-    this.getAllRanges = function() {
-        return this.rangeList.ranges.concat();
-    };
-
-    this.splitIntoLines = function () {
-        if (this.rangeCount > 1) {
-            var ranges = this.rangeList.ranges;
-            var lastRange = ranges[ranges.length - 1];
-            var range = Range.fromPoints(ranges[0].start, lastRange.end);
-
-            this.toSingleRange();
-            this.setSelectionRange(range, lastRange.cursor == lastRange.start);
-        } else {
-            var range = this.getRange();
-            var isBackwards = this.isBackwards();
-            var startRow = range.start.row;
-            var endRow = range.end.row;
-            if (startRow == endRow) {
-                if (isBackwards)
-                    var start = range.end, end = range.start;
-                else
-                    var start = range.start, end = range.end;
-                
-                this.addRange(Range.fromPoints(end, end));
-                this.addRange(Range.fromPoints(start, start));
-                return;
-            }
-
-            var rectSel = [];
-            var r = this.getLineRange(startRow, true);
-            r.start.column = range.start.column;
-            rectSel.push(r);
-
-            for (var i = startRow + 1; i < endRow; i++)
-                rectSel.push(this.getLineRange(i, true));
-
-            r = this.getLineRange(endRow, true);
-            r.end.column = range.end.column;
-            rectSel.push(r);
-
-            rectSel.forEach(this.addRange, this);
-        }
-    };
-    this.toggleBlockSelection = function () {
-        if (this.rangeCount > 1) {
-            var ranges = this.rangeList.ranges;
-            var lastRange = ranges[ranges.length - 1];
-            var range = Range.fromPoints(ranges[0].start, lastRange.end);
-
-            this.toSingleRange();
-            this.setSelectionRange(range, lastRange.cursor == lastRange.start);
-        } else {
-            var cursor = this.session.documentToScreenPosition(this.selectionLead);
-            var anchor = this.session.documentToScreenPosition(this.selectionAnchor);
-
-            var rectSel = this.rectangularRangeBlock(cursor, anchor);
-            rectSel.forEach(this.addRange, this);
-        }
-    };
-    this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {
-        var rectSel = [];
-
-        var xBackwards = screenCursor.column < screenAnchor.column;
-        if (xBackwards) {
-            var startColumn = screenCursor.column;
-            var endColumn = screenAnchor.column;
-        } else {
-            var startColumn = screenAnchor.column;
-            var endColumn = screenCursor.column;
-        }
-
-        var yBackwards = screenCursor.row < screenAnchor.row;
-        if (yBackwards) {
-            var startRow = screenCursor.row;
-            var endRow = screenAnchor.row;
-        } else {
-            var startRow = screenAnchor.row;
-            var endRow = screenCursor.row;
-        }
-
-        if (startColumn < 0)
-            startColumn = 0;
-        if (startRow < 0)
-            startRow = 0;
-
-        if (startRow == endRow)
-            includeEmptyLines = true;
-
-        for (var row = startRow; row <= endRow; row++) {
-            var range = Range.fromPoints(
-                this.session.screenToDocumentPosition(row, startColumn),
-                this.session.screenToDocumentPosition(row, endColumn)
-            );
-            if (range.isEmpty()) {
-                if (docEnd && isSamePoint(range.end, docEnd))
-                    break;
-                var docEnd = range.end;
-            }
-            range.cursor = xBackwards ? range.start : range.end;
-            rectSel.push(range);
-        }
-
-        if (yBackwards)
-            rectSel.reverse();
-
-        if (!includeEmptyLines) {
-            var end = rectSel.length - 1;
-            while (rectSel[end].isEmpty() && end > 0)
-                end--;
-            if (end > 0) {
-                var start = 0;
-                while (rectSel[start].isEmpty())
-                    start++;
-            }
-            for (var i = end; i >= start; i--) {
-                if (rectSel[i].isEmpty())
-                    rectSel.splice(i, 1);
-            }
-        }
-
-        return rectSel;
-    };
-}).call(Selection.prototype);
-var Editor = require("./editor").Editor;
-(function() {
-    this.updateSelectionMarkers = function() {
-        this.renderer.updateCursor();
-        this.renderer.updateBackMarkers();
-    };
-    this.addSelectionMarker = function(orientedRange) {
-        if (!orientedRange.cursor)
-            orientedRange.cursor = orientedRange.end;
-
-        var style = this.getSelectionStyle();
-        orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style);
-
-        this.session.$selectionMarkers.push(orientedRange);
-        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;
-        return orientedRange;
-    };
-    this.removeSelectionMarker = function(range) {
-        if (!range.marker)
-            return;
-        this.session.removeMarker(range.marker);
-        var index = this.session.$selectionMarkers.indexOf(range);
-        if (index != -1)
-            this.session.$selectionMarkers.splice(index, 1);
-        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;
-    };
-
-    this.removeSelectionMarkers = function(ranges) {
-        var markerList = this.session.$selectionMarkers;
-        for (var i = ranges.length; i--; ) {
-            var range = ranges[i];
-            if (!range.marker)
-                continue;
-            this.session.removeMarker(range.marker);
-            var index = markerList.indexOf(range);
-            if (index != -1)
-                markerList.splice(index, 1);
-        }
-        this.session.selectionMarkerCount = markerList.length;
-    };
-
-    this.$onAddRange = function(e) {
-        this.addSelectionMarker(e.range);
-        this.renderer.updateCursor();
-        this.renderer.updateBackMarkers();
-    };
-
-    this.$onRemoveRange = function(e) {
-        this.removeSelectionMarkers(e.ranges);
-        this.renderer.updateCursor();
-        this.renderer.updateBackMarkers();
-    };
-
-    this.$onMultiSelect = function(e) {
-        if (this.inMultiSelectMode)
-            return;
-        this.inMultiSelectMode = true;
-
-        this.setStyle("ace_multiselect");
-        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);
-        this.commands.setDefaultHandler("exec", this.$onMultiSelectExec);
-
-        this.renderer.updateCursor();
-        this.renderer.updateBackMarkers();
-    };
-
-    this.$onSingleSelect = function(e) {
-        if (this.session.multiSelect.inVirtualMode)
-            return;
-        this.inMultiSelectMode = false;
-
-        this.unsetStyle("ace_multiselect");
-        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);
-
-        this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec);
-        this.renderer.updateCursor();
-        this.renderer.updateBackMarkers();
-    };
-
-    this.$onMultiSelectExec = function(e) {
-        var command = e.command;
-        var editor = e.editor;
-        if (!editor.multiSelect)
-            return;
-        if (!command.multiSelectAction) {
-            var result = command.exec(editor, e.args || {});
-            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());
-            editor.multiSelect.mergeOverlappingRanges();
-        } else if (command.multiSelectAction == "forEach") {
-            result = editor.forEachSelection(command, e.args);
-        } else if (command.multiSelectAction == "forEachLine") {
-            result = editor.forEachSelection(command, e.args, true);
-        } else if (command.multiSelectAction == "single") {
-            editor.exitMultiSelectMode();
-            result = command.exec(editor, e.args || {});
-        } else {
-            result = command.multiSelectAction(editor, e.args || {});
-        }
-        return result;
-    }; 
-    this.forEachSelection = function(cmd, args, $byLines) {
-        if (this.inVirtualSelectionMode)
-            return;
-
-        var session = this.session;
-        var selection = this.selection;
-        var rangeList = selection.rangeList;
-        var result;
-        
-        var reg = selection._eventRegistry;
-        selection._eventRegistry = {};
-
-        var tmpSel = new Selection(session);
-        this.inVirtualSelectionMode = true;
-        for (var i = rangeList.ranges.length; i--;) {
-            if ($byLines) {
-                while (i > 0 && rangeList.ranges[i].start.row == rangeList.ranges[i - 1].end.row)
-                    i--;
-            }
-            tmpSel.fromOrientedRange(rangeList.ranges[i]);
-            this.selection = session.selection = tmpSel;
-            var cmdResult = cmd.exec(this, args || {});
-            if (!result == undefined)
-                result = cmdResult;
-            tmpSel.toOrientedRange(rangeList.ranges[i]);
-        }
-        tmpSel.detach();
-
-        this.selection = session.selection = selection;
-        this.inVirtualSelectionMode = false;
-        selection._eventRegistry = reg;
-        selection.mergeOverlappingRanges();
-        
-        var anim = this.renderer.$scrollAnimation;
-        this.onCursorChange();
-        this.onSelectionChange();
-        if (anim && anim.from == anim.to)
-            this.renderer.animateScrolling(anim.from);
-        
-        return result;
-    };
-    this.exitMultiSelectMode = function() {
-        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)
-            return;
-        this.multiSelect.toSingleRange();
-    };
-
-    this.getCopyText = function() {
-        var text = "";
-        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {
-            var ranges = this.multiSelect.rangeList.ranges;
-            var buf = [];
-            for (var i = 0; i < ranges.length; i++) {
-                buf.push(this.session.getTextRange(ranges[i]));
-            }
-            var nl = this.session.getDocument().getNewLineCharacter();
-            text = buf.join(nl);
-            if (text.length == (buf.length - 1) * nl.length)
-                text = "";
-        } else if (!this.selection.isEmpty()) {
-            text = this.session.getTextRange(this.getSelectionRange());
-        }
-        this._signal("copy", text);
-        return text;
-    };
-    this.onPaste = function(text) {
-        if (this.$readOnly)
-            return;
-
-        this._signal("paste", text);
-        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)
-            return this.insert(text);
-
-        var lines = text.split(/\r\n|\r|\n/);
-        var ranges = this.selection.rangeList.ranges;
-
-        if (lines.length > ranges.length || lines.length < 2 || !lines[1])
-            return this.commands.exec("insertstring", this, text);
-
-        for (var i = ranges.length; i--;) {
-            var range = ranges[i];
-            if (!range.isEmpty())
-                this.session.remove(range);
-
-            this.session.insert(range.start, lines[i]);
-        }
-    };
-    this.findAll = function(needle, options, additive) {
-        options = options || {};
-        options.needle = needle || options.needle;
-        this.$search.set(options);
-
-        var ranges = this.$search.findAll(this.session);
-        if (!ranges.length)
-            return 0;
-
-        this.$blockScrolling += 1;
-        var selection = this.multiSelect;
-
-        if (!additive)
-            selection.toSingleRange(ranges[0]);
-
-        for (var i = ranges.length; i--; )
-            selection.addRange(ranges[i], true);
-
-        this.$blockScrolling -= 1;
-
-        return ranges.length;
-    };
-    this.selectMoreLines = function(dir, skip) {
-        var range = this.selection.toOrientedRange();
-        var isBackwards = range.cursor == range.end;
-
-        var screenLead = this.session.documentToScreenPosition(range.cursor);
-        if (this.selection.$desiredColumn)
-            screenLead.column = this.selection.$desiredColumn;
-
-        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);
-
-        if (!range.isEmpty()) {
-            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);
-            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);
-        } else {
-            var anchor = lead;
-        }
-
-        if (isBackwards) {
-            var newRange = Range.fromPoints(lead, anchor);
-            newRange.cursor = newRange.start;
-        } else {
-            var newRange = Range.fromPoints(anchor, lead);
-            newRange.cursor = newRange.end;
-        }
-
-        newRange.desiredColumn = screenLead.column;
-        if (!this.selection.inMultiSelectMode) {
-            this.selection.addRange(range);
-        } else {
-            if (skip)
-                var toRemove = range.cursor;
-        }
-
-        this.selection.addRange(newRange);
-        if (toRemove)
-            this.selection.substractPoint(toRemove);
-    };
-    this.transposeSelections = function(dir) {
-        var session = this.session;
-        var sel = session.multiSelect;
-        var all = sel.ranges;
-
-        for (var i = all.length; i--; ) {
-            var range = all[i];
-            if (range.isEmpty()) {
-                var tmp = session.getWordRange(range.start.row, range.start.column);
-                range.start.row = tmp.start.row;
-                range.start.column = tmp.start.column;
-                range.end.row = tmp.end.row;
-                range.end.column = tmp.end.column;
-            }
-        }
-        sel.mergeOverlappingRanges();
-
-        var words = [];
-        for (var i = all.length; i--; ) {
-            var range = all[i];
-            words.unshift(session.getTextRange(range));
-        }
-
-        if (dir < 0)
-            words.unshift(words.pop());
-        else
-            words.push(words.shift());
-
-        for (var i = all.length; i--; ) {
-            var range = all[i];
-            var tmp = range.clone();
-            session.replace(range, words[i]);
-            range.start.row = tmp.start.row;
-            range.start.column = tmp.start.column;
-        }
-    };
-    this.selectMore = function(dir, skip) {
-        var session = this.session;
-        var sel = session.multiSelect;
-
-        var range = sel.toOrientedRange();
-        if (range.isEmpty()) {
-            var range = session.getWordRange(range.start.row, range.start.column);
-            range.cursor = range.end;
-            this.multiSelect.addRange(range);
-        }
-        var needle = session.getTextRange(range);
-
-        var newRange = find(session, needle, dir);
-        if (newRange) {
-            newRange.cursor = dir == -1 ? newRange.start : newRange.end;
-            this.multiSelect.addRange(newRange);
-        }
-        if (skip)
-            this.multiSelect.substractPoint(range.cursor);
-    };
-    this.alignCursors = function() {
-        var session = this.session;
-        var sel = session.multiSelect;
-        var ranges = sel.ranges;
-
-        if (!ranges.length) {
-            var range = this.selection.getRange();
-            var fr = range.start.row, lr = range.end.row;
-            var lines = this.session.doc.removeLines(fr, lr);
-            lines = this.$reAlignText(lines);
-            this.session.doc.insertLines(fr, lines);
-            range.start.column = 0;
-            range.end.column = lines[lines.length - 1].length;
-            this.selection.setRange(range);
-        } else {
-            var row = -1;
-            var sameRowRanges = ranges.filter(function(r) {
-                if (r.cursor.row == row)
-                    return true;
-                row = r.cursor.row;
-            });
-            sel.$onRemoveRange(sameRowRanges);
-
-            var maxCol = 0;
-            var minSpace = Infinity;
-            var spaceOffsets = ranges.map(function(r) {
-                var p = r.cursor;
-                var line = session.getLine(p.row);
-                var spaceOffset = line.substr(p.column).search(/\S/g);
-                if (spaceOffset == -1)
-                    spaceOffset = 0;
-
-                if (p.column > maxCol)
-                    maxCol = p.column;
-                if (spaceOffset < minSpace)
-                    minSpace = spaceOffset;
-                return spaceOffset;
-            });
-            ranges.forEach(function(r, i) {
-                var p = r.cursor;
-                var l = maxCol - p.column;
-                var d = spaceOffsets[i] - minSpace;
-                if (l > d)
-                    session.insert(p, lang.stringRepeat(" ", l - d));
-                else
-                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));
-
-                r.start.column = r.end.column = maxCol;
-                r.start.row = r.end.row = p.row;
-                r.cursor = r.end;
-            });
-            sel.fromOrientedRange(ranges[0]);
-            this.renderer.updateCursor();
-            this.renderer.updateBackMarkers();
-        }
-    };
-
-    this.$reAlignText = function(lines) {
-        var isLeftAligned = true, isRightAligned = true;
-        var startW, textW, endW;
-
-        return lines.map(function(line) {
-            var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/);
-            if (!m)
-                return [line];
-
-            if (startW == null) {
-                startW = m[1].length;
-                textW = m[2].length;
-                endW = m[3].length;
-                return m;
-            }
-
-            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)
-                isRightAligned = false;
-            if (startW != m[1].length)
-                isLeftAligned = false;
-
-            if (startW > m[1].length)
-                startW = m[1].length;
-            if (textW < m[2].length)
-                textW = m[2].length;
-            if (endW > m[3].length)
-                endW = m[3].length;
-
-            return m;
-        }).map(isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);
-
-        function spaces(n) {
-            return lang.stringRepeat(" ", n);
-        }
-
-        function alignLeft(m) {
-            return !m[2] ? m[0] : spaces(startW) + m[2]
-                + spaces(textW - m[2].length + endW)
-                + m[4].replace(/^([=:])\s+/, "$1 ")
-        }
-        function alignRight(m) {
-            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]
-                + spaces(endW, " ")
-                + m[4].replace(/^([=:])\s+/, "$1 ")
-        }
-        function unAlign(m) {
-            return !m[2] ? m[0] : spaces(startW) + m[2]
-                + spaces(endW)
-                + m[4].replace(/^([=:])\s+/, "$1 ")
-        }
-    }
-}).call(Editor.prototype);
-
-
-function isSamePoint(p1, p2) {
-    return p1.row == p2.row && p1.column == p2.column;
-}
-exports.onSessionChange = function(e) {
-    var session = e.session;
-    if (!session.multiSelect) {
-        session.$selectionMarkers = [];
-        session.selection.$initRangeList();
-        session.multiSelect = session.selection;
-    }
-    this.multiSelect = session.multiSelect;
-
-    var oldSession = e.oldSession;
-    if (oldSession) {
-        oldSession.multiSelect.removeEventListener("addRange", this.$onAddRange);
-        oldSession.multiSelect.removeEventListener("removeRange", this.$onRemoveRange);
-        oldSession.multiSelect.removeEventListener("multiSelect", this.$onMultiSelect);
-        oldSession.multiSelect.removeEventListener("singleSelect", this.$onSingleSelect);
-    }
-
-    session.multiSelect.on("addRange", this.$onAddRange);
-    session.multiSelect.on("removeRange", this.$onRemoveRange);
-    session.multiSelect.on("multiSelect", this.$onMultiSelect);
-    session.multiSelect.on("singleSelect", this.$onSingleSelect);
-
-    if (this.inMultiSelectMode != session.selection.inMultiSelectMode) {
-        if (session.selection.inMultiSelectMode)
-            this.$onMultiSelect();
-        else
-            this.$onSingleSelect();
-    }
-};
-function MultiSelect(editor) {
-    editor.$onAddRange = editor.$onAddRange.bind(editor);
-    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);
-    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);
-    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);
-
-    exports.onSessionChange.call(editor, editor);
-    editor.on("changeSession", exports.onSessionChange.bind(editor));
-
-    editor.on("mousedown", onMouseDown);
-    editor.commands.addCommands(commands.defaultCommands);
-
-    addAltCursorListeners(editor);
-}
-
-function addAltCursorListeners(editor){
-    var el = editor.textInput.getElement();
-    var altCursor = false;
-    var contentEl = editor.renderer.content;
-    event.addListener(el, "keydown", function(e) {
-        if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) {
-            if (!altCursor) {
-                contentEl.style.cursor = "crosshair";
-                altCursor = true;
-            }
-        } else if (altCursor) {
-            contentEl.style.cursor = "";
-        }
-    });
-
-    event.addListener(el, "keyup", reset);
-    event.addListener(el, "blur", reset);
-    function reset() {
-        if (altCursor) {
-            contentEl.style.cursor = "";
-            altCursor = false;
-        }
-    }
-}
-
-exports.MultiSelect = MultiSelect;
-
-});
-
-define('ace/mouse/multi_select_handler', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) {
-
-var event = require("../lib/event");
-function isSamePoint(p1, p2) {
-    return p1.row == p2.row && p1.column == p2.column;
-}
-
-function onMouseDown(e) {
-    var ev = e.domEvent;
-    var alt = ev.altKey;
-    var shift = ev.shiftKey;
-    var ctrl = e.getAccelKey();
-    var button = e.getButton();
-
-    if (e.editor.inMultiSelectMode && button == 2) {
-        e.editor.textInput.onContextMenu(e.domEvent);
-        return;
-    }
-    
-    if (!ctrl && !alt) {
-        if (button == 0 && e.editor.inMultiSelectMode)
-            e.editor.exitMultiSelectMode();
-        return;
-    }
-
-    var editor = e.editor;
-    var selection = editor.selection;
-    var isMultiSelect = editor.inMultiSelectMode;
-    var pos = e.getDocumentPosition();
-    var cursor = selection.getCursor();
-    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));
-
-
-    var mouseX = e.x, mouseY = e.y;
-    var onMouseSelection = function(e) {
-        mouseX = e.clientX;
-        mouseY = e.clientY;
-    };
-
-    var blockSelect = function() {
-        var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
-        var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);
-
-        if (isSamePoint(screenCursor, newCursor)
-            && isSamePoint(cursor, selection.selectionLead))
-            return;
-        screenCursor = newCursor;
-
-        editor.selection.moveCursorToPosition(cursor);
-        editor.selection.clearSelection();
-        editor.renderer.scrollCursorIntoView();
-
-        editor.removeSelectionMarkers(rectSel);
-        rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);
-        rectSel.forEach(editor.addSelectionMarker, editor);
-        editor.updateSelectionMarkers();
-    };
-    
-    var session = editor.session;
-    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
-    var screenCursor = screenAnchor;
-
-    
-
-    if (ctrl && !shift && !alt && button == 0) {
-        if (!isMultiSelect && inSelection)
-            return; // dragging
-
-        if (!isMultiSelect) {
-            var range = selection.toOrientedRange();
-            editor.addSelectionMarker(range);
-        }
-
-        var oldRange = selection.rangeList.rangeAtPoint(pos);
-
-        editor.once("mouseup", function() {
-            var tmpSel = selection.toOrientedRange();
-
-            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))
-                selection.substractPoint(tmpSel.cursor);
-            else {
-                if (range) {
-                    editor.removeSelectionMarker(range);
-                    selection.addRange(range);
-                }
-                selection.addRange(tmpSel);
-            }
-        });
-
-    } else if (alt && button == 0) {
-        e.stop();
-
-        if (isMultiSelect && !ctrl)
-            selection.toSingleRange();
-        else if (!isMultiSelect && ctrl)
-            selection.addRange();
-
-        var rectSel = [];
-        if (shift) {
-            screenAnchor = session.documentToScreenPosition(selection.lead);
-            blockSelect();
-        } else {
-            selection.moveCursorToPosition(pos);
-            selection.clearSelection();
-        }
-
-
-        var onMouseSelectionEnd = function(e) {
-            clearInterval(timerId);
-            editor.removeSelectionMarkers(rectSel);
-            for (var i = 0; i < rectSel.length; i++)
-                selection.addRange(rectSel[i]);
-        };
-
-        var onSelectionInterval = blockSelect;
-
-        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);
-        var timerId = setInterval(function() {onSelectionInterval();}, 20);
-
-        return e.preventDefault();
-    }
-}
-
-
-exports.onMouseDown = onMouseDown;
-
-});
-
-define('ace/commands/multi_select_commands', ['require', 'exports', 'module' , 'ace/keyboard/hash_handler'], function(require, exports, module) {
-exports.defaultCommands = [{
-    name: "addCursorAbove",
-    exec: function(editor) { editor.selectMoreLines(-1); },
-    bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"},
-    readonly: true
-}, {
-    name: "addCursorBelow",
-    exec: function(editor) { editor.selectMoreLines(1); },
-    bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"},
-    readonly: true
-}, {
-    name: "addCursorAboveSkipCurrent",
-    exec: function(editor) { editor.selectMoreLines(-1, true); },
-    bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"},
-    readonly: true
-}, {
-    name: "addCursorBelowSkipCurrent",
-    exec: function(editor) { editor.selectMoreLines(1, true); },
-    bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"},
-    readonly: true
-}, {
-    name: "selectMoreBefore",
-    exec: function(editor) { editor.selectMore(-1); },
-    bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"},
-    readonly: true
-}, {
-    name: "selectMoreAfter",
-    exec: function(editor) { editor.selectMore(1); },
-    bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"},
-    readonly: true
-}, {
-    name: "selectNextBefore",
-    exec: function(editor) { editor.selectMore(-1, true); },
-    bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"},
-    readonly: true
-}, {
-    name: "selectNextAfter",
-    exec: function(editor) { editor.selectMore(1, true); },
-    bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"},
-    readonly: true
-}, {
-    name: "splitIntoLines",
-    exec: function(editor) { editor.multiSelect.splitIntoLines(); },
-    bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"},
-    readonly: true
-}, {
-    name: "alignCursors",
-    exec: function(editor) { editor.alignCursors(); },
-    bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"}
-}];
-exports.multiSelectCommands = [{
-    name: "singleSelection",
-    bindKey: "esc",
-    exec: function(editor) { editor.exitMultiSelectMode(); },
-    readonly: true,
-    isAvailable: function(editor) {return editor && editor.inMultiSelectMode}
-}];
-
-var HashHandler = require("../keyboard/hash_handler").HashHandler;
-exports.keyboardHandler = new HashHandler(exports.multiSelectCommands);
-
-});
-
-define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/config'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var EventEmitter = require("../lib/event_emitter").EventEmitter;
-var config = require("../config");
-
-var WorkerClient = function(topLevelNamespaces, mod, classname) {
-    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);
-    this.changeListener = this.changeListener.bind(this);
-    this.onMessage = this.onMessage.bind(this);
-    this.onError = this.onError.bind(this);
-    if (require.nameToUrl && !require.toUrl)
-        require.toUrl = require.nameToUrl;
-
-    var workerUrl;
-    if (config.get("packaged") || !require.toUrl) {
-        workerUrl = config.moduleUrl(mod, "worker");
-    } else {
-        var normalizePath = this.$normalizePath;
-        workerUrl = normalizePath(require.toUrl("ace/worker/worker.js", null, "_"));
-
-        var tlns = {};
-        topLevelNamespaces.forEach(function(ns) {
-            tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, ""));
-        });
-    }
-
-    this.$worker = new Worker(workerUrl);
-    this.$worker.postMessage({
-        init : true,
-        tlns: tlns,
-        module: mod,
-        classname: classname
-    });
-
-    this.callbackId = 1;
-    this.callbacks = {};
-
-    this.$worker.onerror = this.onError;
-    this.$worker.onmessage = this.onMessage;
-};
-
-(function(){
-
-    oop.implement(this, EventEmitter);
-
-    this.onError = function(e) {
-        window.console && console.log && console.log(e);
-        throw e;
-    };
-
-    this.onMessage = function(e) {
-        var msg = e.data;
-        switch(msg.type) {
-            case "log":
-                window.console && console.log && console.log.apply(console, msg.data);
-                break;
-
-            case "event":
-                this._emit(msg.name, {data: msg.data});
-                break;
-
-            case "call":
-                var callback = this.callbacks[msg.id];
-                if (callback) {
-                    callback(msg.data);
-                    delete this.callbacks[msg.id];
-                }
-                break;
-        }
-    };
-
-    this.$normalizePath = function(path) {
-        if (!location.host) // needed for file:// protocol
-            return path;
-        path = path.replace(/^[a-z]+:\/\/[^\/]+/, ""); // Remove domain name and rebuild it
-        path = location.protocol + "//" + location.host
-            + (path.charAt(0) == "/" ? "" : location.pathname.replace(/\/[^\/]*$/, ""))
-            + "/" + path.replace(/^[\/]+/, "");
-        return path;
-    };
-
-    this.terminate = function() {
-        this._emit("terminate", {});
-        this.$worker.terminate();
-        this.$worker = null;
-        this.$doc.removeEventListener("change", this.changeListener);
-        this.$doc = null;
-    };
-
-    this.send = function(cmd, args) {
-        this.$worker.postMessage({command: cmd, args: args});
-    };
-
-    this.call = function(cmd, args, callback) {
-        if (callback) {
-            var id = this.callbackId++;
-            this.callbacks[id] = callback;
-            args.push(id);
-        }
-        this.send(cmd, args);
-    };
-
-    this.emit = function(event, data) {
-        try {
-            this.$worker.postMessage({event: event, data: {data: data.data}});
-        }
-        catch(ex) {}
-    };
-
-    this.attachToDocument = function(doc) {
-        if(this.$doc)
-            this.terminate();
-
-        this.$doc = doc;
-        this.call("setValue", [doc.getValue()]);
-        doc.on("change", this.changeListener);
-    };
-
-    this.changeListener = function(e) {
-        if (!this.deltaQueue) {
-            this.deltaQueue = [e.data];
-            setTimeout(this.$sendDeltaQueue, 1);
-        } else
-            this.deltaQueue.push(e.data);
-    };
-
-    this.$sendDeltaQueue = function() {
-        var q = this.deltaQueue;
-        if (!q) return;
-        this.deltaQueue = null;
-        if (q.length > 20 && q.length > this.$doc.getLength() >> 1) {
-            this.call("setValue", [this.$doc.getValue()]);
-        } else
-            this.emit("change", {data: q});
-    }
-
-}).call(WorkerClient.prototype);
-
-
-var UIWorkerClient = function(topLevelNamespaces, mod, classname) {
-    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);
-    this.changeListener = this.changeListener.bind(this);
-    this.callbackId = 1;
-    this.callbacks = {};
-    this.messageBuffer = [];
-
-    var main = null;
-    var sender = Object.create(EventEmitter);
-    var _self = this;
-
-    this.$worker = {};
-    this.$worker.terminate = function() {};
-    this.$worker.postMessage = function(e) {
-        _self.messageBuffer.push(e);
-        main && setTimeout(processNext);
-    };
-
-    var processNext = function() {
-        var msg = _self.messageBuffer.shift();
-        if (msg.command)
-            main[msg.command].apply(main, msg.args);
-        else if (msg.event)
-            sender._emit(msg.event, msg.data);
-    };
-
-    sender.postMessage = function(msg) {
-        _self.onMessage({data: msg});
-    };
-    sender.callback = function(data, callbackId) {
-        this.postMessage({type: "call", id: callbackId, data: data});
-    };
-    sender.emit = function(name, data) {
-        this.postMessage({type: "event", name: name, data: data});
-    };
-
-    config.loadModule(["worker", mod], function(Main) {
-        main = new Main[classname](sender);
-        while (_self.messageBuffer.length)
-            processNext();
-    });
-};
-
-UIWorkerClient.prototype = WorkerClient.prototype;
-
-exports.UIWorkerClient = UIWorkerClient;
-exports.WorkerClient = WorkerClient;
-
-});
-define('ace/placeholder', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/event_emitter', 'ace/lib/oop'], function(require, exports, module) {
-
-
-var Range = require("./range").Range;
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var oop = require("./lib/oop");
-
-var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {
-    var _self = this;
-    this.length = length;
-    this.session = session;
-    this.doc = session.getDocument();
-    this.mainClass = mainClass;
-    this.othersClass = othersClass;
-    this.$onUpdate = this.onUpdate.bind(this);
-    this.doc.on("change", this.$onUpdate);
-    this.$others = others;
-    
-    this.$onCursorChange = function() {
-        setTimeout(function() {
-            _self.onCursorChange();
-        });
-    };
-    
-    this.$pos = pos;
-    var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};
-    this.$undoStackDepth =  undoStack.length;
-    this.setup();
-
-    session.selection.on("changeCursor", this.$onCursorChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setup = function() {
-        var _self = this;
-        var doc = this.doc;
-        var session = this.session;
-        var pos = this.$pos;
-
-        this.pos = doc.createAnchor(pos.row, pos.column);
-        this.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);
-        this.pos.on("change", function(event) {
-            session.removeMarker(_self.markerId);
-            _self.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.mainClass, null, false);
-        });
-        this.others = [];
-        this.$others.forEach(function(other) {
-            var anchor = doc.createAnchor(other.row, other.column);
-            _self.others.push(anchor);
-        });
-        session.setUndoSelect(false);
-    };
-    this.showOtherMarkers = function() {
-        if(this.othersActive) return;
-        var session = this.session;
-        var _self = this;
-        this.othersActive = true;
-        this.others.forEach(function(anchor) {
-            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);
-            anchor.on("change", function(event) {
-                session.removeMarker(anchor.markerId);
-                anchor.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.othersClass, null, false);
-            });
-        });
-    };
-    this.hideOtherMarkers = function() {
-        if(!this.othersActive) return;
-        this.othersActive = false;
-        for (var i = 0; i < this.others.length; i++) {
-            this.session.removeMarker(this.others[i].markerId);
-        }
-    };
-    this.onUpdate = function(event) {
-        var delta = event.data;
-        var range = delta.range;
-        if(range.start.row !== range.end.row) return;
-        if(range.start.row !== this.pos.row) return;
-        if (this.$updating) return;
-        this.$updating = true;
-        var lengthDiff = delta.action === "insertText" ? range.end.column - range.start.column : range.start.column - range.end.column;
-        
-        if(range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1) {
-            var distanceFromStart = range.start.column - this.pos.column;
-            this.length += lengthDiff;
-            if(!this.session.$fromUndo) {
-                if(delta.action === "insertText") {
-                    for (var i = this.others.length - 1; i >= 0; i--) {
-                        var otherPos = this.others[i];
-                        var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};
-                        if(otherPos.row === range.start.row && range.start.column < otherPos.column)
-                            newPos.column += lengthDiff;
-                        this.doc.insert(newPos, delta.text);
-                    }
-                } else if(delta.action === "removeText") {
-                    for (var i = this.others.length - 1; i >= 0; i--) {
-                        var otherPos = this.others[i];
-                        var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};
-                        if(otherPos.row === range.start.row && range.start.column < otherPos.column)
-                            newPos.column += lengthDiff;
-                        this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));
-                    }
-                }
-                if(range.start.column === this.pos.column && delta.action === "insertText") {
-                    setTimeout(function() {
-                        this.pos.setPosition(this.pos.row, this.pos.column - lengthDiff);
-                        for (var i = 0; i < this.others.length; i++) {
-                            var other = this.others[i];
-                            var newPos = {row: other.row, column: other.column - lengthDiff};
-                            if(other.row === range.start.row && range.start.column < other.column)
-                                newPos.column += lengthDiff;
-                            other.setPosition(newPos.row, newPos.column);
-                        }
-                    }.bind(this), 0);
-                }
-                else if(range.start.column === this.pos.column && delta.action === "removeText") {
-                    setTimeout(function() {
-                        for (var i = 0; i < this.others.length; i++) {
-                            var other = this.others[i];
-                            if(other.row === range.start.row && range.start.column < other.column) {
-                                other.setPosition(other.row, other.column - lengthDiff);
-                            }
-                        }
-                    }.bind(this), 0);
-                }
-            }
-            this.pos._emit("change", {value: this.pos});
-            for (var i = 0; i < this.others.length; i++) {
-                this.others[i]._emit("change", {value: this.others[i]});
-            }
-        }
-        this.$updating = false;
-    };
-
-    this.onCursorChange = function(event) {
-        if (this.$updating) return;
-        var pos = this.session.selection.getCursor();
-        if(pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {
-            this.showOtherMarkers();
-            this._emit("cursorEnter", event);
-        } else {
-            this.hideOtherMarkers();
-            this._emit("cursorLeave", event);
-        }
-    };    
-    this.detach = function() {
-        this.session.removeMarker(this.markerId);
-        this.hideOtherMarkers();
-        this.doc.removeEventListener("change", this.$onUpdate);
-        this.session.selection.removeEventListener("changeCursor", this.$onCursorChange);
-        this.pos.detach();
-        for (var i = 0; i < this.others.length; i++) {
-            this.others[i].detach();
-        }
-        this.session.setUndoSelect(true);
-    };
-    this.cancel = function() {
-        if(this.$undoStackDepth === -1)
-            throw Error("Canceling placeholders only supported with undo manager attached to session.");
-        var undoManager = this.session.getUndoManager();
-        var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;
-        for (var i = 0; i < undosRequired; i++) {
-            undoManager.undo(true);
-        }
-    };
-}).call(PlaceHolder.prototype);
-
-
-exports.PlaceHolder = PlaceHolder;
-});
-
-define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-
-(function() {
-
-    this.foldingStartMarker = null;
-    this.foldingStopMarker = null;
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        if (this.foldingStartMarker.test(line))
-            return "start";
-        if (foldStyle == "markbeginend"
-                && this.foldingStopMarker
-                && this.foldingStopMarker.test(line))
-            return "end";
-        return "";
-    };
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        return null;
-    };
-
-    this.indentationBlock = function(session, row, column) {
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1)
-            return;
-
-        var startColumn = column || line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            var level = session.getLine(row).search(re);
-
-            if (level == -1)
-                continue;
-
-            if (level <= startLevel)
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-
-    this.openingBracketBlock = function(session, bracket, row, column, typeRe) {
-        var start = {row: row, column: column + 1};
-        var end = session.$findClosingBracket(bracket, start, typeRe);
-        if (!end)
-            return;
-
-        var fw = session.foldWidgets[end.row];
-        if (fw == null)
-            fw = this.getFoldWidget(session, end.row);
-
-        if (fw == "start" && end.row > start.row) {
-            end.row --;
-            end.column = session.getLine(end.row).length;
-        }
-        return Range.fromPoints(start, end);
-    };
-
-    this.closingBracketBlock = function(session, bracket, row, column, typeRe) {
-        var end = {row: row, column: column};
-        var start = session.$findOpeningBracket(bracket, end);
-
-        if (!start)
-            return;
-
-        start.column++;
-        end.column--;
-
-        return  Range.fromPoints(start, end);
-    };
-}).call(FoldMode.prototype);
-
-});
-
-define('ace/theme/textmate', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-
-exports.isDark = false;
-exports.cssClass = "ace-tm";
-exports.cssText = ".ace-tm .ace_gutter {\
-background: #f0f0f0;\
-color: #333;\
-}\
-.ace-tm .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8;\
-}\
-.ace-tm .ace_fold {\
-background-color: #6B72E6;\
-}\
-.ace-tm {\
-background-color: #FFFFFF;\
-}\
-.ace-tm .ace_cursor {\
-border-left: 2px solid black;\
-}\
-.ace-tm .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid black;\
-}\
-.ace-tm .ace_invisible {\
-color: rgb(191, 191, 191);\
-}\
-.ace-tm .ace_storage,\
-.ace-tm .ace_keyword {\
-color: blue;\
-}\
-.ace-tm .ace_constant {\
-color: rgb(197, 6, 11);\
-}\
-.ace-tm .ace_constant.ace_buildin {\
-color: rgb(88, 72, 246);\
-}\
-.ace-tm .ace_constant.ace_language {\
-color: rgb(88, 92, 246);\
-}\
-.ace-tm .ace_constant.ace_library {\
-color: rgb(6, 150, 14);\
-}\
-.ace-tm .ace_invalid {\
-background-color: rgba(255, 0, 0, 0.1);\
-color: red;\
-}\
-.ace-tm .ace_support.ace_function {\
-color: rgb(60, 76, 114);\
-}\
-.ace-tm .ace_support.ace_constant {\
-color: rgb(6, 150, 14);\
-}\
-.ace-tm .ace_support.ace_type,\
-.ace-tm .ace_support.ace_class {\
-color: rgb(109, 121, 222);\
-}\
-.ace-tm .ace_keyword.ace_operator {\
-color: rgb(104, 118, 135);\
-}\
-.ace-tm .ace_string {\
-color: rgb(3, 106, 7);\
-}\
-.ace-tm .ace_comment {\
-color: rgb(76, 136, 107);\
-}\
-.ace-tm .ace_comment.ace_doc {\
-color: rgb(0, 102, 255);\
-}\
-.ace-tm .ace_comment.ace_doc.ace_tag {\
-color: rgb(128, 159, 191);\
-}\
-.ace-tm .ace_constant.ace_numeric {\
-color: rgb(0, 0, 205);\
-}\
-.ace-tm .ace_variable {\
-color: rgb(49, 132, 149);\
-}\
-.ace-tm .ace_xml-pe {\
-color: rgb(104, 104, 91);\
-}\
-.ace-tm .ace_entity.ace_name.ace_function {\
-color: #0000A2;\
-}\
-.ace-tm .ace_markup.ace_heading {\
-color: rgb(12, 7, 255);\
-}\
-.ace-tm .ace_markup.ace_list {\
-color:rgb(185, 6, 144);\
-}\
-.ace-tm .ace_meta.ace_tag {\
-color:rgb(0, 22, 142);\
-}\
-.ace-tm .ace_string.ace_regex {\
-color: rgb(255, 0, 0)\
-}\
-.ace-tm .ace_marker-layer .ace_selection {\
-background: rgb(181, 213, 255);\
-}\
-.ace-tm.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px white;\
-border-radius: 2px;\
-}\
-.ace-tm .ace_marker-layer .ace_step {\
-background: rgb(252, 255, 0);\
-}\
-.ace-tm .ace_marker-layer .ace_stack {\
-background: rgb(164, 229, 101);\
-}\
-.ace-tm .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgb(192, 192, 192);\
-}\
-.ace-tm .ace_marker-layer .ace_active-line {\
-background: rgba(0, 0, 0, 0.07);\
-}\
-.ace-tm .ace_gutter-active-line {\
-background-color : #dcdcdc;\
-}\
-.ace-tm .ace_marker-layer .ace_selected-word {\
-background: rgb(250, 250, 255);\
-border: 1px solid rgb(200, 200, 250);\
-}\
-.ace-tm .ace_indent-guide {\
-background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
-}\
-";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
-;
-            (function() {
-                window.require(["ace/ace"], function(a) {
-                    a && a.config.init();
-                    if (!window.ace)
-                        window.ace = {};
-                    for (var key in a) if (a.hasOwnProperty(key))
-                        ace[key] = a[key];
-                });
-            })();
-        
\ No newline at end of file
diff --git a/try/ace/ext-emmet.js b/try/ace/ext-emmet.js
deleted file mode 100644
index bdf1a42..0000000
--- a/try/ace/ext-emmet.js
+++ /dev/null
@@ -1,270 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ext/emmet', ['require', 'exports', 'module' , 'ace/keyboard/hash_handler', 'ace/editor', 'ace/config'], function(require, exports, module) {
-
-var HashHandler = require("ace/keyboard/hash_handler").HashHandler;
-var Editor = require("ace/editor").Editor;
-var emmet;
-
-Editor.prototype.indexToPosition = function(index) {
-    return this.session.doc.indexToPosition(index);
-};
-
-Editor.prototype.positionToIndex = function(pos) {
-    return this.session.doc.positionToIndex(pos);
-};
-function AceEmmetEditor() {}
-
-AceEmmetEditor.prototype = {
-    setupContext: function(editor) {
-        this.ace = editor;
-        this.indentation = editor.session.getTabString();
-        if (!emmet)
-            emmet = window.emmet;
-        emmet.require("resources").setVariable("indentation", this.indentation);
-        this.$syntax = null;
-        this.$syntax = this.getSyntax();
-    },
-    getSelectionRange: function() {
-        var range = this.ace.getSelectionRange();
-        return {
-            start: this.ace.positionToIndex(range.start),
-            end: this.ace.positionToIndex(range.end)
-        };
-    },
-    createSelection: function(start, end) {
-        this.ace.selection.setRange({
-            start: this.ace.indexToPosition(start),
-            end: this.ace.indexToPosition(end)
-        });
-    },
-    getCurrentLineRange: function() {
-        var row = this.ace.getCursorPosition().row;
-        var lineLength = this.ace.session.getLine(row).length;
-        var index = this.ace.positionToIndex({row: row, column: 0});
-        return {
-            start: index,
-            end: index + lineLength
-        };
-    },
-    getCaretPos: function(){
-        var pos = this.ace.getCursorPosition();
-        return this.ace.positionToIndex(pos);
-    },
-    setCaretPos: function(index){
-        var pos = this.ace.indexToPosition(index);
-        this.ace.clearSelection();
-        this.ace.selection.moveCursorToPosition(pos);
-    },
-    getCurrentLine: function() {
-        var row = this.ace.getCursorPosition().row;
-        return this.ace.session.getLine(row);
-    },
-    replaceContent: function(value, start, end, noIndent) {
-        if (end == null)
-            end = start == null ? this.getContent().length : start;
-        if (start == null)
-            start = 0;
-        var utils = emmet.require("utils");
-        if (!noIndent) {
-            value = utils.padString(value, utils.getLinePaddingFromPosition(this.getContent(), start));
-        }
-        var tabstopData = emmet.require("tabStops").extract(value, {
-            escape: function(ch) {
-                return ch;
-            }
-        });
-
-        value = tabstopData.text;
-        var firstTabStop = tabstopData.tabstops[0];
-
-        if (firstTabStop) {
-            firstTabStop.start += start;
-            firstTabStop.end += start;
-        } else {
-            firstTabStop = {
-                start: value.length + start,
-                end: value.length + start
-            };
-        }
-
-        var range = this.ace.getSelectionRange();
-        range.start = this.ace.indexToPosition(start);
-        range.end = this.ace.indexToPosition(end);
-
-        this.ace.session.replace(range, value);
-
-        range.start = this.ace.indexToPosition(firstTabStop.start);
-        range.end = this.ace.indexToPosition(firstTabStop.end);
-        this.ace.selection.setRange(range);
-    },
-    getContent: function(){
-        return this.ace.getValue();
-    },
-    getSyntax: function() {
-        if (this.$syntax)
-            return this.$syntax;
-        var syntax = this.ace.session.$modeId.split("/").pop();
-        if (syntax == "html" || syntax == "php") {
-            var cursor = this.ace.getCursorPosition();
-            var state = this.ace.session.getState(cursor.row);
-            if (typeof state != "string")
-                state = state[0];
-            if (state) {
-                state = state.split("-");
-                if (state.length > 1)
-                    syntax = state[0];
-                else if (syntax == "php")
-                    syntax = "html";
-            }
-        }
-        return syntax;
-    },
-    getProfileName: function() {
-        switch(this.getSyntax()) {
-          case "css": return "css";
-          case "xml":
-          case "xsl":
-            return "xml";
-          case "html":
-            var profile = emmet.require("resources").getVariable("profile");
-            if (!profile)
-                profile = this.ace.session.getLines(0,2).join("").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? "xhtml": "html";
-            return profile;
-        }
-        return "xhtml";
-    },
-    prompt: function(title) {
-        return prompt(title);
-    },
-    getSelection: function() {
-        return this.ace.session.getTextRange();
-    },
-    getFilePath: function() {
-        return "";
-    }
-};
-
-
-var keymap = {
-    expand_abbreviation: {"mac": "ctrl+alt+e", "win": "alt+e"},
-    match_pair_outward: {"mac": "ctrl+d", "win": "ctrl+,"},
-    match_pair_inward: {"mac": "ctrl+j", "win": "ctrl+shift+0"},
-    matching_pair: {"mac": "ctrl+alt+j", "win": "alt+j"},
-    next_edit_point: "alt+right",
-    prev_edit_point: "alt+left",
-    toggle_comment: {"mac": "command+/", "win": "ctrl+/"},
-    split_join_tag: {"mac": "shift+command+'", "win": "shift+ctrl+`"},
-    remove_tag: {"mac": "command+'", "win": "shift+ctrl+;"},
-    evaluate_math_expression: {"mac": "shift+command+y", "win": "shift+ctrl+y"},
-    increment_number_by_1: "ctrl+up",
-    decrement_number_by_1: "ctrl+down",
-    increment_number_by_01: "alt+up",
-    decrement_number_by_01: "alt+down",
-    increment_number_by_10: {"mac": "alt+command+up", "win": "shift+alt+up"},
-    decrement_number_by_10: {"mac": "alt+command+down", "win": "shift+alt+down"},
-    select_next_item: {"mac": "shift+command+.", "win": "shift+ctrl+."},
-    select_previous_item: {"mac": "shift+command+,", "win": "shift+ctrl+,"},
-    reflect_css_value: {"mac": "shift+command+r", "win": "shift+ctrl+r"},
-
-    encode_decode_data_url: {"mac": "shift+ctrl+d", "win": "ctrl+'"},
-    expand_abbreviation_with_tab: "Tab",
-    wrap_with_abbreviation: {"mac": "shift+ctrl+a", "win": "shift+ctrl+a"}
-};
-
-var editorProxy = new AceEmmetEditor();
-exports.commands = new HashHandler();
-exports.runEmmetCommand = function(editor) {
-    editorProxy.setupContext(editor);
-    if (editorProxy.getSyntax() == "php")
-        return false;
-    var actions = emmet.require("actions");
-
-    if (this.action == "expand_abbreviation_with_tab") {
-        if (!editor.selection.isEmpty())
-            return false;
-    }
-    
-    if (this.action == "wrap_with_abbreviation") {
-        return setTimeout(function() {
-            actions.run("wrap_with_abbreviation", editorProxy);
-        }, 0);
-    }
-    
-    try {
-        var result = actions.run(this.action, editorProxy);
-    } catch(e) {
-        editor._signal("changeStatus", typeof e == "string" ? e : e.message);
-        console.log(e);
-    }
-    return result;
-};
-
-for (var command in keymap) {
-    exports.commands.addCommand({
-        name: "emmet:" + command,
-        action: command,
-        bindKey: keymap[command],
-        exec: exports.runEmmetCommand,
-        multiSelectAction: "forEach"
-    });
-}
-
-var onChangeMode = function(e, target) {
-    var editor = target;
-    if (!editor)
-        return;
-    var modeId = editor.session.$modeId;
-    var enabled = modeId && /css|less|sass|html|php/.test(modeId);
-    if (e.enableEmmet === false)
-        enabled = false;
-    if (enabled)
-        editor.keyBinding.addKeyboardHandler(exports.commands);
-    else
-        editor.keyBinding.removeKeyboardHandler(exports.commands);
-};
-
-
-exports.AceEmmetEditor = AceEmmetEditor;
-require("ace/config").defineOptions(Editor.prototype, "editor", {
-    enableEmmet: {
-        set: function(val) {
-            this[val ? "on" : "removeListener"]("changeMode", onChangeMode);
-            onChangeMode({enableEmmet: !!val}, this);
-        },
-        value: true
-    }
-});
-
-
-exports.setCore = function(e) {emmet = e;};
-});
-
diff --git a/try/ace/ext-keybinding_menu.js b/try/ace/ext-keybinding_menu.js
deleted file mode 100644
index 5dc24c6..0000000
--- a/try/ace/ext-keybinding_menu.js
+++ /dev/null
@@ -1,207 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl
- * All rights reserved.
- *
- * Contributed to Ajax.org under the BSD license.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ext/keybinding_menu', ['require', 'exports', 'module' , 'ace/editor', 'ace/ext/menu_tools/overlay_page', 'ace/ext/menu_tools/get_editor_keyboard_shortcuts'], function(require, exports, module) {
-    
-    var Editor = require("ace/editor").Editor;
-    function showKeyboardShortcuts (editor) {
-        if(!document.getElementById('kbshortcutmenu')) {
-            var overlayPage = require('./menu_tools/overlay_page').overlayPage;
-            var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;
-            var kb = getEditorKeybordShortcuts(editor);
-            var el = document.createElement('div');
-            var commands = kb.reduce(function(previous, current) {
-                return previous + '<div class="ace_optionsMenuEntry"><span class="ace_optionsMenuCommand">' 
-                    + current.command + '</span> : '
-                    + '<span class="ace_optionsMenuKey">' + current.key + '</span></div>';
-            }, '');
-
-            el.id = 'kbshortcutmenu';
-            el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';
-            overlayPage(editor, el, '0', '0', '0', null);
-        }
-    };
-    module.exports.init = function(editor) {
-        Editor.prototype.showKeyboardShortcuts = function() {
-            showKeyboardShortcuts(this);
-        };
-        editor.commands.addCommands([{
-            name: "showKeyboardShortcuts",
-            bindKey: {win: "Ctrl-Alt-h", mac: "Command-Alt-h"},
-            exec: function(editor, line) {
-                editor.showKeyboardShortcuts();
-            }
-        }]);
-    };
-
-});
-
-define('ace/ext/menu_tools/overlay_page', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-var dom = require("../../lib/dom");
-var cssText = "#ace_settingsmenu, #kbshortcutmenu {\
-background-color: #F7F7F7;\
-color: black;\
-box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\
-padding: 1em 0.5em 2em 1em;\
-overflow: auto;\
-position: absolute;\
-margin: 0;\
-bottom: 0;\
-right: 0;\
-top: 0;\
-z-index: 9991;\
-cursor: default;\
-}\
-.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\
-box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\
-background-color: rgba(255, 255, 255, 0.6);\
-color: black;\
-}\
-.ace_optionsMenuEntry:hover {\
-background-color: rgba(100, 100, 100, 0.1);\
--webkit-transition: all 0.5s;\
-transition: all 0.3s\
-}\
-.ace_closeButton {\
-background: rgba(245, 146, 146, 0.5);\
-border: 1px solid #F48A8A;\
-border-radius: 50%;\
-padding: 7px;\
-position: absolute;\
-right: -8px;\
-top: -8px;\
-z-index: 1000;\
-}\
-.ace_closeButton{\
-background: rgba(245, 146, 146, 0.9);\
-}\
-.ace_optionsMenuKey {\
-color: darkslateblue;\
-font-weight: bold;\
-}\
-.ace_optionsMenuCommand {\
-color: darkcyan;\
-font-weight: normal;\
-}";
-dom.importCssString(cssText);
-module.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {
-    top = top ? 'top: ' + top + ';' : '';
-    bottom = bottom ? 'bottom: ' + bottom + ';' : '';
-    right = right ? 'right: ' + right + ';' : '';
-    left = left ? 'left: ' + left + ';' : '';
-
-    var closer = document.createElement('div');
-    var contentContainer = document.createElement('div');
-
-    function documentEscListener(e) {
-        if (e.keyCode === 27) {
-            closer.click();
-        }
-    }
-
-    closer.style.cssText = 'margin: 0; padding: 0; ' +
-        'position: fixed; top:0; bottom:0; left:0; right:0;' +
-        'z-index: 9990; ' +
-        'background-color: rgba(0, 0, 0, 0.3);';
-    closer.addEventListener('click', function() {
-        document.removeEventListener('keydown', documentEscListener);
-        closer.parentNode.removeChild(closer);
-        editor.focus();
-        closer = null;
-    });
-    document.addEventListener('keydown', documentEscListener);
-
-    contentContainer.style.cssText = top + right + bottom + left;
-    contentContainer.addEventListener('click', function(e) {
-        e.stopPropagation();
-    });
-
-    var wrapper = dom.createElement("div");
-    wrapper.style.position = "relative";
-    
-    var closeButton = dom.createElement("div");
-    closeButton.className = "ace_closeButton";
-    closeButton.addEventListener('click', function() {
-        closer.click();
-    });
-    
-    wrapper.appendChild(closeButton);
-    contentContainer.appendChild(wrapper);
-    
-    contentContainer.appendChild(contentElement);
-    closer.appendChild(contentContainer);
-    document.body.appendChild(closer);
-    editor.blur();
-};
-
-});
-
-define('ace/ext/menu_tools/get_editor_keyboard_shortcuts', ['require', 'exports', 'module' , 'ace/lib/keys'], function(require, exports, module) {
-
-var keys = require("../../lib/keys");
-module.exports.getEditorKeybordShortcuts = function(editor) {
-    var KEY_MODS = keys.KEY_MODS;
-    var keybindings = [];
-    var commandMap = {};
-    editor.keyBinding.$handlers.forEach(function(handler) {
-        var ckb = handler.commmandKeyBinding;
-        for (var i in ckb) {
-            var modifier = parseInt(i);
-            if (modifier == -1) {
-                modifier = "";
-            } else if(isNaN(modifier)) {
-                modifier = i;
-            } else {
-                modifier = "" +
-                    (modifier & KEY_MODS.command ? "Cmd-"   : "") +
-                    (modifier & KEY_MODS.ctrl    ? "Ctrl-"  : "") +
-                    (modifier & KEY_MODS.alt     ? "Alt-"   : "") +
-                    (modifier & KEY_MODS.shift   ? "Shift-" : "");
-            }
-            for (var key in ckb[i]) {
-                var command = ckb[i][key]
-                if (typeof command != "string")
-                    command  = command.name
-                if (commandMap[command]) {
-                    commandMap[command].key += "|" + modifier + key;
-                } else {
-                    commandMap[command] = {key: modifier+key, command: command};
-                    keybindings.push(commandMap[command]);
-                }
-            }
-        }
-    });
-    return keybindings;
-};
-
-});
\ No newline at end of file
diff --git a/try/ace/ext-modelist.js b/try/ace/ext-modelist.js
deleted file mode 100644
index 5cb1f8d..0000000
--- a/try/ace/ext-modelist.js
+++ /dev/null
@@ -1,157 +0,0 @@
-define('ace/ext/modelist', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var modes = [];
-function getModeForPath(path) {
-    var mode = modesByName.text;
-    var fileName = path.split(/[\/\\]/).pop();
-    for (var i = 0; i < modes.length; i++) {
-        if (modes[i].supportsFile(fileName)) {
-            mode = modes[i];
-            break;
-        }
-    }
-    return mode;
-}
-
-var Mode = function(name, caption, extensions) {
-    this.name = name;
-    this.caption = caption;
-    this.mode = "ace/mode/" + name;
-    this.extensions = extensions;
-    if (/\^/.test(extensions)) {
-        var re = extensions.replace(/\|(\^)?/g, function(a, b){
-            return "$|" + (b ? "^" : "^.*\\.");
-        }) + "$";
-    } else {
-        var re = "^.*\\.(" + extensions + ")$";
-    }
-
-    this.extRe = new RegExp(re, "gi");
-};
-
-Mode.prototype.supportsFile = function(filename) {
-    return filename.match(this.extRe);
-};
-var supportedModes = {
-    ABAP:        ["abap"],
-    ADA:         ["ada|adb"],
-    ActionScript:["as"],
-    AsciiDoc:    ["asciidoc"],
-    Assembly_x86:["asm"],
-    AutoHotKey:  ["ahk"],
-    BatchFile:   ["bat|cmd"],
-    C9Search:    ["c9search_results"],
-    C_Cpp:       ["c|cc|cpp|cxx|h|hh|hpp"],
-    Clojure:     ["clj"],
-    Cobol:       ["^CBL|COB"],
-    coffee:      ["^Cakefile|coffee|cf|cson"],
-    ColdFusion:  ["cfm"],
-    CSharp:      ["cs"],
-    CSS:         ["css"],
-    Curly:       ["curly"],
-    D:           ["d|di"],
-    Dart:        ["dart"],
-    Diff:        ["diff|patch"],
-    Dot:         ["dot"],
-    Erlang:      ["erl|hrl"],
-    EJS:         ["ejs"],
-    Forth:       ["frt|fs|ldr"],
-    FreeMarker:  ["ftl"],
-    Glsl:        ["glsl|frag|vert"],
-    golang:      ["go"],
-    Groovy:      ["groovy"],
-    HAML:        ["haml"],
-    Haskell:     ["hs"],
-    haXe:        ["hx"],
-    HTML:        ["htm|html|xhtml"],
-    HTML_Ruby:   ["erb|rhtml|html.erb"],
-    Ini:         ["Ini|conf"],
-    Jade:        ["jade"],
-    Java:        ["java"],
-    JavaScript:  ["js"],
-    JSON:        ["json"],
-    JSONiq:      ["jq"],
-    JSP:         ["jsp"],
-    JSX:         ["jsx"],
-    Julia:       ["jl"],
-    LaTeX:       ["latex|tex|ltx|bib"],
-    LESS:        ["less"],
-    Liquid:      ["liquid"],
-    Lisp:        ["lisp"],
-    LiveScript:  ["ls"],
-    LogiQL:      ["logic|lql"],
-    LSL:         ["lsl"],
-    Lua:         ["lua"],
-    LuaPage:     ["lp"],
-    Lucene:      ["lucene"],
-    Makefile:    ["^GNUmakefile|^makefile|^Makefile|^OCamlMakefile|make"],
-    MATLAB:      ["matlab"],
-    Markdown:    ["md|markdown"],
-    MySQL:       ["mysql"],
-    MUSHCode:    ["mc|mush"],
-    ObjectiveC:  ["m|mm"],
-    OCaml:       ["ml|mli"],
-    Pascal:      ["pas|p"],
-    Perl:        ["pl|pm"],
-    pgSQL:       ["pgsql"],
-    PHP:         ["php|phtml"],
-    Powershell:  ["ps1"],
-    Prolog:      ["plg|prolog"],
-    Properties:  ["properties"],
-    Python:      ["py"],
-    R:           ["r"],
-    RDoc:        ["Rd"],
-    RHTML:       ["Rhtml"],
-    Ruby:        ["ru|gemspec|rake|rb"],
-    Rust:        ["rs"],
-    SASS:        ["sass"],
-    SCAD:        ["scad"],
-    Scala:       ["scala"],
-    Scheme:      ["scm|rkt"],
-    SCSS:        ["scss"],
-    SH:          ["sh|bash"],
-    snippets:    ["snippets"],
-    SQL:         ["sql"],
-    Stylus:      ["styl|stylus"],
-    SVG:         ["svg"],
-    Tcl:         ["tcl"],
-    Tex:         ["tex"],
-    Text:        ["txt"],
-    Textile:     ["textile"],
-    Toml:        ["toml"],
-    Twig:        ["twig"],
-    Typescript:  ["typescript|ts|str"],
-    VBScript:    ["vbs"],
-    Velocity:    ["vm"],
-    XML:         ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],
-    XQuery:      ["xq"],
-    YAML:        ["yaml"]
-};
-
-var nameOverrides = {
-    ObjectiveC: "Objective-C",
-    CSharp: "C#",
-    golang: "Go",
-    C_Cpp: "C/C++",
-    coffee: "CoffeeScript",
-    HTML_Ruby: "HTML (Ruby)"
-};
-var modesByName = {};
-for (var name in supportedModes) {
-    var data = supportedModes[name];
-    var displayName = nameOverrides[name] || name;
-    var filename = name.toLowerCase();
-    var mode = new Mode(filename, displayName, data[0]);
-    modesByName[filename] = mode;
-    modes.push(mode);
-}
-
-module.exports = {
-    getModeForPath: getModeForPath,
-    modes: modes,
-    modesByName: modesByName
-};
-
-});
-
diff --git a/try/ace/ext-options.js b/try/ace/ext-options.js
deleted file mode 100644
index 9086a16..0000000
--- a/try/ace/ext-options.js
+++ /dev/null
@@ -1,252 +0,0 @@
-define('ace/ext/options', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var modesByName = modelist.modesByName;
-
-var options = [
-    ["Document", function(name) {
-        doclist.loadDoc(name, function(session) {
-            if (!session)
-                return;
-            session = env.split.setSession(session);
-            updateUIEditorOptions();
-            env.editor.focus();
-        });
-    }, doclist.all],
-	["Mode", function(value) {
-        env.editor.session.setMode(modesByName[value].mode || modesByName.text.mode);
-        env.editor.session.modeName = value;
-	}, function(value) {
-		return env.editor.session.modeName || "text"
-	}, modelist.modes],
-	["Split", function(value) {
-		var sp = env.split;
-		if (value == "none") {
-			if (sp.getSplits() == 2) {
-				env.secondSession = sp.getEditor(1).session;
-        }
-        sp.setSplits(1);
-    } else {
-        var newEditor = (sp.getSplits() == 1);
-        if (value == "below") {
-            sp.setOrientation(sp.BELOW);
-        } else {
-            sp.setOrientation(sp.BESIDE);
-        }
-        sp.setSplits(2);
-
-        if (newEditor) {
-				var session = env.secondSession || sp.getEditor(0).session;
-            var newSession = sp.setSession(session, 1);
-            newSession.name = session.name;
-        }
-    }
-	}, ["None", "Beside", "Below"]],
-	["Theme", function(value) {
-		if (!value)
-			return;
-		env.editor.setTheme("ace/theme/" + value);
-		themeEl.selectedValue = value;
-	}, function() {
-		return env.editor.getTheme();
-	}, {
-		"Bright": {
-            chrome: "Chrome",
-            clouds: "Clouds",
-            crimson_editor: "Crimson Editor",
-            dawn: "Dawn",
-            dreamweaver: "Dreamweaver",
-            eclipse: "Eclipse",
-            github: "GitHub",
-            solarized_light: "Solarized Light",
-            textmate: "TextMate",
-            tomorrow: "Tomorrow",
-            xcode: "XCode"
-        },
-        "Dark": {
-            ambiance: "Ambiance",
-            chaos: "Chaos",
-            clouds_midnight: "Clouds Midnight",
-            cobalt: "Cobalt",
-            idle_fingers: "idleFingers",
-            kr_theme: "krTheme",
-            merbivore: "Merbivore",
-            merbivore_soft: "Merbivore Soft",
-            mono_industrial: "Mono Industrial",
-            monokai: "Monokai",
-            pastel_on_dark: "Pastel on dark",
-            solarized_dark: "Solarized Dark",
-            twilight: "Twilight",
-            tomorrow_night: "Tomorrow Night",
-            tomorrow_night_blue: "Tomorrow Night Blue",
-            tomorrow_night_bright: "Tomorrow Night Bright",
-            tomorrow_night_eighties: "Tomorrow Night 80s",
-            vibrant_ink: "Vibrant Ink",
-        }
-	}],
-	["Code Folding", function(value) {
-		env.editor.getSession().setFoldStyle(value);
-		env.editor.setShowFoldWidgets(value !== "manual");
-	}, ["manual", "mark begin", "mark begin and end"]],
-	["Soft Wrap", function(value) {
-		value = value.toLowerCase()
-		var session = env.editor.getSession();
-		var renderer = env.editor.renderer;
-		session.setUseWrapMode(value == "off");
-		var col = parseInt(value) || null;
-		renderer.setPrintMarginColumn(col || 80);
-		session.setWrapLimitRange(col, col);
-	}, ["Off", "40 Chars", "80 Chars", "Free"]],
-	["Key Binding", function(value) {
-		env.editor.setKeyboardHandler(keybindings[value]);
-	}, ["Ace", "Vim", "Emacs", "Custom"]],
-	["Font Size", function(value) {
-		env.split.setFontSize(value + "px");
-	}, [10, 11, 12, 14, 16, 20, 24]],
-    ["Full Line Selection", function(checked) {
-		env.editor.setSelectionStyle(checked ? "line" : "text");
-	}],
-	["Highlight Active Line", function(checked) {
-		env.editor.setHighlightActiveLine(checked);
-	}],
-	["Show Invisibles", function(checked) {
-		env.editor.setShowInvisibles(checked);
-	}],
-	["Show Gutter", function(checked) {
-		env.editor.renderer.setShowGutter(checked);
-	}],
-    ["Show Indent Guides", function(checked) {
-		env.editor.renderer.setDisplayIndentGuides(checked);
-	}],
-	["Show Print Margin", function(checked) {
-		env.editor.renderer.setShowPrintMargin(checked);
-	}],
-	["Persistent HScroll", function(checked) {
-		env.editor.renderer.setHScrollBarAlwaysVisible(checked);
-	}],
-	["Animate Scrolling", function(checked) {
-		env.editor.setAnimatedScroll(checked);
-	}],
-	["Use Soft Tab", function(checked) {
-		env.editor.getSession().setUseSoftTabs(checked);
-	}],
-	["Highlight Selected Word", function(checked) {
-		env.editor.setHighlightSelectedWord(checked);
-	}],
-	["Enable Behaviours", function(checked) {
-		env.editor.setBehavioursEnabled(checked);
-	}],
-	["Fade Fold Widgets", function(checked) {
-		env.editor.setFadeFoldWidgets(checked);
-	}],
-	["Show Token info", function(checked) {
-		env.editor.setFadeFoldWidgets(checked);
-	}]
-]
-
-var createOptionsPanel = function(options) {
-	var html = []
-	var container = document.createElement("div");
-	container.style.cssText = "position: absolute; overflow: hidden";
-	var inner = document.createElement("div");
-	inner.style.cssText = "width: 120%;height:100%;overflow: scroll";
-	container.appendChild(inner);
-	html.push("<table><tbody>");
-	
-	options.forEach(function(o) {
-		
-    });
-
-	html.push(
-		'<tr>',
-		  '<td>',
-			'<label for="', s,'"></label>',
-		  '</td><td>',
-			'<input type="', s,'" name="', s,'" id="',s ,'">',
-		  '</td>',
-		'</tr>'
-	)
-	html.push("</tbody></table>");	
-	return container;
-}
-
-function bindCheckbox(id, callback) {
-    var el = document.getElementById(id);
-    if (localStorage && localStorage.getItem(id))
-        el.checked = localStorage.getItem(id) == "1";
-
-    var onCheck = function() {
-        callback(!!el.checked);
-        saveOption(el);
-    };
-    el.onclick = onCheck;
-    onCheck();
-}
-
-function bindDropdown(id, callback) {
-    var el = document.getElementById(id);
-    if (localStorage && localStorage.getItem(id))
-        el.value = localStorage.getItem(id);
-
-    var onChange = function() {
-        callback(el.value);
-        saveOption(el);
-    };
-
-    el.onchange = onChange;
-    onChange();
-}
-
-function fillOptgroup(list, el) {
-    list.forEach(function(item) {
-        var option = document.createElement("option");
-        option.setAttribute("value", item.name);
-        option.innerHTML = item.desc;
-        el.appendChild(option);
-    });
-}
-
-function fillDropdown(list, el) {
-	if (Array.isArray(list)) {
-		fillOptgroup(list, el);
-		return;
-	}
-	for(var i in list) {
-		var group = document.createElement("optgroup");
-		group.setAttribute("label", i);
-		fillOptgroup(list[i], group);
-		el.appendChild(group);
-	}
-}
-
-function createOptionControl(opt) {
-    if (opt.values) {
-        var el = dom.createElement("select");
-        el.setAttribute("size", opt.visibleSize || 1);
-        fillDropdown(opt.values, el)        
-    } else {
-        var el = dom.createElement("checkbox");
-    }
-    el.setAttribute("name", "opt_" + opt.name)
-    return el;
-}
-
-function createOptionCell(opt) {
-    if (opt.values) {
-        var el = dom.createElement("select");
-        el.setAttribute("size", opt.visibleSize || 1);
-        fillDropdown(opt.values, el)        
-    } else {
-        var el = dom.createElement("checkbox");
-    }
-    el.setAttribute("name", "opt_" + opt.name)
-    return el;
-}
-
-
-createOptionsPanel(options)
-
-
-
-});
-
diff --git a/try/ace/ext-settings_menu.js b/try/ace/ext-settings_menu.js
deleted file mode 100644
index e00a433..0000000
--- a/try/ace/ext-settings_menu.js
+++ /dev/null
@@ -1,625 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl
- * All rights reserved.
- *
- * Contributed to Ajax.org under the BSD license.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ext/settings_menu', ['require', 'exports', 'module' , 'ace/ext/menu_tools/generate_settings_menu', 'ace/ext/menu_tools/overlay_page', 'ace/editor'], function(require, exports, module) {
-
-var generateSettingsMenu = require('./menu_tools/generate_settings_menu').generateSettingsMenu;
-var overlayPage = require('./menu_tools/overlay_page').overlayPage;
-function showSettingsMenu(editor) {
-    var sm = document.getElementById('ace_settingsmenu');
-    if (!sm)    
-        overlayPage(editor, generateSettingsMenu(editor), '0', '0', '0');
-}
-module.exports.init = function(editor) {
-    var Editor = require("ace/editor").Editor;
-    Editor.prototype.showSettingsMenu = function() {
-        showSettingsMenu(this);
-    };
-};
-});
-
-define('ace/ext/menu_tools/generate_settings_menu', ['require', 'exports', 'module' , 'ace/ext/menu_tools/element_generator', 'ace/ext/menu_tools/add_editor_menu_options', 'ace/ext/menu_tools/get_set_functions'], function(require, exports, module) {
-
-var egen = require('./element_generator');
-var addEditorMenuOptions = require('./add_editor_menu_options').addEditorMenuOptions;
-var getSetFunctions = require('./get_set_functions').getSetFunctions;
-module.exports.generateSettingsMenu = function generateSettingsMenu (editor) {
-    var elements = [];
-    function cleanupElementsList() {
-        elements.sort(function(a, b) {
-            var x = a.getAttribute('contains');
-            var y = b.getAttribute('contains');
-            return x.localeCompare(y);
-        });
-    }
-    function wrapElements() {
-        var topmenu = document.createElement('div');
-        topmenu.setAttribute('id', 'ace_settingsmenu');
-        elements.forEach(function(element) {
-            topmenu.appendChild(element);
-        });
-        return topmenu;
-    }
-    function createNewEntry(obj, clss, item, val) {
-        var el;
-        var div = document.createElement('div');
-        div.setAttribute('contains', item);
-        div.setAttribute('class', 'ace_optionsMenuEntry');
-        div.setAttribute('style', 'clear: both;');
-
-        div.appendChild(egen.createLabel(
-            item.replace(/^set/, '').replace(/([A-Z])/g, ' $1').trim(),
-            item
-        ));
-
-        if (Array.isArray(val)) {
-            el = egen.createSelection(item, val, clss);
-            el.addEventListener('change', function(e) {
-                try{
-                    editor.menuOptions[e.target.id].forEach(function(x) {
-                        if(x.textContent !== e.target.textContent) {
-                            delete x.selected;
-                        }
-                    });
-                    obj[e.target.id](e.target.value);
-                } catch (err) {
-                    throw new Error(err);
-                }
-            });
-        } else if(typeof val === 'boolean') {
-            el = egen.createCheckbox(item, val, clss);
-            el.addEventListener('change', function(e) {
-                try{
-                    obj[e.target.id](!!e.target.checked);
-                } catch (err) {
-                    throw new Error(err);
-                }
-            });
-        } else {
-            el = egen.createInput(item, val, clss);
-            el.addEventListener('change', function(e) {
-                try{
-                    if(e.target.value === 'true') {
-                        obj[e.target.id](true);
-                    } else if(e.target.value === 'false') {
-                        obj[e.target.id](false);
-                    } else {
-                        obj[e.target.id](e.target.value);
-                    }
-                } catch (err) {
-                    throw new Error(err);
-                }
-            });
-        }
-        el.style.cssText = 'float:right;';
-        div.appendChild(el);
-        return div;
-    }
-    function makeDropdown(item, esr, clss, fn) {
-        var val = editor.menuOptions[item];
-        var currentVal = esr[fn]();
-        if (typeof currentVal == 'object')
-            currentVal = currentVal.$id;
-        val.forEach(function(valuex) {
-            if (valuex.value === currentVal)
-                valuex.selected = 'selected';
-        });
-        return createNewEntry(esr, clss, item, val);
-    }
-    function handleSet(setObj) {
-        var item = setObj.functionName;
-        var esr = setObj.parentObj;
-        var clss = setObj.parentName;
-        var val;
-        var fn = item.replace(/^set/, 'get');
-        if(editor.menuOptions[item] !== undefined) {
-            elements.push(makeDropdown(item, esr, clss, fn));
-        } else if(typeof esr[fn] === 'function') {
-            try {
-                val = esr[fn]();
-                if(typeof val === 'object') {
-                    val = val.$id;
-                }
-                elements.push(
-                    createNewEntry(esr, clss, item, val)
-                );
-            } catch (e) {
-            }
-        }
-    }
-    addEditorMenuOptions(editor);
-    getSetFunctions(editor).forEach(function(setObj) {
-        handleSet(setObj);
-    });
-    cleanupElementsList();
-    return wrapElements();
-};
-
-});
-
-define('ace/ext/menu_tools/element_generator', ['require', 'exports', 'module' ], function(require, exports, module) {
-module.exports.createOption = function createOption (obj) {
-    var attribute;
-    var el = document.createElement('option');
-    for(attribute in obj) {
-        if(obj.hasOwnProperty(attribute)) {
-            if(attribute === 'selected') {
-                el.setAttribute(attribute, obj[attribute]);
-            } else {
-                el[attribute] = obj[attribute];
-            }
-        }
-    }
-    return el;
-};
-module.exports.createCheckbox = function createCheckbox (id, checked, clss) {
-    var el = document.createElement('input');
-    el.setAttribute('type', 'checkbox');
-    el.setAttribute('id', id);
-    el.setAttribute('name', id);
-    el.setAttribute('value', checked);
-    el.setAttribute('class', clss);
-    if(checked) {
-        el.setAttribute('checked', 'checked');
-    }
-    return el;
-};
-module.exports.createInput = function createInput (id, value, clss) {
-    var el = document.createElement('input');
-    el.setAttribute('type', 'text');
-    el.setAttribute('id', id);
-    el.setAttribute('name', id);
-    el.setAttribute('value', value);
-    el.setAttribute('class', clss);
-    return el;
-};
-module.exports.createLabel = function createLabel (text, labelFor) {
-    var el = document.createElement('label');
-    el.setAttribute('for', labelFor);
-    el.textContent = text;
-    return el;
-};
-module.exports.createSelection = function createSelection (id, values, clss) {
-    var el = document.createElement('select');
-    el.setAttribute('id', id);
-    el.setAttribute('name', id);
-    el.setAttribute('class', clss);
-    values.forEach(function(item) {
-        el.appendChild(module.exports.createOption(item));
-    });
-    return el;
-};
-
-});
-
-define('ace/ext/menu_tools/add_editor_menu_options', ['require', 'exports', 'module' , 'ace/ext/modelist', 'ace/ext/themelist'], function(require, exports, module) {
-module.exports.addEditorMenuOptions = function addEditorMenuOptions (editor) {
-    var modelist = require('../modelist');
-    var themelist = require('../themelist');
-    editor.menuOptions = {
-        "setNewLineMode" : [{
-            "textContent" : "unix",
-            "value" : "unix"
-        }, {
-            "textContent" : "windows",
-            "value" : "windows"
-        }, {
-            "textContent" : "auto",
-            "value" : "auto"
-        }],
-        "setTheme" : [],
-        "setMode" : [],
-        "setKeyboardHandler": [{
-            "textContent" : "ace",
-            "value" : ""
-        }, {
-            "textContent" : "vim",
-            "value" : "ace/keyboard/vim"
-        }, {
-            "textContent" : "emacs",
-            "value" : "ace/keyboard/emacs"
-        }]
-    };
-
-    editor.menuOptions.setTheme = themelist.themes.map(function(theme) {
-        return {
-            'textContent' : theme.desc,
-            'value' : theme.theme
-        };
-    });
-
-    editor.menuOptions.setMode = modelist.modes.map(function(mode) {
-        return {
-            'textContent' : mode.name,
-            'value' : mode.mode
-        };
-    });
-};
-
-
-});define('ace/ext/modelist', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var modes = [];
-function getModeForPath(path) {
-    var mode = modesByName.text;
-    var fileName = path.split(/[\/\\]/).pop();
-    for (var i = 0; i < modes.length; i++) {
-        if (modes[i].supportsFile(fileName)) {
-            mode = modes[i];
-            break;
-        }
-    }
-    return mode;
-}
-
-var Mode = function(name, caption, extensions) {
-    this.name = name;
-    this.caption = caption;
-    this.mode = "ace/mode/" + name;
-    this.extensions = extensions;
-    if (/\^/.test(extensions)) {
-        var re = extensions.replace(/\|(\^)?/g, function(a, b){
-            return "$|" + (b ? "^" : "^.*\\.");
-        }) + "$";
-    } else {
-        var re = "^.*\\.(" + extensions + ")$";
-    }
-
-    this.extRe = new RegExp(re, "gi");
-};
-
-Mode.prototype.supportsFile = function(filename) {
-    return filename.match(this.extRe);
-};
-var supportedModes = {
-    ABAP:        ["abap"],
-    ADA:         ["ada|adb"],
-    ActionScript:["as"],
-    AsciiDoc:    ["asciidoc"],
-    Assembly_x86:["asm"],
-    AutoHotKey:  ["ahk"],
-    BatchFile:   ["bat|cmd"],
-    C9Search:    ["c9search_results"],
-    C_Cpp:       ["c|cc|cpp|cxx|h|hh|hpp"],
-    Clojure:     ["clj"],
-    Cobol:       ["^CBL|COB"],
-    coffee:      ["^Cakefile|coffee|cf|cson"],
-    ColdFusion:  ["cfm"],
-    CSharp:      ["cs"],
-    CSS:         ["css"],
-    Curly:       ["curly"],
-    D:           ["d|di"],
-    Dart:        ["dart"],
-    Diff:        ["diff|patch"],
-    Dot:         ["dot"],
-    Erlang:      ["erl|hrl"],
-    EJS:         ["ejs"],
-    Forth:       ["frt|fs|ldr"],
-    FreeMarker:  ["ftl"],
-    Glsl:        ["glsl|frag|vert"],
-    golang:      ["go"],
-    Groovy:      ["groovy"],
-    HAML:        ["haml"],
-    Haskell:     ["hs"],
-    haXe:        ["hx"],
-    HTML:        ["htm|html|xhtml"],
-    HTML_Ruby:   ["erb|rhtml|html.erb"],
-    Ini:         ["Ini|conf"],
-    Jade:        ["jade"],
-    Java:        ["java"],
-    JavaScript:  ["js"],
-    JSON:        ["json"],
-    JSONiq:      ["jq"],
-    JSP:         ["jsp"],
-    JSX:         ["jsx"],
-    Julia:       ["jl"],
-    LaTeX:       ["latex|tex|ltx|bib"],
-    LESS:        ["less"],
-    Liquid:      ["liquid"],
-    Lisp:        ["lisp"],
-    LiveScript:  ["ls"],
-    LogiQL:      ["logic|lql"],
-    LSL:         ["lsl"],
-    Lua:         ["lua"],
-    LuaPage:     ["lp"],
-    Lucene:      ["lucene"],
-    Makefile:    ["^GNUmakefile|^makefile|^Makefile|^OCamlMakefile|make"],
-    MATLAB:      ["matlab"],
-    Markdown:    ["md|markdown"],
-    MySQL:       ["mysql"],
-    MUSHCode:    ["mc|mush"],
-    ObjectiveC:  ["m|mm"],
-    OCaml:       ["ml|mli"],
-    Pascal:      ["pas|p"],
-    Perl:        ["pl|pm"],
-    pgSQL:       ["pgsql"],
-    PHP:         ["php|phtml"],
-    Powershell:  ["ps1"],
-    Prolog:      ["plg|prolog"],
-    Properties:  ["properties"],
-    Python:      ["py"],
-    R:           ["r"],
-    RDoc:        ["Rd"],
-    RHTML:       ["Rhtml"],
-    Ruby:        ["ru|gemspec|rake|rb"],
-    Rust:        ["rs"],
-    SASS:        ["sass"],
-    SCAD:        ["scad"],
-    Scala:       ["scala"],
-    Scheme:      ["scm|rkt"],
-    SCSS:        ["scss"],
-    SH:          ["sh|bash"],
-    snippets:    ["snippets"],
-    SQL:         ["sql"],
-    Stylus:      ["styl|stylus"],
-    SVG:         ["svg"],
-    Tcl:         ["tcl"],
-    Tex:         ["tex"],
-    Text:        ["txt"],
-    Textile:     ["textile"],
-    Toml:        ["toml"],
-    Twig:        ["twig"],
-    Typescript:  ["typescript|ts|str"],
-    VBScript:    ["vbs"],
-    Velocity:    ["vm"],
-    XML:         ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],
-    XQuery:      ["xq"],
-    YAML:        ["yaml"]
-};
-
-var nameOverrides = {
-    ObjectiveC: "Objective-C",
-    CSharp: "C#",
-    golang: "Go",
-    C_Cpp: "C/C++",
-    coffee: "CoffeeScript",
-    HTML_Ruby: "HTML (Ruby)"
-};
-var modesByName = {};
-for (var name in supportedModes) {
-    var data = supportedModes[name];
-    var displayName = nameOverrides[name] || name;
-    var filename = name.toLowerCase();
-    var mode = new Mode(filename, displayName, data[0]);
-    modesByName[filename] = mode;
-    modes.push(mode);
-}
-
-module.exports = {
-    getModeForPath: getModeForPath,
-    modes: modes,
-    modesByName: modesByName
-};
-
-});
-
-define('ace/ext/themelist', ['require', 'exports', 'module' , 'ace/ext/themelist_utils/themes'], function(require, exports, module) {
-module.exports.themes = require('ace/ext/themelist_utils/themes').themes;
-module.exports.ThemeDescription = function(name) {
-    this.name = name;
-    this.desc = name.split('_'
-        ).map(
-            function(namePart) {
-                return namePart[0].toUpperCase() + namePart.slice(1);
-            }
-        ).join(' ');
-    this.theme = "ace/theme/" + name;
-};
-
-module.exports.themesByName = {};
-
-module.exports.themes = module.exports.themes.map(function(name) {
-    module.exports.themesByName[name] = new module.exports.ThemeDescription(name);
-    return module.exports.themesByName[name];
-});
-
-});
-
-define('ace/ext/themelist_utils/themes', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-module.exports.themes = [
-    "ambiance",
-    "chaos",
-    "chrome",
-    "clouds",
-    "clouds_midnight",
-    "cobalt",
-    "crimson_editor",
-    "dawn",
-    "dreamweaver",
-    "eclipse",
-    "github",
-    "idle_fingers",
-    "kr_theme",
-    "merbivore",
-    "merbivore_soft",
-    "monokai",
-    "mono_industrial",
-    "pastel_on_dark",
-    "solarized_dark",
-    "solarized_light",
-    "terminal",
-    "textmate",
-    "tomorrow",
-    "tomorrow_night",
-    "tomorrow_night_blue",
-    "tomorrow_night_bright",
-    "tomorrow_night_eighties",
-    "twilight",
-    "vibrant_ink",
-    "xcode"
-];
-
-});
-
-define('ace/ext/menu_tools/get_set_functions', ['require', 'exports', 'module' ], function(require, exports, module) {
-module.exports.getSetFunctions = function getSetFunctions (editor) {
-    var out = [];
-    var my = {
-        'editor' : editor,
-        'session' : editor.session,
-        'renderer' : editor.renderer
-    };
-    var opts = [];
-    var skip = [
-        'setOption',
-        'setUndoManager',
-        'setDocument',
-        'setValue',
-        'setBreakpoints',
-        'setScrollTop',
-        'setScrollLeft',
-        'setSelectionStyle',
-        'setWrapLimitRange'
-    ];
-    ['renderer', 'session', 'editor'].forEach(function(esra) {
-        var esr = my[esra];
-        var clss = esra;
-        for(var fn in esr) {
-            if(skip.indexOf(fn) === -1) {
-                if(/^set/.test(fn) && opts.indexOf(fn) === -1) {
-                    opts.push(fn);
-                    out.push({
-                        'functionName' : fn,
-                        'parentObj' : esr,
-                        'parentName' : clss
-                    });
-                }
-            }
-        }
-    });
-    return out;
-};
-
-});
-
-define('ace/ext/menu_tools/overlay_page', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-var dom = require("../../lib/dom");
-var cssText = "#ace_settingsmenu, #kbshortcutmenu {\
-background-color: #F7F7F7;\
-color: black;\
-box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\
-padding: 1em 0.5em 2em 1em;\
-overflow: auto;\
-position: absolute;\
-margin: 0;\
-bottom: 0;\
-right: 0;\
-top: 0;\
-z-index: 9991;\
-cursor: default;\
-}\
-.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\
-box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\
-background-color: rgba(255, 255, 255, 0.6);\
-color: black;\
-}\
-.ace_optionsMenuEntry:hover {\
-background-color: rgba(100, 100, 100, 0.1);\
--webkit-transition: all 0.5s;\
-transition: all 0.3s\
-}\
-.ace_closeButton {\
-background: rgba(245, 146, 146, 0.5);\
-border: 1px solid #F48A8A;\
-border-radius: 50%;\
-padding: 7px;\
-position: absolute;\
-right: -8px;\
-top: -8px;\
-z-index: 1000;\
-}\
-.ace_closeButton{\
-background: rgba(245, 146, 146, 0.9);\
-}\
-.ace_optionsMenuKey {\
-color: darkslateblue;\
-font-weight: bold;\
-}\
-.ace_optionsMenuCommand {\
-color: darkcyan;\
-font-weight: normal;\
-}";
-dom.importCssString(cssText);
-module.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {
-    top = top ? 'top: ' + top + ';' : '';
-    bottom = bottom ? 'bottom: ' + bottom + ';' : '';
-    right = right ? 'right: ' + right + ';' : '';
-    left = left ? 'left: ' + left + ';' : '';
-
-    var closer = document.createElement('div');
-    var contentContainer = document.createElement('div');
-
-    function documentEscListener(e) {
-        if (e.keyCode === 27) {
-            closer.click();
-        }
-    }
-
-    closer.style.cssText = 'margin: 0; padding: 0; ' +
-        'position: fixed; top:0; bottom:0; left:0; right:0;' +
-        'z-index: 9990; ' +
-        'background-color: rgba(0, 0, 0, 0.3);';
-    closer.addEventListener('click', function() {
-        document.removeEventListener('keydown', documentEscListener);
-        closer.parentNode.removeChild(closer);
-        editor.focus();
-        closer = null;
-    });
-    document.addEventListener('keydown', documentEscListener);
-
-    contentContainer.style.cssText = top + right + bottom + left;
-    contentContainer.addEventListener('click', function(e) {
-        e.stopPropagation();
-    });
-
-    var wrapper = dom.createElement("div");
-    wrapper.style.position = "relative";
-    
-    var closeButton = dom.createElement("div");
-    closeButton.className = "ace_closeButton";
-    closeButton.addEventListener('click', function() {
-        closer.click();
-    });
-    
-    wrapper.appendChild(closeButton);
-    contentContainer.appendChild(wrapper);
-    
-    contentContainer.appendChild(contentElement);
-    closer.appendChild(contentContainer);
-    document.body.appendChild(closer);
-    editor.blur();
-};
-
-});
\ No newline at end of file
diff --git a/try/ace/ext-spellcheck.js b/try/ace/ext-spellcheck.js
deleted file mode 100644
index 7a818c6..0000000
--- a/try/ace/ext-spellcheck.js
+++ /dev/null
@@ -1,67 +0,0 @@
-define('ace/ext/spellcheck', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/editor', 'ace/config'], function(require, exports, module) {
-
-var event = require("../lib/event");
-
-exports.contextMenuHandler = function(e){
-    var host = e.target;
-    var text = host.textInput.getElement();
-    if (!host.selection.isEmpty())
-        return;
-    var c = host.getCursorPosition();
-    var r = host.session.getWordRange(c.row, c.column);
-    var w = host.session.getTextRange(r);
-
-    host.session.tokenRe.lastIndex = 0;
-    if (!host.session.tokenRe.test(w))
-        return;
-    var PLACEHOLDER = "\x01\x01";
-    var value = w + " " + PLACEHOLDER;
-    text.value = value;
-    text.setSelectionRange(w.length + 1, w.length + 1);
-    text.setSelectionRange(0, 0);
-
-    var afterKeydown = false;
-    event.addListener(text, "keydown", function onKeydown() {
-        event.removeListener(text, "keydown", onKeydown);
-        afterKeydown = true;
-    });
-
-    host.textInput.setInputHandler(function(newVal) {
-        console.log(newVal , value, text.selectionStart, text.selectionEnd)
-        if (newVal == value)
-            return '';
-        if (newVal.lastIndexOf(value, 0) === 0)
-            return newVal.slice(value.length);
-        if (newVal.substr(text.selectionEnd) == value)
-            return newVal.slice(0, -value.length);
-        if (newVal.slice(-2) == PLACEHOLDER) {
-            var val = newVal.slice(0, -2);
-            if (val.slice(-1) == " ") {
-                if (afterKeydown)
-                    return val.substring(0, text.selectionEnd);
-                val = val.slice(0, -1);
-                host.session.replace(r, val);
-                return "";
-            }
-        }
-
-        return newVal;
-    });
-};
-var Editor = require("../editor").Editor;
-require("../config").defineOptions(Editor.prototype, "editor", {
-    spellcheck: {
-        set: function(val) {
-            var text = this.textInput.getElement();
-            text.spellcheck = !!val;
-            if (!val)
-                this.removeListener("nativecontextmenu", exports.contextMenuHandler);
-            else
-                this.on("nativecontextmenu", exports.contextMenuHandler);
-        },
-        value: true
-    }
-});
-
-});
-
diff --git a/try/ace/ext-static_highlight.js b/try/ace/ext-static_highlight.js
deleted file mode 100644
index cf14b52..0000000
--- a/try/ace/ext-static_highlight.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ext/static_highlight', ['require', 'exports', 'module' , 'ace/edit_session', 'ace/layer/text', 'ace/config'], function(require, exports, module) {
-
-
-var EditSession = require("../edit_session").EditSession;
-var TextLayer = require("../layer/text").Text;
-var baseStyles = ".ace_editor {\
-font-family: 'Monaco', 'Menlo', 'Droid Sans Mono', 'Courier New', monospace;\
-font-size: 12px;\
-}\
-.ace_editor .ace_gutter {\
-width: 25px !important;\
-display: block;\
-float: left;\
-text-align: right;\
-padding: 0 3px 0 0;\
-margin-right: 3px;\
-}\
-.ace_line { clear: both; }\
-*.ace_gutter-cell {\
--moz-user-select: -moz-none;\
--khtml-user-select: none;\
--webkit-user-select: none;\
-user-select: none;\
-}";
-var config = require("../config");
-
-exports.render = function(input, mode, theme, lineStart, disableGutter, callback) {
-    var waiting = 0
-    if (typeof theme == "string") {
-        waiting++;
-        config.loadModule(['theme', theme], function(m) {
-            theme = m;
-            --waiting || done();
-        });
-    }
-
-    if (typeof mode == "string") {
-        waiting++;
-        config.loadModule(['mode', mode], function(m) {
-            mode = new m.Mode()
-            --waiting || done();
-        });
-    }
-    function done() {
-        var result = exports.renderSync(input, mode, theme, lineStart, disableGutter);
-        return callback ? callback(result) : result;
-    }
-    return waiting || done();
-};
-
-exports.renderSync = function(input, mode, theme, lineStart, disableGutter) {
-    lineStart = parseInt(lineStart || 1, 10);
-
-    var session = new EditSession("");
-    session.setUseWorker(false);
-    session.setMode(mode);
-
-    var textLayer = new TextLayer(document.createElement("div"));
-    textLayer.setSession(session);
-    textLayer.config = {
-        characterWidth: 10,
-        lineHeight: 20
-    };
-
-    session.setValue(input);
-
-    var stringBuilder = [];
-    var length =  session.getLength();
-
-    for(var ix = 0; ix < length; ix++) {
-        stringBuilder.push("<div class='ace_line'>");
-        if (!disableGutter)
-            stringBuilder.push("<span class='ace_gutter ace_gutter-cell' unselectable='on'>" + (ix + lineStart) + "</span>");
-        textLayer.$renderLine(stringBuilder, ix, true, false);
-        stringBuilder.push("</div>");
-    }
-    var html = "<div class=':cssClass'>\
-        <div class='ace_editor ace_scroller ace_text-layer'>\
-            :code\
-        </div>\
-    </div>".replace(/:cssClass/, theme.cssClass).replace(/:code/, stringBuilder.join(""));
-
-    textLayer.destroy();
-
-    return {
-        css: baseStyles + theme.cssText,
-        html: html
-    };
-};
-
-});
diff --git a/try/ace/ext-statusbar.js b/try/ace/ext-statusbar.js
deleted file mode 100644
index b751cca..0000000
--- a/try/ace/ext-statusbar.js
+++ /dev/null
@@ -1,47 +0,0 @@
-define('ace/ext/statusbar', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/lang'], function(require, exports, module) {
-var dom = require("ace/lib/dom");
-var lang = require("ace/lib/lang");
-
-var StatusBar = function(editor, parentNode) {
-    this.element = dom.createElement("div");
-    this.element.className = "ace_status-indicator";
-    this.element.style.cssText = "display: inline-block;";
-    parentNode.appendChild(this.element);
-
-    var statusUpdate = lang.delayedCall(function(){
-        this.updateStatus(editor)
-    }.bind(this));
-    editor.on("changeStatus", function() {
-        statusUpdate.schedule(100);
-    });
-    editor.on("changeSelection", function() {
-        statusUpdate.schedule(100);
-    });
-};
-
-(function(){
-    this.updateStatus = function(editor) {
-        var status = [];
-        function add(str, separator) {
-            str && status.push(str, separator || "|");
-        }
-
-        if (editor.$vimModeHandler)
-            add(editor.$vimModeHandler.getStatusText());
-        else if (editor.commands.recording)
-            add("REC");
-
-        var c = editor.selection.lead;
-        add(c.row + ":" + c.column, " ");
-        if (!editor.selection.isEmpty()) {
-            var r = editor.getSelectionRange();
-            add("(" + (r.end.row - r.start.row) + ":"  +(r.end.column - r.start.column) + ")");
-        }
-        status.pop();
-        this.element.textContent = status.join("");
-    };
-}).call(StatusBar.prototype);
-
-exports.StatusBar = StatusBar;
-
-});
\ No newline at end of file
diff --git a/try/ace/ext-textarea.js b/try/ace/ext-textarea.js
deleted file mode 100644
index 97bb51b..0000000
--- a/try/ace/ext-textarea.js
+++ /dev/null
@@ -1,492 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ext/textarea', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/useragent', 'ace/lib/net', 'ace/ace', 'ace/theme/textmate', 'ace/mode/text'], function(require, exports, module) {
-
-
-var event = require("../lib/event");
-var UA = require("../lib/useragent");
-var net = require("../lib/net");
-var ace = require("../ace");
-
-require("../theme/textmate");
-
-module.exports = exports = ace;
-var getCSSProperty = function(element, container, property) {
-    var ret = element.style[property];
-
-    if (!ret) {
-        if (window.getComputedStyle) {
-            ret = window.getComputedStyle(element, '').getPropertyValue(property);
-        } else {
-            ret = element.currentStyle[property];
-        }
-    }
-
-    if (!ret || ret == 'auto' || ret == 'intrinsic') {
-        ret = container.style[property];
-    }
-    return ret;
-};
-
-function applyStyles(elm, styles) {
-    for (var style in styles) {
-        elm.style[style] = styles[style];
-    }
-}
-
-function setupContainer(element, getValue) {
-    if (element.type != 'textarea') {
-        throw "Textarea required!";
-    }
-
-    var parentNode = element.parentNode;
-    var container = document.createElement('div');
-    var resizeEvent = function() {
-        var style = 'position:relative;';
-        [
-            'margin-top', 'margin-left', 'margin-right', 'margin-bottom'
-        ].forEach(function(item) {
-            style += item + ':' +
-                        getCSSProperty(element, container, item) + ';';
-        });
-        var width = getCSSProperty(element, container, 'width') || (element.clientWidth + "px");
-        var height = getCSSProperty(element, container, 'height')  || (element.clientHeight + "px");
-        style += 'height:' + height + ';width:' + width + ';';
-        style += 'display:inline-block;';
-        container.setAttribute('style', style);
-    };
-    event.addListener(window, 'resize', resizeEvent);
-    resizeEvent();
-    parentNode.insertBefore(container, element.nextSibling);
-    while (parentNode !== document) {
-        if (parentNode.tagName.toUpperCase() === 'FORM') {
-            var oldSumit = parentNode.onsubmit;
-            parentNode.onsubmit = function(evt) {
-                element.value = getValue();
-                if (oldSumit) {
-                    oldSumit.call(this, evt);
-                }
-            };
-            break;
-        }
-        parentNode = parentNode.parentNode;
-    }
-    return container;
-}
-
-exports.transformTextarea = function(element, loader) {
-    var session;
-    var container = setupContainer(element, function() {
-        return session.getValue();
-    });
-    element.style.display = 'none';
-    container.style.background = 'white';
-    var editorDiv = document.createElement("div");
-    applyStyles(editorDiv, {
-        top: "0px",
-        left: "0px",
-        right: "0px",
-        bottom: "0px",
-        border: "1px solid gray",
-        position: "absolute"
-    });
-    container.appendChild(editorDiv);
-
-    var settingOpener = document.createElement("div");
-    applyStyles(settingOpener, {
-        position: "absolute",
-        right: "0px",
-        bottom: "0px",
-        background: "red",
-        cursor: "nw-resize",
-        borderStyle: "solid",
-        borderWidth: "9px 8px 10px 9px",
-        width: "2px",
-        borderColor: "lightblue gray gray lightblue",
-        zIndex: 101
-    });
-
-    var settingDiv = document.createElement("div");
-    var settingDivStyles = {
-        top: "0px",
-        left: "20%",
-        right: "0px",
-        bottom: "0px",
-        position: "absolute",
-        padding: "5px",
-        zIndex: 100,
-        color: "white",
-        display: "none",
-        overflow: "auto",
-        fontSize: "14px",
-        boxShadow: "-5px 2px 3px gray"
-    };
-    if (!UA.isOldIE) {
-        settingDivStyles.backgroundColor = "rgba(0, 0, 0, 0.6)";
-    } else {
-        settingDivStyles.backgroundColor = "#333";
-    }
-
-    applyStyles(settingDiv, settingDivStyles);
-    container.appendChild(settingDiv);
-    var options = {};
-
-    var editor = ace.edit(editorDiv);
-    session = editor.getSession();
-
-    session.setValue(element.value || element.innerHTML);
-    editor.focus();
-    container.appendChild(settingOpener);
-    setupApi(editor, editorDiv, settingDiv, ace, options, loader);
-    setupSettingPanel(settingDiv, settingOpener, editor, options);
-
-    var state = "";
-    event.addListener(settingOpener, "mousemove", function(e) {
-        var rect = this.getBoundingClientRect();
-        var x = e.clientX - rect.left, y = e.clientY - rect.top;
-        if (x + y < (rect.width + rect.height)/2) {
-            this.style.cursor = "pointer";
-            state = "toggle";
-        } else {
-            state = "resize";
-            this.style.cursor = "nw-resize";
-        }
-    });
-
-    event.addListener(settingOpener, "mousedown", function(e) {
-        if (state == "toggle") {
-            editor.setDisplaySettings();
-            return;
-        }
-        container.style.zIndex = 100000;
-        var rect = container.getBoundingClientRect();
-        var startX = rect.width  + rect.left - e.clientX;
-        var startY = rect.height  + rect.top - e.clientY;
-        event.capture(settingOpener, function(e) {
-            container.style.width = e.clientX - rect.left + startX + "px";
-            container.style.height = e.clientY - rect.top + startY + "px";
-            editor.resize();
-        }, function() {});
-    });
-
-    return editor;
-};
-
-function load(url, module, callback) {
-    net.loadScript(url, function() {
-        require([module], callback);
-    });
-}
-
-function setupApi(editor, editorDiv, settingDiv, ace, options, loader) {
-    var session = editor.getSession();
-    var renderer = editor.renderer;
-    loader = loader || load;
-
-    function toBool(value) {
-        return value === "true" || value == true;
-    }
-
-    editor.setDisplaySettings = function(display) {
-        if (display == null)
-            display = settingDiv.style.display == "none";
-        if (display) {
-            settingDiv.style.display = "block";
-            settingDiv.hideButton.focus();
-            editor.on("focus", function onFocus() {
-                editor.removeListener("focus", onFocus);
-                settingDiv.style.display = "none"
-            });
-        } else {
-            editor.focus();
-        };
-    };
-
-    editor.setOption = function(key, value) {
-        if (options[key] == value) return;
-
-        switch (key) {
-            case "gutter":
-                renderer.setShowGutter(toBool(value));
-            break;
-
-            case "mode":
-                if (value != "text") {
-                    loader("mode-" + value + ".js", "ace/mode/" + value, function() {
-                        var aceMode = require("../mode/" + value).Mode;
-                        session.setMode(new aceMode());
-                    });
-                } else {
-                    session.setMode(new (require("../mode/text").Mode));
-                }
-            break;
-
-            case "theme":
-                if (value != "textmate") {
-                    loader("theme-" + value + ".js", "ace/theme/" + value, function() {
-                        editor.setTheme("ace/theme/" + value);
-                    });
-                } else {
-                    editor.setTheme("ace/theme/textmate");
-                }
-            break;
-
-            case "fontSize":
-                editorDiv.style.fontSize = value;
-            break;
-
-            case "keybindings":
-                switch (value) {
-                    case "vim":
-                        editor.setKeyboardHandler("ace/keyboard/vim");
-                        break;
-                    case "emacs":
-                        editor.setKeyboardHandler("ace/keyboard/emacs");
-                        break;
-                    default:
-                        editor.setKeyboardHandler(null);
-                }
-            break;
-
-            case "softWrap":
-                switch (value) {
-                    case "off":
-                        session.setUseWrapMode(false);
-                        renderer.setPrintMarginColumn(80);
-                    break;
-                    case "40":
-                        session.setUseWrapMode(true);
-                        session.setWrapLimitRange(40, 40);
-                        renderer.setPrintMarginColumn(40);
-                    break;
-                    case "80":
-                        session.setUseWrapMode(true);
-                        session.setWrapLimitRange(80, 80);
-                        renderer.setPrintMarginColumn(80);
-                    break;
-                    case "free":
-                        session.setUseWrapMode(true);
-                        session.setWrapLimitRange(null, null);
-                        renderer.setPrintMarginColumn(80);
-                    break;
-                }
-            break;
-
-            case "useSoftTabs":
-                session.setUseSoftTabs(toBool(value));
-            break;
-
-            case "showPrintMargin":
-                renderer.setShowPrintMargin(toBool(value));
-            break;
-
-            case "showInvisibles":
-                editor.setShowInvisibles(toBool(value));
-            break;
-        }
-
-        options[key] = value;
-    };
-
-    editor.getOption = function(key) {
-        return options[key];
-    };
-
-    editor.getOptions = function() {
-        return options;
-    };
-
-    for (var option in exports.options) {
-        editor.setOption(option, exports.options[option]);
-    }
-
-    return editor;
-}
-
-function setupSettingPanel(settingDiv, settingOpener, editor, options) {
-    var BOOL = null;
-
-    var desc = {
-        mode:            "Mode:",
-        gutter:          "Display Gutter:",
-        theme:           "Theme:",
-        fontSize:        "Font Size:",
-        softWrap:        "Soft Wrap:",
-        keybindings:     "Keyboard",
-        showPrintMargin: "Show Print Margin:",
-        useSoftTabs:     "Use Soft Tabs:",
-        showInvisibles:  "Show Invisibles"
-    };
-
-    var optionValues = {
-        mode: {
-            text:       "Plain",
-            javascript: "JavaScript",
-            xml:        "XML",
-            html:       "HTML",
-            css:        "CSS",
-            scss:       "SCSS",
-            python:     "Python",
-            php:        "PHP",
-            java:       "Java",
-            ruby:       "Ruby",
-            c_cpp:      "C/C++",
-            coffee:     "CoffeeScript",
-            json:       "json",
-            perl:       "Perl",
-            clojure:    "Clojure",
-            ocaml:      "OCaml",
-            csharp:     "C#",
-            haxe:       "haXe",
-            svg:        "SVG",
-            textile:    "Textile",
-            groovy:     "Groovy",
-            liquid:     "Liquid",
-            Scala:      "Scala"
-        },
-        theme: {
-            clouds:           "Clouds",
-            clouds_midnight:  "Clouds Midnight",
-            cobalt:           "Cobalt",
-            crimson_editor:   "Crimson Editor",
-            dawn:             "Dawn",
-            eclipse:          "Eclipse",
-            idle_fingers:     "Idle Fingers",
-            kr_theme:         "Kr Theme",
-            merbivore:        "Merbivore",
-            merbivore_soft:   "Merbivore Soft",
-            mono_industrial:  "Mono Industrial",
-            monokai:          "Monokai",
-            pastel_on_dark:   "Pastel On Dark",
-            solarized_dark:   "Solarized Dark",
-            solarized_light:  "Solarized Light",
-            textmate:         "Textmate",
-            twilight:         "Twilight",
-            vibrant_ink:      "Vibrant Ink"
-        },
-        gutter: BOOL,
-        fontSize: {
-            "10px": "10px",
-            "11px": "11px",
-            "12px": "12px",
-            "14px": "14px",
-            "16px": "16px"
-        },
-        softWrap: {
-            off:    "Off",
-            40:     "40",
-            80:     "80",
-            free:   "Free"
-        },
-        keybindings: {
-            ace: "ace",
-            vim: "vim",
-            emacs: "emacs"
-        },
-        showPrintMargin:    BOOL,
-        useSoftTabs:        BOOL,
-        showInvisibles:     BOOL
-    };
-
-    var table = [];
-    table.push("<table><tr><th>Setting</th><th>Value</th></tr>");
-
-    function renderOption(builder, option, obj, cValue) {
-        if (!obj) {
-            builder.push(
-                "<input type='checkbox' title='", option, "' ",
-                    cValue == "true" ? "checked='true'" : "",
-               "'></input>"
-            );
-            return
-        }
-        builder.push("<select title='" + option + "'>");
-        for (var value in obj) {
-            builder.push("<option value='" + value + "' ");
-
-            if (cValue == value) {
-                builder.push(" selected ");
-            }
-
-            builder.push(">",
-                obj[value],
-                "</option>");
-        }
-        builder.push("</select>");
-    }
-
-    for (var option in options) {
-        table.push("<tr><td>", desc[option], "</td>");
-        table.push("<td>");
-        renderOption(table, option, optionValues[option], options[option]);
-        table.push("</td></tr>");
-    }
-    table.push("</table>");
-    settingDiv.innerHTML = table.join("");
-
-    var onChange = function(e) {
-        var select = e.currentTarget;
-        editor.setOption(select.title, select.value);
-    };
-    var onClick = function(e) {
-        var cb = e.currentTarget;
-        editor.setOption(cb.title, cb.checked);
-    };
-    var selects = settingDiv.getElementsByTagName("select");
-    for (var i = 0; i < selects.length; i++)
-        selects[i].onchange = onChange;
-    var cbs = settingDiv.getElementsByTagName("input");
-    for (var i = 0; i < cbs.length; i++)
-        cbs[i].onclick = onClick;
-
-
-    var button = document.createElement("input");
-    button.type = "button";
-    button.value = "Hide";
-    event.addListener(button, "click", function() {
-        editor.setDisplaySettings(false);
-    });
-    settingDiv.appendChild(button);
-    settingDiv.hideButton = button;
-}
-exports.options = {
-    mode:               "text",
-    theme:              "textmate",
-    gutter:             "false",
-    fontSize:           "12px",
-    softWrap:           "off",
-    keybindings:        "ace",
-    showPrintMargin:    "false",
-    useSoftTabs:        "true",
-    showInvisibles:     "false"
-};
-
-});
diff --git a/try/ace/ext-themelist.js b/try/ace/ext-themelist.js
deleted file mode 100644
index 59fb23c..0000000
--- a/try/ace/ext-themelist.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl
- * All rights reserved.
- *
- * Contributed to Ajax.org under the BSD license.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ext/themelist', ['require', 'exports', 'module' , 'ace/ext/themelist_utils/themes'], function(require, exports, module) {
-module.exports.themes = require('ace/ext/themelist_utils/themes').themes;
-module.exports.ThemeDescription = function(name) {
-    this.name = name;
-    this.desc = name.split('_'
-        ).map(
-            function(namePart) {
-                return namePart[0].toUpperCase() + namePart.slice(1);
-            }
-        ).join(' ');
-    this.theme = "ace/theme/" + name;
-};
-
-module.exports.themesByName = {};
-
-module.exports.themes = module.exports.themes.map(function(name) {
-    module.exports.themesByName[name] = new module.exports.ThemeDescription(name);
-    return module.exports.themesByName[name];
-});
-
-});
-
-define('ace/ext/themelist_utils/themes', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-module.exports.themes = [
-    "ambiance",
-    "chaos",
-    "chrome",
-    "clouds",
-    "clouds_midnight",
-    "cobalt",
-    "crimson_editor",
-    "dawn",
-    "dreamweaver",
-    "eclipse",
-    "github",
-    "idle_fingers",
-    "kr_theme",
-    "merbivore",
-    "merbivore_soft",
-    "monokai",
-    "mono_industrial",
-    "pastel_on_dark",
-    "solarized_dark",
-    "solarized_light",
-    "terminal",
-    "textmate",
-    "tomorrow",
-    "tomorrow_night",
-    "tomorrow_night_blue",
-    "tomorrow_night_bright",
-    "tomorrow_night_eighties",
-    "twilight",
-    "vibrant_ink",
-    "xcode"
-];
-
-});
\ No newline at end of file
diff --git a/try/ace/ext-whitespace.js b/try/ace/ext-whitespace.js
deleted file mode 100644
index d696391..0000000
--- a/try/ace/ext-whitespace.js
+++ /dev/null
@@ -1,204 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/ext/whitespace', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
-
-
-var lang = require("../lib/lang");
-exports.$detectIndentation = function(lines, fallback) {
-    var stats = [];
-    var changes = [];
-    var tabIndents = 0;
-    var prevSpaces = 0;
-    var max = Math.min(lines.length, 1000);
-    for (var i = 0; i < max; i++) {
-        var line = lines[i];
-        if (!/^\s*[^*+\-\s]/.test(line))
-            continue;
-
-        var tabs = line.match(/^\t*/)[0].length;
-        if (line[0] == "\t")
-            tabIndents++;
-
-        var spaces = line.match(/^ */)[0].length;
-        if (spaces && line[spaces] != "\t") {
-            var diff = spaces - prevSpaces;
-            if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff))
-                changes[diff] = (changes[diff] || 0) + 1;
-
-            stats[spaces] = (stats[spaces] || 0) + 1;
-        }
-        prevSpaces = spaces;
-        while (line[line.length - 1] == "\\")
-            line = lines[i++];
-    };
-
-    function getScore(indent) {
-        var score = 0;
-        for (var i = indent; i < stats.length; i += indent)
-            score += stats[i] || 0;
-        return score;
-    }
-
-    var changesTotal = changes.reduce(function(a,b){return a+b}, 0);
-
-    var first = {score: 0, length: 0};
-    var spaceIndents = 0;
-    for (var i = 1; i < 12; i++) {
-        if (i == 1) {
-            spaceIndents = getScore(i);
-            var score = 1;
-        } else
-            var score = getScore(i) / spaceIndents;
-
-        if (changes[i]) {
-            score += changes[i] / changesTotal;
-        }
-
-        if (score > first.score)
-            first = {score: score, length: i};
-    }
-
-    if (first.score && first.score > 1.4)
-        var tabLength = first.length;
-
-    if (tabIndents > spaceIndents + 1)
-        return {ch: "\t", length: tabLength};
-
-    if (spaceIndents + 1 > tabIndents)
-        return {ch: " ", length: tabLength};
-};
-
-exports.detectIndentation = function(session) {
-    var lines = session.getLines(0, 1000);
-    var indent = exports.$detectIndentation(lines) || {};
-
-    if (indent.ch)
-        session.setUseSoftTabs(indent.ch == " ");
-
-    if (indent.length)
-        session.setTabSize(indent.length);
-    return indent;
-};
-
-exports.trimTrailingSpace = function(session) {
-    var doc = session.getDocument();
-    var lines = doc.getAllLines();
-
-    for (var i = 0, l=lines.length; i < l; i++) {
-        var line = lines[i];
-        var index = line.search(/\s+$/);
-
-        if (index !== -1)
-            doc.removeInLine(i, index, line.length);
-    }
-};
-
-exports.convertIndentation = function(session, ch, len) {
-    var oldCh = session.getTabString()[0];
-    var oldLen = session.getTabSize();
-    if (!len) len = oldLen;
-    if (!ch) ch = oldCh;
-
-    var tab = ch == "\t" ? ch: lang.stringRepeat(ch, len);
-
-    var doc = session.doc;
-    var lines = doc.getAllLines();
-
-    var cache = {};
-    var spaceCache = {};
-    for (var i = 0, l=lines.length; i < l; i++) {
-        var line = lines[i];
-        var match = line.match(/^\s*/)[0];
-        if (match) {
-            var w = session.$getStringScreenWidth(match)[0];
-            var tabCount = Math.floor(w/oldLen);
-            var reminder = w%oldLen;
-            var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount));
-            toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(" ", reminder));
-
-            if (toInsert != match) {
-                doc.removeInLine(i, 0, match.length);
-                doc.insertInLine({row: i, column: 0}, toInsert);
-            }
-        }
-    }
-    session.setTabSize(len);
-    session.setUseSoftTabs(ch == " ");
-};
-
-exports.$parseStringArg = function(text) {
-    var indent = {}
-    if (/t/.test(text))
-        indent.ch = "\t";
-    else if (/s/.test(text))
-        indent.ch = " ";
-    var m = text.match(/\d+/);
-    if (m)
-        indent.length = parseInt(m[0]);
-    return indent;
-};
-
-exports.$parseArg = function(arg) {
-    if (!arg)
-        return {};
-    if (typeof arg == "string")
-        return exports.$parseStringArg(arg);
-    if (typeof arg.text == "string")
-        return exports.$parseStringArg(arg.text);
-    return arg;
-}
-
-exports.commands = [{
-    name: "detectIndentation",
-    exec: function(editor) {
-        exports.detectIndentation(editor.session);
-    }
-}, {
-    name: "trimTrailingSpace",
-    exec: function(editor) {
-        exports.trimTrailingSpace(editor.session);
-    }
-}, {
-    name: "convertIndentation",
-    exec: function(editor, arg) {
-        var indent = exports.$parseArg(arg);
-        exports.convertIndentation(editor.session, arg.ch, arg.length);
-    }
-}, {
-    name: "setIndentation",
-    exec: function(editor, arg) {
-        var indent = exports.$parseArg(arg);
-        indent.length && editor.session.setTabSize(indent.length);
-        indent.ch && editor.session.setUseSoftTabs(indent.ch == " ");
-    }
-}]
-
-});
diff --git a/try/ace/keybinding-emacs.js b/try/ace/keybinding-emacs.js
deleted file mode 100644
index 497db86..0000000
--- a/try/ace/keybinding-emacs.js
+++ /dev/null
@@ -1,1058 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/keyboard/emacs', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/incremental_search', 'ace/commands/incremental_search_commands', 'ace/keyboard/hash_handler', 'ace/lib/keys'], function(require, exports, module) {
-
-
-var dom = require("../lib/dom");
-require("../incremental_search");
-var iSearchCommandModule = require("../commands/incremental_search_commands");
-
-
-var screenToTextBlockCoordinates = function(x, y) {
-    var canvasPos = this.scroller.getBoundingClientRect();
-
-    var col = Math.floor(
-        (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth
-    );
-    var row = Math.floor(
-        (y + this.scrollTop - canvasPos.top) / this.lineHeight
-    );
-
-    return this.session.screenToDocumentPosition(row, col);
-};
-
-var HashHandler = require("./hash_handler").HashHandler;
-exports.handler = new HashHandler();
-
-exports.handler.isEmacs = true;
-exports.handler.$id = "ace/keyboard/emacs";
-
-var initialized = false;
-var $formerLongWords;
-var $formerLineStart;
-
-exports.handler.attach = function(editor) {
-    if (!initialized) {
-        initialized = true;
-        dom.importCssString('\
-            .emacs-mode .ace_cursor{\
-                border: 2px rgba(50,250,50,0.8) solid!important;\
-                -moz-box-sizing: border-box!important;\
-                -webkit-box-sizing: border-box!important;\
-                box-sizing: border-box!important;\
-                background-color: rgba(0,250,0,0.9);\
-                opacity: 0.5;\
-            }\
-            .emacs-mode .ace_cursor.ace_hidden{\
-                opacity: 1;\
-                background-color: transparent;\
-            }\
-            .emacs-mode .ace_overwrite-cursors .ace_cursor {\
-                opacity: 1;\
-                background-color: transparent;\
-                border-width: 0 0 2px 2px !important;\
-            }\
-            .emacs-mode .ace_text-layer {\
-                z-index: 4\
-            }\
-            .emacs-mode .ace_cursor-layer {\
-                z-index: 2\
-            }', 'emacsMode'
-        );
-    }
-    $formerLongWords = editor.session.$selectLongWords;
-    editor.session.$selectLongWords = true;
-    $formerLineStart = editor.session.$useEmacsStyleLineStart;
-    editor.session.$useEmacsStyleLineStart = true;
-
-    editor.session.$emacsMark = null; // the active mark
-    editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || [];
-
-    editor.emacsMark = function() {
-        return this.session.$emacsMark;
-    }
-
-    editor.setEmacsMark = function(p) {
-        this.session.$emacsMark = p;
-    }
-
-    editor.pushEmacsMark = function(p, activate) {
-        var prevMark = this.session.$emacsMark;
-        if (prevMark)
-            this.session.$emacsMarkRing.push(prevMark);
-        if (!p || activate) this.setEmacsMark(p)
-        else this.session.$emacsMarkRing.push(p);
-    }
-
-    editor.popEmacsMark = function() {
-        var mark = this.emacsMark();
-        if (mark) { this.setEmacsMark(null); return mark; }
-        return this.session.$emacsMarkRing.pop();
-    }
-
-    editor.getLastEmacsMark = function(p) {
-        return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0];
-    }
-
-    editor.on("click", $resetMarkMode);
-    editor.on("changeSession", $kbSessionChange);
-    editor.renderer.screenToTextCoordinates = screenToTextBlockCoordinates;
-    editor.setStyle("emacs-mode");
-    editor.commands.addCommands(commands);
-    exports.handler.platform = editor.commands.platform;
-    editor.$emacsModeHandler = this;
-    editor.addEventListener('copy', this.onCopy);
-    editor.addEventListener('paste', this.onPaste);
-};
-
-exports.handler.detach = function(editor) {
-    delete editor.renderer.screenToTextCoordinates;
-    editor.session.$selectLongWords = $formerLongWords;
-    editor.session.$useEmacsStyleLineStart = $formerLineStart;
-    editor.removeEventListener("click", $resetMarkMode);
-    editor.removeEventListener("changeSession", $kbSessionChange);
-    editor.unsetStyle("emacs-mode");
-    editor.commands.removeCommands(commands);
-    editor.removeEventListener('copy', this.onCopy);
-    editor.removeEventListener('paste', this.onPaste);
-};
-
-var $kbSessionChange = function(e) {
-    if (e.oldSession) {
-        e.oldSession.$selectLongWords = $formerLongWords;
-        e.oldSession.$useEmacsStyleLineStart = $formerLineStart;
-    }
-
-    $formerLongWords = e.session.$selectLongWords;
-    e.session.$selectLongWords = true;
-    $formerLineStart = e.session.$useEmacsStyleLineStart;
-    e.session.$useEmacsStyleLineStart = true;
-
-    if (!e.session.hasOwnProperty('$emacsMark'))
-        e.session.$emacsMark = null;
-    if (!e.session.hasOwnProperty('$emacsMarkRing'))
-        e.session.$emacsMarkRing = [];
-}
-
-var $resetMarkMode = function(e) {
-    e.editor.session.$emacsMark = null;
-}
-
-var keys = require("../lib/keys").KEY_MODS,
-    eMods = {C: "ctrl", S: "shift", M: "alt", CMD: "command"},
-    combinations = ["C-S-M-CMD",
-                    "S-M-CMD", "C-M-CMD", "C-S-CMD", "C-S-M",
-                    "M-CMD", "S-CMD", "S-M", "C-CMD", "C-M", "C-S",
-                    "CMD", "M", "S", "C"];
-combinations.forEach(function(c) {
-    var hashId = 0;
-    c.split("-").forEach(function(c) {
-        hashId = hashId | keys[eMods[c]];
-    });
-    eMods[hashId] = c.toLowerCase() + "-";
-});
-
-exports.handler.onCopy = function(e, editor) {
-    if (editor.$handlesEmacsOnCopy) return;
-    editor.$handlesEmacsOnCopy = true;
-    exports.handler.commands.killRingSave.exec(editor);
-    delete editor.$handlesEmacsOnCopy;
-}
-
-exports.handler.onPaste = function(e, editor) {
-    editor.pushEmacsMark(editor.getCursorPosition());
-}
-
-exports.handler.bindKey = function(key, command) {
-    if (!key)
-        return;
-
-    var ckb = this.commmandKeyBinding;
-    key.split("|").forEach(function(keyPart) {
-        keyPart = keyPart.toLowerCase();
-        ckb[keyPart] = command;
-        var keyParts = keyPart.split(" ").slice(0,-1);
-        keyParts.reduce(function(keyMapKeys, keyPart, i) {
-            var prefix = keyMapKeys[i-1] ? keyMapKeys[i-1] + ' ' : '';
-            return keyMapKeys.concat([prefix + keyPart]);
-        }, []).forEach(function(keyPart) {
-            if (!ckb[keyPart]) ckb[keyPart] = "null";
-        });
-    }, this);
-}
-
-exports.handler.handleKeyboard = function(data, hashId, key, keyCode) {
-    var editor = data.editor;
-    if (hashId == -1) {
-        editor.pushEmacsMark();
-        if (data.count) {
-            var str = Array(data.count + 1).join(key);
-            data.count = null;
-            return {command: "insertstring", args: str};
-        }
-    }
-
-    if (key == "\x00") return undefined;
-
-    var modifier = eMods[hashId];
-    if (modifier == "c-" || data.universalArgument) {
-        var prevCount = String(data.count || 0);
-        var count = parseInt(key[key.length - 1]);
-        if (typeof count === 'number' && !isNaN(count)) {
-            data.count = parseInt(prevCount + count);
-            return {command: "null"};
-        } else if (data.universalArgument) {
-            data.count = 4;
-        }
-    }
-    data.universalArgument = false;
-    if (modifier) key = modifier + key;
-    if (data.keyChain) key = data.keyChain += " " + key;
-    var command = this.commmandKeyBinding[key];
-    data.keyChain = command == "null" ? key : "";
-    if (!command) return undefined;
-    if (command === "null") return {command: "null"};
-
-    if (command === "universalArgument") {
-        data.universalArgument = true;
-        return {command: "null"};
-    }
-    var args;
-    if (typeof command !== "string") {
-        args = command.args;
-        if (command.command) command = command.command;
-        if (command === "goorselect") {
-            command = editor.emacsMark() ? args[1] : args[0];
-            args = null;
-        }
-    }
-
-    if (typeof command === "string") {
-        if (command === "insertstring" ||
-            command === "splitline" ||
-            command === "togglecomment") {
-            editor.pushEmacsMark();
-        }
-        command = this.commands[command] || editor.commands.commands[command];
-        if (!command) return undefined;
-    }
-
-    if (!command.readonly && !command.isYank)
-        data.lastCommand = null;
-
-    if (data.count) {
-        var count = data.count;
-        data.count = 0;
-        if (!command || !command.handlesCount) {
-            return {
-                args: args,
-                command: {
-                    exec: function(editor, args) {
-                        for (var i = 0; i < count; i++)
-                            command.exec(editor, args);
-                    }
-                }
-            };
-        } else {
-            if (!args) args = {}
-            if (typeof args === 'object') args.count = count;
-        }
-    }
-
-    return {command: command, args: args};
-};
-
-exports.emacsKeys = {
-    "Up|C-p"      : {command: "goorselect", args: ["golineup","selectup"]},
-    "Down|C-n"    : {command: "goorselect", args: ["golinedown","selectdown"]},
-    "Left|C-b"    : {command: "goorselect", args: ["gotoleft","selectleft"]},
-    "Right|C-f"   : {command: "goorselect", args: ["gotoright","selectright"]},
-    "C-Left|M-b"  : {command: "goorselect", args: ["gotowordleft","selectwordleft"]},
-    "C-Right|M-f" : {command: "goorselect", args: ["gotowordright","selectwordright"]},
-    "Home|C-a"    : {command: "goorselect", args: ["gotolinestart","selecttolinestart"]},
-    "End|C-e"     : {command: "goorselect", args: ["gotolineend","selecttolineend"]},
-    "C-Home|S-M-,": {command: "goorselect", args: ["gotostart","selecttostart"]},
-    "C-End|S-M-." : {command: "goorselect", args: ["gotoend","selecttoend"]},
-    "S-Up|S-C-p"      : "selectup",
-    "S-Down|S-C-n"    : "selectdown",
-    "S-Left|S-C-b"    : "selectleft",
-    "S-Right|S-C-f"   : "selectright",
-    "S-C-Left|S-M-b"  : "selectwordleft",
-    "S-C-Right|S-M-f" : "selectwordright",
-    "S-Home|S-C-a"    : "selecttolinestart",
-    "S-End|S-C-e"     : "selecttolineend",
-    "S-C-Home"        : "selecttostart",
-    "S-C-End"         : "selecttoend",
-
-    "C-l" : "recenterTopBottom",
-    "M-s" : "centerselection",
-    "M-g": "gotoline",
-    "C-x C-p": "selectall",
-    "C-Down": {command: "goorselect", args: ["gotopagedown","selectpagedown"]},
-    "C-Up": {command: "goorselect", args: ["gotopageup","selectpageup"]},
-    "PageDown|C-v": {command: "goorselect", args: ["gotopagedown","selectpagedown"]},
-    "PageUp|M-v": {command: "goorselect", args: ["gotopageup","selectpageup"]},
-    "S-C-Down": "selectpagedown",
-    "S-C-Up": "selectpageup",
-
-    "C-s": "iSearch",
-    "C-r": "iSearchBackwards",
-
-    "M-C-s": "findnext",
-    "M-C-r": "findprevious",
-    "S-M-5": "replace",
-    "Backspace": "backspace",
-    "Delete|C-d": "del",
-    "Return|C-m": {command: "insertstring", args: "\n"}, // "newline"
-    "C-o": "splitline",
-
-    "M-d|C-Delete": {command: "killWord", args: "right"},
-    "C-Backspace|M-Backspace|M-Delete": {command: "killWord", args: "left"},
-    "C-k": "killLine",
-
-    "C-y|S-Delete": "yank",
-    "M-y": "yankRotate",
-    "C-g": "keyboardQuit",
-
-    "C-w": "killRegion",
-    "M-w": "killRingSave",
-    "C-Space": "setMark",
-    "C-x C-x": "exchangePointAndMark",
-
-    "C-t": "transposeletters",
-    "M-u": "touppercase",    // Doesn't work
-    "M-l": "tolowercase",
-    "M-/": "autocomplete",   // Doesn't work
-    "C-u": "universalArgument",
-
-    "M-;": "togglecomment",
-
-    "C-/|C-x u|S-C--|C-z": "undo",
-    "S-C-/|S-C-x u|C--|S-C-z": "redo", //infinite undo?
-    "C-x r":  "selectRectangularRegion",
-    "M-x": {command: "focusCommandLine", args: "M-x "}
-};
-
-
-exports.handler.bindKeys(exports.emacsKeys);
-
-exports.handler.addCommands({
-    recenterTopBottom: function(editor) {
-        var renderer = editor.renderer;
-        var pos = renderer.$cursorLayer.getPixelPosition();
-        var h = renderer.$size.scrollerHeight - renderer.lineHeight;
-        var scrollTop = renderer.scrollTop;
-        if (Math.abs(pos.top - scrollTop) < 2) {
-            scrollTop = pos.top - h;
-        } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) {
-            scrollTop = pos.top;
-        } else {
-            scrollTop = pos.top - h * 0.5;
-        }
-        editor.session.setScrollTop(scrollTop);
-    },
-    selectRectangularRegion:  function(editor) {
-        editor.multiSelect.toggleBlockSelection();
-    },
-    setMark:  {
-        exec: function(editor, args) {
-            if (args && args.count) {
-                var mark = editor.popEmacsMark();
-                mark && editor.selection.moveCursorToPosition(mark);
-                return;
-            }
-
-            var mark = editor.emacsMark(),
-                transientMarkModeActive = true;
-            if (transientMarkModeActive && (mark || !editor.selection.isEmpty())) {
-                editor.pushEmacsMark();
-                editor.clearSelection();
-                return;
-            }
-
-            if (mark) {
-                var cp = editor.getCursorPosition();
-                if (editor.selection.isEmpty() &&
-                    mark.row == cp.row && mark.column == cp.column) {
-                    editor.pushEmacsMark();
-                    return;
-                }
-            }
-            mark = editor.getCursorPosition();
-            editor.setEmacsMark(mark);
-            editor.selection.setSelectionAnchor(mark.row, mark.column);
-        },
-        readonly: true,
-        handlesCount: true,
-        multiSelectAction: "forEach"
-    },
-    exchangePointAndMark: {
-        exec: function(editor, args) {
-            var sel = editor.selection;
-            if (args.count) {
-                var pos = editor.getCursorPosition();
-                sel.clearSelection();
-                sel.moveCursorToPosition(editor.popEmacsMark());
-                editor.pushEmacsMark(pos);
-                return;
-            }
-            var lastMark = editor.getLastEmacsMark();
-            var range = sel.getRange();
-            if (range.isEmpty()) {
-                sel.selectToPosition(lastMark);
-                return;
-            }
-            sel.setSelectionRange(range, !sel.isBackwards());
-        },
-        readonly: true,
-        handlesCount: true,
-        multiSelectAction: "forEach"
-    },
-    killWord: {
-        exec: function(editor, dir) {
-            editor.clearSelection();
-            if (dir == "left")
-                editor.selection.selectWordLeft();
-            else
-                editor.selection.selectWordRight();
-
-            var range = editor.getSelectionRange();
-            var text = editor.session.getTextRange(range);
-            exports.killRing.add(text);
-
-            editor.session.remove(range);
-            editor.clearSelection();
-        },
-        multiSelectAction: "forEach"
-    },
-    killLine: function(editor) {
-        editor.pushEmacsMark(null);
-        var pos = editor.getCursorPosition();
-        if (pos.column == 0 &&
-            editor.session.doc.getLine(pos.row).length == 0) {
-            editor.selection.selectLine();
-        } else {
-            editor.clearSelection();
-            editor.selection.selectLineEnd();
-        }
-        var range = editor.getSelectionRange();
-        var text = editor.session.getTextRange(range);
-        exports.killRing.add(text);
-
-        editor.session.remove(range);
-        editor.clearSelection();
-    },
-    yank: function(editor) {
-        editor.onPaste(exports.killRing.get() || '');
-        editor.keyBinding.$data.lastCommand = "yank";
-    },
-    yankRotate: function(editor) {
-        if (editor.keyBinding.$data.lastCommand != "yank")
-            return;
-        editor.undo();
-        editor.onPaste(exports.killRing.rotate());
-        editor.keyBinding.$data.lastCommand = "yank";
-    },
-    killRegion: {
-        exec: function(editor) {
-            exports.killRing.add(editor.getCopyText());
-            editor.commands.byName.cut.exec(editor);
-        },
-        readonly: true,
-        multiSelectAction: "forEach"
-    },
-    killRingSave: {
-        exec: function(editor) {
-            exports.killRing.add(editor.getCopyText());
-            setTimeout(function() {
-                var sel = editor.selection,
-                    range = sel.getRange();
-                editor.pushEmacsMark(sel.isBackwards() ? range.end : range.start);
-                sel.clearSelection();
-            }, 0);
-        },
-        readonly: true
-    },
-    keyboardQuit: function(editor) {
-        editor.selection.clearSelection();
-        editor.setEmacsMark(null);
-    },
-    focusCommandLine: function(editor, arg) {
-        if (editor.showCommandLine)
-            editor.showCommandLine(arg);
-    }
-});
-
-exports.handler.addCommands(iSearchCommandModule.iSearchStartCommands);
-
-var commands = exports.handler.commands;
-commands.yank.isYank = true;
-commands.yankRotate.isYank = true;
-
-exports.killRing = {
-    $data: [],
-    add: function(str) {
-        str && this.$data.push(str);
-        if (this.$data.length > 30)
-            this.$data.shift();
-    },
-    get: function(n) {
-        n = n || 1;
-        return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\n');
-    },
-    pop: function() {
-        if (this.$data.length > 1)
-            this.$data.pop();
-        return this.get();
-    },
-    rotate: function() {
-        this.$data.unshift(this.$data.pop());
-        return this.get();
-    }
-};
-
-});
-
-define('ace/incremental_search', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/search', 'ace/search_highlight', 'ace/commands/incremental_search_commands', 'ace/lib/dom', 'ace/commands/command_manager', 'ace/editor', 'ace/config'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var Range = require("./range").Range;
-var Search = require("./search").Search;
-var SearchHighlight = require("./search_highlight").SearchHighlight;
-var iSearchCommandModule = require("./commands/incremental_search_commands");
-var ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler;
-function IncrementalSearch() {
-    this.$options = {wrap: false, skipCurrent: false};
-    this.$keyboardHandler = new ISearchKbd(this);
-}
-
-oop.inherits(IncrementalSearch, Search);
-
-;(function() {
-
-    this.activate = function(ed, backwards) {
-        this.$editor = ed;
-        this.$startPos = this.$currentPos = ed.getCursorPosition();
-        this.$options.needle = '';
-        this.$options.backwards = backwards;
-        ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);
-        this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));
-        this.selectionFix(ed);
-        this.statusMessage(true);
-    }
-
-    this.deactivate = function(reset) {
-        this.cancelSearch(reset);
-        this.$editor.keyBinding.removeKeyboardHandler(this.$keyboardHandler);
-        if (this.$mousedownHandler) {
-            this.$editor.removeEventListener('mousedown', this.$mousedownHandler);
-            delete this.$mousedownHandler;
-        }
-        this.message('');
-    }
-
-    this.selectionFix = function(editor) {
-        if (editor.selection.isEmpty() && !editor.session.$emacsMark) {
-            editor.clearSelection();
-        }
-    }
-
-    this.highlight = function(regexp) {
-        var sess = this.$editor.session,
-            hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker(
-                new SearchHighlight(null, "ace_isearch-result", "text"));
-        hl.setRegexp(regexp);
-        sess._emit("changeBackMarker"); // force highlight layer redraw
-    }
-
-    this.cancelSearch = function(reset) {
-        var e = this.$editor;
-        this.$prevNeedle = this.$options.needle;
-        this.$options.needle = '';
-        if (reset) {
-            e.moveCursorToPosition(this.$startPos);
-            this.$currentPos = this.$startPos;
-        } else {
-            e.pushEmacsMark && e.pushEmacsMark(this.$startPos, false);
-        }
-        this.highlight(null);
-        return Range.fromPoints(this.$currentPos, this.$currentPos);
-    }
-
-    this.highlightAndFindWithNeedle = function(moveToNext, needleUpdateFunc) {
-        if (!this.$editor) return null;
-        var options = this.$options;
-        if (needleUpdateFunc) {
-            options.needle = needleUpdateFunc.call(this, options.needle || '') || '';
-        }
-        if (options.needle.length === 0) {
-            this.statusMessage(true);
-            return this.cancelSearch(true);
-        };
-        options.start = this.$currentPos;
-        var session = this.$editor.session,
-            found = this.find(session);
-        if (found) {
-            if (options.backwards) found = Range.fromPoints(found.end, found.start);
-            this.$editor.moveCursorToPosition(found.end);
-            if (moveToNext) this.$currentPos = found.end;
-            this.highlight(options.re)
-        }
-
-        this.statusMessage(found);
-
-        return found;
-    }
-
-    this.addChar = function(c) {
-        return this.highlightAndFindWithNeedle(false, function(needle) {
-            return needle + c;
-        });
-    }
-
-    this.removeChar = function(c) {
-        return this.highlightAndFindWithNeedle(false, function(needle) {
-            return needle.length > 0 ? needle.substring(0, needle.length-1) : needle;
-        });
-    }
-
-    this.next = function(options) {
-        options = options || {};
-        this.$options.backwards = !!options.backwards;
-        this.$currentPos = this.$editor.getCursorPosition();
-        return this.highlightAndFindWithNeedle(true, function(needle) {
-            return options.useCurrentOrPrevSearch && needle.length === 0 ?
-                this.$prevNeedle || '' : needle;
-        });
-    }
-
-    this.onMouseDown = function(evt) {
-        this.deactivate();
-        return true;
-    }
-
-    this.statusMessage = function(found) {
-        var options = this.$options, msg = '';
-        msg += options.backwards ? 'reverse-' : '';
-        msg += 'isearch: ' + options.needle;
-        msg += found ? '' : ' (not found)';
-        this.message(msg);
-    }
-
-    this.message = function(msg) {
-        if (this.$editor.showCommandLine) {
-            this.$editor.showCommandLine(msg);
-            this.$editor.focus();
-        } else {
-            console.log(msg);
-        }
-    }
-
-}).call(IncrementalSearch.prototype);
-
-
-exports.IncrementalSearch = IncrementalSearch;
-
-var dom = require('./lib/dom');
-dom.importCssString && dom.importCssString("\
-.ace_marker-layer .ace_isearch-result {\
-  position: absolute;\
-  z-index: 6;\
-  -moz-box-sizing: border-box;\
-  -webkit-box-sizing: border-box;\
-  box-sizing: border-box;\
-}\
-div.ace_isearch-result {\
-  border-radius: 4px;\
-  background-color: rgba(255, 200, 0, 0.5);\
-  box-shadow: 0 0 4px rgb(255, 200, 0);\
-}\
-.ace_dark div.ace_isearch-result {\
-  background-color: rgb(100, 110, 160);\
-  box-shadow: 0 0 4px rgb(80, 90, 140);\
-}", "incremental-search-highlighting");
-var commands = require("./commands/command_manager");
-(function() {
-    this.setupIncrementalSearch = function(editor, val) {
-        if (this.usesIncrementalSearch == val) return;
-        this.usesIncrementalSearch = val;
-        var iSearchCommands = iSearchCommandModule.iSearchStartCommands;
-        var method = val ? 'addCommands' : 'removeCommands';
-        this[method](iSearchCommands);
-    };
-}).call(commands.CommandManager.prototype);
-var Editor = require("./editor").Editor;
-require("./config").defineOptions(Editor.prototype, "editor", {
-    useIncrementalSearch: {
-        set: function(val) {
-            this.keyBinding.$handlers.forEach(function(handler) {
-                if (handler.setupIncrementalSearch) {
-                    handler.setupIncrementalSearch(this, val);
-                }
-            });
-            this._emit('incrementalSearchSettingChanged', {isEnabled: val});
-        }
-    }
-});
-
-});
-
-define('ace/commands/incremental_search_commands', ['require', 'exports', 'module' , 'ace/config', 'ace/lib/oop', 'ace/keyboard/hash_handler', 'ace/commands/occur_commands'], function(require, exports, module) {
-
-var config = require("../config");
-var oop = require("../lib/oop");
-var HashHandler = require("../keyboard/hash_handler").HashHandler;
-var occurStartCommand = require("./occur_commands").occurStartCommand;
-exports.iSearchStartCommands = [{
-    name: "iSearch",
-    bindKey: {win: "Ctrl-F", mac: "Command-F"},
-    exec: function(editor, options) {
-        config.loadModule(["core", "ace/incremental_search"], function(e) {
-            var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();
-            iSearch.activate(editor, options.backwards);
-            if (options.jumpToFirstMatch) iSearch.next(options);
-        });
-    },
-    readOnly: true
-}, {
-    name: "iSearchBackwards",
-    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); },
-    readOnly: true
-}, {
-    name: "iSearchAndGo",
-    bindKey: {win: "Ctrl-K", mac: "Command-G"},
-    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); },
-    readOnly: true
-}, {
-    name: "iSearchBackwardsAndGo",
-    bindKey: {win: "Ctrl-Shift-K", mac: "Command-Shift-G"},
-    exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); },
-    readOnly: true
-}];
-exports.iSearchCommands = [{
-    name: "restartSearch",
-    bindKey: {win: "Ctrl-F", mac: "Command-F"},
-    exec: function(iSearch) {
-        iSearch.cancelSearch(true);
-    },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: "searchForward",
-    bindKey: {win: "Ctrl-S|Ctrl-K", mac: "Ctrl-S|Command-G"},
-    exec: function(iSearch, options) {
-        options.useCurrentOrPrevSearch = true;
-        iSearch.next(options);
-    },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: "searchBackward",
-    bindKey: {win: "Ctrl-R|Ctrl-Shift-K", mac: "Ctrl-R|Command-Shift-G"},
-    exec: function(iSearch, options) {
-        options.useCurrentOrPrevSearch = true;
-        options.backwards = true;
-        iSearch.next(options);
-    },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: "extendSearchTerm",
-    exec: function(iSearch, string) {
-        iSearch.addChar(string);
-    },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: "extendSearchTermSpace",
-    bindKey: "space",
-    exec: function(iSearch) { iSearch.addChar(' '); },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: "shrinkSearchTerm",
-    bindKey: "backspace",
-    exec: function(iSearch) {
-        iSearch.removeChar();
-    },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: 'confirmSearch',
-    bindKey: 'return',
-    exec: function(iSearch) { iSearch.deactivate(); },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: 'cancelSearch',
-    bindKey: 'esc|Ctrl-G',
-    exec: function(iSearch) { iSearch.deactivate(true); },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}, {
-    name: 'occurisearch',
-    bindKey: 'Ctrl-O',
-    exec: function(iSearch) {
-        var options = oop.mixin({}, iSearch.$options);
-        iSearch.deactivate();
-        occurStartCommand.exec(iSearch.$editor, options);
-    },
-    readOnly: true,
-    isIncrementalSearchCommand: true
-}];
-
-function IncrementalSearchKeyboardHandler(iSearch) {
-    this.$iSearch = iSearch;
-}
-
-oop.inherits(IncrementalSearchKeyboardHandler, HashHandler);
-
-;(function() {
-
-    this.attach = function(editor) {
-        var iSearch = this.$iSearch;
-        HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);
-        this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) {
-            if (!e.command.isIncrementalSearchCommand) return undefined;
-            e.stopPropagation();
-            e.preventDefault();
-            return e.command.exec(iSearch, e.args || {});
-        });
-    }
-
-    this.detach = function(editor) {
-        if (!this.$commandExecHandler) return;
-        editor.commands.removeEventListener('exec', this.$commandExecHandler);
-        delete this.$commandExecHandler;
-    }
-
-    var handleKeyboard$super = this.handleKeyboard;
-    this.handleKeyboard = function(data, hashId, key, keyCode) {
-        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);
-        if (cmd.command) { return cmd; }
-        if (hashId == -1) {
-            var extendCmd = this.commands.extendSearchTerm;
-            if (extendCmd) { return {command: extendCmd, args: key}; }
-        }
-        return {command: "null", passEvent: hashId == 0 || hashId == 4};
-    }
-
-}).call(IncrementalSearchKeyboardHandler.prototype);
-
-
-exports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;
-
-});
-
-define('ace/commands/occur_commands', ['require', 'exports', 'module' , 'ace/config', 'ace/occur', 'ace/keyboard/hash_handler', 'ace/lib/oop'], function(require, exports, module) {
-
-var config = require("../config"),
-    Occur = require("../occur").Occur;
-var occurStartCommand = {
-    name: "occur",
-    exec: function(editor, options) {
-        var alreadyInOccur = !!editor.session.$occur;
-        var occurSessionActive = new Occur().enter(editor, options);
-        if (occurSessionActive && !alreadyInOccur)
-            OccurKeyboardHandler.installIn(editor);
-    },
-    readOnly: true
-};
-
-var occurCommands = [{
-    name: "occurexit",
-    bindKey: 'esc|Ctrl-G',
-    exec: function(editor) {
-        var occur = editor.session.$occur;
-        if (!occur) return;
-        occur.exit(editor, {});
-        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);
-    },
-    readOnly: true
-}, {
-    name: "occuraccept",
-    bindKey: 'enter',
-    exec: function(editor) {
-        var occur = editor.session.$occur;
-        if (!occur) return;
-        occur.exit(editor, {translatePosition: true});
-        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);
-    },
-    readOnly: true
-}];
-
-var HashHandler = require("../keyboard/hash_handler").HashHandler;
-var oop = require("../lib/oop");
-
-
-function OccurKeyboardHandler() {}
-
-oop.inherits(OccurKeyboardHandler, HashHandler);
-
-;(function() {
-
-    this.isOccurHandler = true;
-
-    this.attach = function(editor) {
-        HashHandler.call(this, occurCommands, editor.commands.platform);
-        this.$editor = editor;
-    }
-
-    var handleKeyboard$super = this.handleKeyboard;
-    this.handleKeyboard = function(data, hashId, key, keyCode) {
-        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);
-        return (cmd && cmd.command) ? cmd : undefined;
-    }
-
-}).call(OccurKeyboardHandler.prototype);
-
-OccurKeyboardHandler.installIn = function(editor) {
-    var handler = new this();
-    editor.keyBinding.addKeyboardHandler(handler);
-    editor.commands.addCommands(occurCommands);
-}
-
-OccurKeyboardHandler.uninstallFrom = function(editor) {
-    editor.commands.removeCommands(occurCommands);
-    var handler = editor.getKeyboardHandler();
-    if (handler.isOccurHandler)
-        editor.keyBinding.removeKeyboardHandler(handler);
-}
-
-exports.occurStartCommand = occurStartCommand;
-
-});
-
-define('ace/occur', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/search', 'ace/edit_session', 'ace/search_highlight', 'ace/lib/dom'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var Range = require("./range").Range;
-var Search = require("./search").Search;
-var EditSession = require("./edit_session").EditSession;
-var SearchHighlight = require("./search_highlight").SearchHighlight;
-function Occur() {}
-
-oop.inherits(Occur, Search);
-
-(function() {
-    this.enter = function(editor, options) {
-        if (!options.needle) return false;
-        var pos = editor.getCursorPosition();
-        this.displayOccurContent(editor, options);
-        var translatedPos = this.originalToOccurPosition(editor.session, pos);
-        editor.moveCursorToPosition(translatedPos);
-        return true;
-    }
-    this.exit = function(editor, options) {
-        var pos = options.translatePosition && editor.getCursorPosition();
-        var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);
-        this.displayOriginalContent(editor);
-        if (translatedPos)
-            editor.moveCursorToPosition(translatedPos);
-        return true;
-    }
-
-    this.highlight = function(sess, regexp) {
-        var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(
-                new SearchHighlight(null, "ace_occur-highlight", "text"));
-        hl.setRegexp(regexp);
-        sess._emit("changeBackMarker"); // force highlight layer redraw
-    }
-
-    this.displayOccurContent = function(editor, options) {
-        this.$originalSession = editor.session;
-        var found = this.matchingLines(editor.session, options);
-        var lines = found.map(function(foundLine) { return foundLine.content; });
-        var occurSession = new EditSession(lines.join('\n'));
-        occurSession.$occur = this;
-        occurSession.$occurMatchingLines = found;
-        editor.setSession(occurSession);
-        this.highlight(occurSession, options.re);
-        occurSession._emit('changeBackMarker');
-    }
-
-    this.displayOriginalContent = function(editor) {
-        editor.setSession(this.$originalSession);
-    }
-    this.originalToOccurPosition = function(session, pos) {
-        var lines = session.$occurMatchingLines;
-        var nullPos = {row: 0, column: 0};
-        if (!lines) return nullPos;
-        for (var i = 0; i < lines.length; i++) {
-            if (lines[i].row === pos.row)
-                return {row: i, column: pos.column};
-        }
-        return nullPos;
-    }
-    this.occurToOriginalPosition = function(session, pos) {
-        var lines = session.$occurMatchingLines;
-        if (!lines || !lines[pos.row])
-            return pos;
-        return {row: lines[pos.row].row, column: pos.column};
-    }
-
-    this.matchingLines = function(session, options) {
-        options = oop.mixin({}, options);
-        if (!session || !options.needle) return [];
-        var search = new Search();
-        search.set(options);
-        return search.findAll(session).reduce(function(lines, range) {
-            var row = range.start.row;
-            var last = lines[lines.length-1];
-            return last && last.row === row ?
-                lines :
-                lines.concat({row: row, content: session.getLine(row)});
-        }, []);
-    }
-
-}).call(Occur.prototype);
-
-var dom = require('./lib/dom');
-dom.importCssString(".ace_occur-highlight {\n\
-    border-radius: 4px;\n\
-    background-color: rgba(87, 255, 8, 0.25);\n\
-    position: absolute;\n\
-    z-index: 4;\n\
-    -moz-box-sizing: border-box;\n\
-    -webkit-box-sizing: border-box;\n\
-    box-sizing: border-box;\n\
-    box-shadow: 0 0 4px rgb(91, 255, 50);\n\
-}\n\
-.ace_dark .ace_occur-highlight {\n\
-    background-color: rgb(80, 140, 85);\n\
-    box-shadow: 0 0 4px rgb(60, 120, 70);\n\
-}\n", "incremental-occur-highlighting");
-
-exports.Occur = Occur;
-
-});
diff --git a/try/ace/keybinding-vim.js b/try/ace/keybinding-vim.js
deleted file mode 100644
index 5bb8e47..0000000
--- a/try/ace/keybinding-vim.js
+++ /dev/null
@@ -1,1712 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/keyboard/vim', ['require', 'exports', 'module' , 'ace/keyboard/vim/commands', 'ace/keyboard/vim/maps/util', 'ace/lib/useragent'], function(require, exports, module) {
-
-
-var cmds = require("./vim/commands");
-var coreCommands = cmds.coreCommands;
-var util = require("./vim/maps/util");
-var useragent = require("../lib/useragent");
-
-var startCommands = {
-    "i": {
-        command: coreCommands.start
-    },
-    "I": {
-        command: coreCommands.startBeginning
-    },
-    "a": {
-        command: coreCommands.append
-    },
-    "A": {
-        command: coreCommands.appendEnd
-    },
-    "ctrl-f": {
-        command: "gotopagedown"
-    },
-    "ctrl-b": {
-        command: "gotopageup"
-    }
-};
-
-exports.handler = {
-	$id: "ace/keyboard/vim",
-    handleMacRepeat: function(data, hashId, key) {
-        if (hashId == -1) {
-            data.inputChar = key;
-            data.lastEvent = "input";
-        } else if (data.inputChar && data.$lastHash == hashId && data.$lastKey == key) {
-            if (data.lastEvent == "input") {
-                data.lastEvent = "input1";
-            } else if (data.lastEvent == "input1") {
-                return true;
-            }
-        } else {
-            data.$lastHash = hashId;
-            data.$lastKey = key;
-            data.lastEvent = "keypress";
-        }
-    },
-
-    handleKeyboard: function(data, hashId, key, keyCode, e) {
-        if (hashId != 0 && (key == "" || key == "\x00"))
-            return null;
-        
-        var editor = data.editor;
-        
-        if (hashId == 1)
-            key = "ctrl-" + key;
-        if (key == "ctrl-c") {
-            if (!useragent.isMac && editor.getCopyText()) {
-                editor.once("copy", function() {
-                    if (data.state == "start")
-                        coreCommands.stop.exec(editor);
-                    else
-                        editor.selection.clearSelection();
-                });
-                return {command: "null", passEvent: true};
-            }
-            return {command: coreCommands.stop};            
-        } else if ((key == "esc" && hashId == 0) || key == "ctrl-[") {
-            return {command: coreCommands.stop};
-        } else if (data.state == "start") {
-            if (useragent.isMac && this.handleMacRepeat(data, hashId, key)) {
-                hashId = -1;
-                key = data.inputChar;
-            }
-            
-            if (hashId == -1 || hashId == 1 || hashId == 0 && key.length > 1) {
-                if (cmds.inputBuffer.idle && startCommands[key])
-                    return startCommands[key];
-                cmds.inputBuffer.push(editor, key);
-                return {command: "null", passEvent: false}; 
-            } // if no modifier || shift: wait for input.
-            else if (key.length == 1 && (hashId == 0 || hashId == 4)) {
-                return {command: "null", passEvent: true};
-            } else if (key == "esc" && hashId == 0) {
-                return {command: coreCommands.stop};
-            }
-        } else {
-            if (key == "ctrl-w") {
-                return {command: "removewordleft"};
-            }
-        }
-    },
-
-    attach: function(editor) {
-        editor.on("click", exports.onCursorMove);
-        if (util.currentMode !== "insert")
-            cmds.coreCommands.stop.exec(editor);
-        editor.$vimModeHandler = this;
-    },
-
-    detach: function(editor) {
-        editor.removeListener("click", exports.onCursorMove);
-        util.noMode(editor);
-        util.currentMode = "normal";
-    },
-
-    actions: cmds.actions,
-    getStatusText: function() {
-        if (util.currentMode == "insert")
-            return "INSERT";
-        if (util.onVisualMode)
-            return (util.onVisualLineMode ? "VISUAL LINE " : "VISUAL ") + cmds.inputBuffer.status;
-        return cmds.inputBuffer.status;
-    }
-};
-
-
-exports.onCursorMove = function(e) {
-    cmds.onCursorMove(e.editor, e);
-    exports.onCursorMove.scheduled = false;
-};
-
-});
- 
-define('ace/keyboard/vim/commands', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/keyboard/vim/maps/util', 'ace/keyboard/vim/maps/motions', 'ace/keyboard/vim/maps/operators', 'ace/keyboard/vim/maps/aliases', 'ace/keyboard/vim/registers'], function(require, exports, module) {
-
-"never use strict";
-
-var lang = require("../../lib/lang");
-var util = require("./maps/util");
-var motions = require("./maps/motions");
-var operators = require("./maps/operators");
-var alias = require("./maps/aliases");
-var registers = require("./registers");
-
-var NUMBER = 1;
-var OPERATOR = 2;
-var MOTION = 3;
-var ACTION = 4;
-var HMARGIN = 8; // Minimum amount of line separation between margins;
-
-var repeat = function repeat(fn, count, args) {
-    while (0 < count--)
-        fn.apply(this, args);
-};
-
-var ensureScrollMargin = function(editor) {
-    var renderer = editor.renderer;
-    var pos = renderer.$cursorLayer.getPixelPosition();
-
-    var top = pos.top;
-
-    var margin = HMARGIN * renderer.layerConfig.lineHeight;
-    if (2 * margin > renderer.$size.scrollerHeight)
-        margin = renderer.$size.scrollerHeight / 2;
-
-    if (renderer.scrollTop > top - margin) {
-        renderer.session.setScrollTop(top - margin);
-    }
-
-    if (renderer.scrollTop + renderer.$size.scrollerHeight < top + margin + renderer.lineHeight) {
-        renderer.session.setScrollTop(top + margin + renderer.lineHeight - renderer.$size.scrollerHeight);
-    }
-};
-
-var actions = exports.actions = {
-    "z": {
-        param: true,
-        fn: function(editor, range, count, param) {
-            switch (param) {
-                case "z":
-                    editor.renderer.alignCursor(null, 0.5);
-                    break;
-                case "t":
-                    editor.renderer.alignCursor(null, 0);
-                    break;
-                case "b":
-                    editor.renderer.alignCursor(null, 1);
-                    break;
-            }
-        }
-    },
-    "r": {
-        param: true,
-        fn: function(editor, range, count, param) {
-            if (param && param.length) {
-                if (param.length > 1)
-                    param = param == "return" ? "\n" : param == "tab" ? "\t" : param;
-                repeat(function() { editor.insert(param); }, count || 1);
-                editor.navigateLeft();
-            }
-        }
-    },
-    "R": {
-        fn: function(editor, range, count, param) {
-            util.insertMode(editor);
-            editor.setOverwrite(true);
-        }
-    },
-    "~": {
-        fn: function(editor, range, count) {
-            repeat(function() {
-                var range = editor.selection.getRange();
-                if (range.isEmpty())
-                    range.end.column++;
-                var text = editor.session.getTextRange(range);
-                var toggled = text.toUpperCase();
-                if (toggled == text)
-                    editor.navigateRight();
-                else
-                    editor.session.replace(range, toggled);
-            }, count || 1);
-        }
-    },
-    "*": {
-        fn: function(editor, range, count, param) {
-            editor.selection.selectWord();
-            editor.findNext();
-            ensureScrollMargin(editor);
-            var r = editor.selection.getRange();
-            editor.selection.setSelectionRange(r, true);
-        }
-    },
-    "#": {
-        fn: function(editor, range, count, param) {
-            editor.selection.selectWord();
-            editor.findPrevious();
-            ensureScrollMargin(editor);
-            var r = editor.selection.getRange();
-            editor.selection.setSelectionRange(r, true);
-        }
-    },
-    "m": {
-        param: true,
-        fn: function(editor, range, count, param) {
-            var s =  editor.session;
-            var markers = s.vimMarkers || (s.vimMarkers = {});
-            var c = editor.getCursorPosition();
-            if (!markers[param]) {
-                markers[param] = editor.session.doc.createAnchor(c);
-            }
-            markers[param].setPosition(c.row, c.column, true);
-        }
-    },
-    "n": {
-        fn: function(editor, range, count, param) {
-            var options = editor.getLastSearchOptions();
-            options.backwards = false;
-
-            editor.selection.moveCursorRight();
-            editor.selection.clearSelection();
-            editor.findNext(options);
-
-            ensureScrollMargin(editor);
-            var r = editor.selection.getRange();
-            r.end.row = r.start.row;
-            r.end.column = r.start.column;
-            editor.selection.setSelectionRange(r, true);
-        }
-    },
-    "N": {
-        fn: function(editor, range, count, param) {
-            var options = editor.getLastSearchOptions();
-            options.backwards = true;
-
-            editor.findPrevious(options);
-            ensureScrollMargin(editor);
-            var r = editor.selection.getRange();
-            r.end.row = r.start.row;
-            r.end.column = r.start.column;
-            editor.selection.setSelectionRange(r, true);
-        }
-    },
-    "v": {
-        fn: function(editor, range, count, param) {
-            editor.selection.selectRight();
-            util.visualMode(editor, false);
-        },
-        acceptsMotion: true
-    },
-    "V": {
-        fn: function(editor, range, count, param) {
-            var row = editor.getCursorPosition().row;
-            editor.selection.clearSelection();
-            editor.selection.moveCursorTo(row, 0);
-            editor.selection.selectLineEnd();
-            editor.selection.visualLineStart = row;
-
-            util.visualMode(editor, true);
-        },
-        acceptsMotion: true
-    },
-    "Y": {
-        fn: function(editor, range, count, param) {
-            util.copyLine(editor);
-        }
-    },
-    "p": {
-        fn: function(editor, range, count, param) {
-            var defaultReg = registers._default;
-
-            editor.setOverwrite(false);
-            if (defaultReg.isLine) {
-                var pos = editor.getCursorPosition();
-                pos.column = editor.session.getLine(pos.row).length;
-                var text = lang.stringRepeat("\n" + defaultReg.text, count || 1);
-                editor.session.insert(pos, text);
-                editor.moveCursorTo(pos.row + 1, 0);
-            }
-            else {
-                editor.navigateRight();
-                editor.insert(lang.stringRepeat(defaultReg.text, count || 1));
-                editor.navigateLeft();
-            }
-            editor.setOverwrite(true);
-            editor.selection.clearSelection();
-        }
-    },
-    "P": {
-        fn: function(editor, range, count, param) {
-            var defaultReg = registers._default;
-            editor.setOverwrite(false);
-
-            if (defaultReg.isLine) {
-                var pos = editor.getCursorPosition();
-                pos.column = 0;
-                var text = lang.stringRepeat(defaultReg.text + "\n", count || 1);
-                editor.session.insert(pos, text);
-                editor.moveCursorToPosition(pos);
-            }
-            else {
-                editor.insert(lang.stringRepeat(defaultReg.text, count || 1));
-            }
-            editor.setOverwrite(true);
-            editor.selection.clearSelection();
-        }
-    },
-    "J": {
-        fn: function(editor, range, count, param) {
-            var session = editor.session;
-            range = editor.getSelectionRange();
-            var pos = {row: range.start.row, column: range.start.column};
-            count = count || range.end.row - range.start.row;
-            var maxRow = Math.min(pos.row + (count || 1), session.getLength() - 1);
-
-            range.start.column = session.getLine(pos.row).length;
-            range.end.column = session.getLine(maxRow).length;
-            range.end.row = maxRow;
-
-            var text = "";
-            for (var i = pos.row; i < maxRow; i++) {
-                var nextLine = session.getLine(i + 1);
-                text += " " + /^\s*(.*)$/.exec(nextLine)[1] || "";
-            }
-
-            session.replace(range, text);
-            editor.moveCursorTo(pos.row, pos.column);
-        }
-    },
-    "u": {
-        fn: function(editor, range, count, param) {
-            count = parseInt(count || 1, 10);
-            for (var i = 0; i < count; i++) {
-                editor.undo();
-            }
-            editor.selection.clearSelection();
-        }
-    },
-    "ctrl-r": {
-        fn: function(editor, range, count, param) {
-            count = parseInt(count || 1, 10);
-            for (var i = 0; i < count; i++) {
-                editor.redo();
-            }
-            editor.selection.clearSelection();
-        }
-    },
-    ":": {
-        fn: function(editor, range, count, param) {
-            var val = ":";
-            if (count > 1)
-                val = ".,.+" + count + val;
-            if (editor.showCommandLine)
-                editor.showCommandLine(val);
-        }
-    },
-    "/": {
-        fn: function(editor, range, count, param) {
-            if (editor.showCommandLine)
-                editor.showCommandLine("/");
-        }
-    },
-    "?": {
-        fn: function(editor, range, count, param) {
-            if (editor.showCommandLine)
-                editor.showCommandLine("?");
-        }
-    },
-    ".": {
-        fn: function(editor, range, count, param) {
-            util.onInsertReplaySequence = inputBuffer.lastInsertCommands;
-            var previous = inputBuffer.previous;
-            if (previous) // If there is a previous action
-                inputBuffer.exec(editor, previous.action, previous.param);
-        }
-    },
-    "ctrl-x": {
-        fn: function(editor, range, count, param) {
-            editor.modifyNumber(-(count || 1));
-        }
-    },
-    "ctrl-a": {
-        fn: function(editor, range, count, param) {
-            editor.modifyNumber(count || 1);
-        }
-    }
-};
-
-var inputBuffer = exports.inputBuffer = {
-    accepting: [NUMBER, OPERATOR, MOTION, ACTION],
-    currentCmd: null,
-    currentCount: "",
-    status: "",
-    operator: null,
-    motion: null,
-
-    lastInsertCommands: [],
-
-    push: function(editor, ch, keyId) {
-        var status = this.status;
-        var isKeyHandled = true;
-        this.idle = false;
-        var wObj = this.waitingForParam;
-        if (/^numpad\d+$/i.test(ch))
-            ch = ch.substr(6);
-            
-        if (wObj) {
-            this.exec(editor, wObj, ch);
-        }
-        else if (!(ch === "0" && !this.currentCount.length) &&
-            (/^\d+$/.test(ch) && this.isAccepting(NUMBER))) {
-            this.currentCount += ch;
-            this.currentCmd = NUMBER;
-            this.accepting = [NUMBER, OPERATOR, MOTION, ACTION];
-        }
-        else if (!this.operator && this.isAccepting(OPERATOR) && operators[ch]) {
-            this.operator = {
-                ch: ch,
-                count: this.getCount()
-            };
-            this.currentCmd = OPERATOR;
-            this.accepting = [NUMBER, MOTION, ACTION];
-            this.exec(editor, { operator: this.operator });
-        }
-        else if (motions[ch] && this.isAccepting(MOTION)) {
-            this.currentCmd = MOTION;
-
-            var ctx = {
-                operator: this.operator,
-                motion: {
-                    ch: ch,
-                    count: this.getCount()
-                }
-            };
-
-            if (motions[ch].param)
-                this.waitForParam(ctx);
-            else
-                this.exec(editor, ctx);
-        }
-        else if (alias[ch] && this.isAccepting(MOTION)) {
-            alias[ch].operator.count = this.getCount();
-            this.exec(editor, alias[ch]);
-        }
-        else if (actions[ch] && this.isAccepting(ACTION)) {
-            var actionObj = {
-                action: {
-                    fn: actions[ch].fn,
-                    count: this.getCount()
-                }
-            };
-
-            if (actions[ch].param) {
-                this.waitForParam(actionObj);
-            }
-            else {
-                this.exec(editor, actionObj);
-            }
-
-            if (actions[ch].acceptsMotion)
-                this.idle = false;
-        }
-        else if (this.operator) {
-            this.operator.count = this.getCount();
-            this.exec(editor, { operator: this.operator }, ch);
-        }
-        else {
-            isKeyHandled = ch.length == 1;
-            this.reset();
-        }
-        
-        if (this.waitingForParam || this.motion || this.operator) {
-            this.status += ch;
-        } else if (this.currentCount) {
-            this.status = this.currentCount;
-        } else if (this.status) {
-            this.status = "";
-        }
-        if (this.status != status)
-            editor._emit("changeStatus");
-        return isKeyHandled;
-    },
-
-    waitForParam: function(cmd) {
-        this.waitingForParam = cmd;
-    },
-
-    getCount: function() {
-        var count = this.currentCount;
-        this.currentCount = "";
-        return count && parseInt(count, 10);
-    },
-
-    exec: function(editor, action, param) {
-        var m = action.motion;
-        var o = action.operator;
-        var a = action.action;
-
-        if (!param)
-            param = action.param;
-
-        if (o) {
-            this.previous = {
-                action: action,
-                param: param
-            };
-        }
-
-        if (o && !editor.selection.isEmpty()) {
-            if (operators[o.ch].selFn) {
-                operators[o.ch].selFn(editor, editor.getSelectionRange(), o.count, param);
-                this.reset();
-            }
-            return;
-        }
-        else if (!m && !a && o && param) {
-            operators[o.ch].fn(editor, null, o.count, param);
-            this.reset();
-        }
-        else if (m) {
-            var run = function(fn) {
-                if (fn && typeof fn === "function") { // There should always be a motion
-                    if (m.count && !motionObj.handlesCount)
-                        repeat(fn, m.count, [editor, null, m.count, param]);
-                    else
-                        fn(editor, null, m.count, param);
-                }
-            };
-
-            var motionObj = motions[m.ch];
-            var selectable = motionObj.sel;
-
-            if (!o) {
-                if ((util.onVisualMode || util.onVisualLineMode) && selectable)
-                    run(motionObj.sel);
-                else
-                    run(motionObj.nav);
-            }
-            else if (selectable) {
-                repeat(function() {
-                    run(motionObj.sel);
-                    operators[o.ch].fn(editor, editor.getSelectionRange(), o.count, param);
-                }, o.count || 1);
-            }
-            this.reset();
-        }
-        else if (a) {
-            a.fn(editor, editor.getSelectionRange(), a.count, param);
-            this.reset();
-        }
-        handleCursorMove(editor);
-    },
-
-    isAccepting: function(type) {
-        return this.accepting.indexOf(type) !== -1;
-    },
-
-    reset: function() {
-        this.operator = null;
-        this.motion = null;
-        this.currentCount = "";
-        this.status = "";
-        this.accepting = [NUMBER, OPERATOR, MOTION, ACTION];
-        this.idle = true;
-        this.waitingForParam = null;
-    }
-};
-
-function setPreviousCommand(fn) {
-    inputBuffer.previous = { action: { action: { fn: fn } } };
-}
-
-exports.coreCommands = {
-    start: {
-        exec: function start(editor) {
-            util.insertMode(editor);
-            setPreviousCommand(start);
-        }
-    },
-    startBeginning: {
-        exec: function startBeginning(editor) {
-            editor.navigateLineStart();
-            util.insertMode(editor);
-            setPreviousCommand(startBeginning);
-        }
-    },
-    stop: {
-        exec: function stop(editor) {
-            inputBuffer.reset();
-            util.onVisualMode = false;
-            util.onVisualLineMode = false;
-            inputBuffer.lastInsertCommands = util.normalMode(editor);
-        }
-    },
-    append: {
-        exec: function append(editor) {
-            var pos = editor.getCursorPosition();
-            var lineLen = editor.session.getLine(pos.row).length;
-            if (lineLen)
-                editor.navigateRight();
-            util.insertMode(editor);
-            setPreviousCommand(append);
-        }
-    },
-    appendEnd: {
-        exec: function appendEnd(editor) {
-            editor.navigateLineEnd();
-            util.insertMode(editor);
-            setPreviousCommand(appendEnd);
-        }
-    }
-};
-
-var handleCursorMove = exports.onCursorMove = function(editor, e) {
-    if (util.currentMode === 'insert' || handleCursorMove.running)
-        return;
-    else if(!editor.selection.isEmpty()) {
-        handleCursorMove.running = true;
-        if (util.onVisualLineMode) {
-            var originRow = editor.selection.visualLineStart;
-            var cursorRow = editor.getCursorPosition().row;
-            if(originRow <= cursorRow) {
-                var endLine = editor.session.getLine(cursorRow);
-                editor.selection.clearSelection();
-                editor.selection.moveCursorTo(originRow, 0);
-                editor.selection.selectTo(cursorRow, endLine.length);
-            } else {
-                var endLine = editor.session.getLine(originRow);
-                editor.selection.clearSelection();
-                editor.selection.moveCursorTo(originRow, endLine.length);
-                editor.selection.selectTo(cursorRow, 0);
-            }
-        }
-        handleCursorMove.running = false;
-        return;
-    }
-    else {
-        if (e && (util.onVisualLineMode || util.onVisualMode)) {
-            editor.selection.clearSelection();
-            util.normalMode(editor);
-        }
-
-        handleCursorMove.running = true;
-        var pos = editor.getCursorPosition();
-        var lineLen = editor.session.getLine(pos.row).length;
-
-        if (lineLen && pos.column === lineLen)
-            editor.navigateLeft();
-        handleCursorMove.running = false;
-    }
-};
-});
-define('ace/keyboard/vim/maps/util', ['require', 'exports', 'module' , 'ace/keyboard/vim/registers', 'ace/lib/dom'], function(require, exports, module) {
-var registers = require("../registers");
-
-var dom = require("../../../lib/dom");
-dom.importCssString('.insert-mode .ace_cursor{\
-    border-left: 2px solid #333333;\
-}\
-.ace_dark.insert-mode .ace_cursor{\
-    border-left: 2px solid #eeeeee;\
-}\
-.normal-mode .ace_cursor{\
-    border: 0!important;\
-    background-color: red;\
-    opacity: 0.5;\
-}', 'vimMode');
-
-module.exports = {
-    onVisualMode: false,
-    onVisualLineMode: false,
-    currentMode: 'normal',
-    noMode: function(editor) {
-        editor.unsetStyle('insert-mode');
-        editor.unsetStyle('normal-mode');
-        if (editor.commands.recording)
-            editor.commands.toggleRecording(editor);
-        editor.setOverwrite(false);
-    },
-    insertMode: function(editor) {
-        this.currentMode = 'insert';
-        editor.setStyle('insert-mode');
-        editor.unsetStyle('normal-mode');
-
-        editor.setOverwrite(false);
-        editor.keyBinding.$data.buffer = "";
-        editor.keyBinding.$data.state = "insertMode";
-        this.onVisualMode = false;
-        this.onVisualLineMode = false;
-        if(this.onInsertReplaySequence) {
-            editor.commands.macro = this.onInsertReplaySequence;
-            editor.commands.replay(editor);
-            this.onInsertReplaySequence = null;
-            this.normalMode(editor);
-        } else {
-            editor._emit("changeStatus");
-            if(!editor.commands.recording)
-                editor.commands.toggleRecording(editor);
-        }
-    },
-    normalMode: function(editor) {
-        this.currentMode = 'normal';
-
-        editor.unsetStyle('insert-mode');
-        editor.setStyle('normal-mode');
-        editor.clearSelection();
-
-        var pos;
-        if (!editor.getOverwrite()) {
-            pos = editor.getCursorPosition();
-            if (pos.column > 0)
-                editor.navigateLeft();
-        }
-
-        editor.setOverwrite(true);
-        editor.keyBinding.$data.buffer = "";
-        editor.keyBinding.$data.state = "start";
-        this.onVisualMode = false;
-        this.onVisualLineMode = false;
-        editor._emit("changeStatus");
-        if (editor.commands.recording) {
-            editor.commands.toggleRecording(editor);
-            return editor.commands.macro;
-        }
-        else {
-            return [];
-        }
-    },
-    visualMode: function(editor, lineMode) {
-        if (
-            (this.onVisualLineMode && lineMode)
-            || (this.onVisualMode && !lineMode)
-        ) {
-            this.normalMode(editor);
-            return;
-        }
-
-        editor.setStyle('insert-mode');
-        editor.unsetStyle('normal-mode');
-
-        editor._emit("changeStatus");
-        if (lineMode) {
-            this.onVisualLineMode = true;
-        } else {
-            this.onVisualMode = true;
-            this.onVisualLineMode = false;
-        }
-    },
-    getRightNthChar: function(editor, cursor, ch, n) {
-        var line = editor.getSession().getLine(cursor.row);
-        var matches = line.substr(cursor.column + 1).split(ch);
-
-        return n < matches.length ? matches.slice(0, n).join(ch).length : null;
-    },
-    getLeftNthChar: function(editor, cursor, ch, n) {
-        var line = editor.getSession().getLine(cursor.row);
-        var matches = line.substr(0, cursor.column).split(ch);
-
-        return n < matches.length ? matches.slice(-1 * n).join(ch).length : null;
-    },
-    toRealChar: function(ch) {
-        if (ch.length === 1)
-            return ch;
-
-        if (/^shift-./.test(ch))
-            return ch[ch.length - 1].toUpperCase();
-        else
-            return "";
-    },
-    copyLine: function(editor) {
-        var pos = editor.getCursorPosition();
-        editor.selection.clearSelection();
-        editor.moveCursorTo(pos.row, pos.column);
-        editor.selection.selectLine();
-        registers._default.isLine = true;
-        registers._default.text = editor.getCopyText().replace(/\n$/, "");
-        editor.selection.clearSelection();
-        editor.moveCursorTo(pos.row, pos.column);
-    }
-};
-});
-
-define('ace/keyboard/vim/registers', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-"never use strict";
-
-module.exports = {
-    _default: {
-        text: "",
-        isLine: false
-    }
-};
-
-});
-
-
-define('ace/keyboard/vim/maps/motions', ['require', 'exports', 'module' , 'ace/keyboard/vim/maps/util', 'ace/search', 'ace/range'], function(require, exports, module) {
-
-
-var util = require("./util");
-
-var keepScrollPosition = function(editor, fn) {
-    var scrollTopRow = editor.renderer.getScrollTopRow();
-    var initialRow = editor.getCursorPosition().row;
-    var diff = initialRow - scrollTopRow;
-    fn && fn.call(editor);
-    editor.renderer.scrollToRow(editor.getCursorPosition().row - diff);
-};
-
-function Motion(m) {
-    if (typeof m == "function") {
-        var getPos = m;
-        m = this;
-    } else {
-        var getPos = m.getPos;
-    }
-    m.nav = function(editor, range, count, param) {
-        var a = getPos(editor, range, count, param, false);
-        if (!a)
-            return;
-        editor.clearSelection();
-        editor.moveCursorTo(a.row, a.column);
-    };
-    m.sel = function(editor, range, count, param) {
-        var a = getPos(editor, range, count, param, true);
-        if (!a)
-            return;
-        editor.selection.selectTo(a.row, a.column);
-    };
-    return m;
-}
-
-var nonWordRe = /[\s.\/\\()\"'-:,.;<>~!@#$%^&*|+=\[\]{}`~?]/;
-var wordSeparatorRe = /[.\/\\()\"'-:,.;<>~!@#$%^&*|+=\[\]{}`~?]/;
-var whiteRe = /\s/;
-var StringStream = function(editor, cursor) {
-    var sel = editor.selection;
-    this.range = sel.getRange();
-    cursor = cursor || sel.selectionLead;
-    this.row = cursor.row;
-    this.col = cursor.column;
-    var line = editor.session.getLine(this.row);
-    var maxRow = editor.session.getLength();
-    this.ch = line[this.col] || '\n';
-    this.skippedLines = 0;
-
-    this.next = function() {
-        this.ch = line[++this.col] || this.handleNewLine(1);
-        return this.ch;
-    };
-    this.prev = function() {
-        this.ch = line[--this.col] || this.handleNewLine(-1);
-        return this.ch;
-    };
-    this.peek = function(dir) {
-        var ch = line[this.col + dir];
-        if (ch)
-            return ch;
-        if (dir == -1)
-            return '\n';
-        if (this.col == line.length - 1)
-            return '\n';
-        return editor.session.getLine(this.row + 1)[0] || '\n';
-    };
-
-    this.handleNewLine = function(dir) {
-        if (dir == 1){
-            if (this.col == line.length)
-                return '\n';
-            if (this.row == maxRow - 1)
-                return '';
-            this.col = 0;
-            this.row ++;
-            line = editor.session.getLine(this.row);
-            this.skippedLines++;
-            return line[0] || '\n';
-        }
-        if (dir == -1) {
-            if (this.row === 0)
-                return '';
-            this.row --;
-            line = editor.session.getLine(this.row);
-            this.col = line.length;
-            this.skippedLines--;
-            return '\n';
-        }
-    };
-    this.debug = function() {
-        console.log(line.substring(0, this.col)+'|'+this.ch+'\''+this.col+'\''+line.substr(this.col+1));
-    };
-};
-
-var Search = require("../../../search").Search;
-var search = new Search();
-
-function find(editor, needle, dir) {
-    search.$options.needle = needle;
-    search.$options.backwards = dir == -1;
-    return search.find(editor.session);
-}
-
-var Range = require("../../../range").Range;
-
-var LAST_SEARCH_MOTION = {};
-
-module.exports = {
-    "w": new Motion(function(editor) {
-        var str = new StringStream(editor);
-
-        if (str.ch && wordSeparatorRe.test(str.ch)) {
-            while (str.ch && wordSeparatorRe.test(str.ch))
-                str.next();
-        } else {
-            while (str.ch && !nonWordRe.test(str.ch))
-                str.next();
-        }
-        while (str.ch && whiteRe.test(str.ch) && str.skippedLines < 2)
-            str.next();
-
-        str.skippedLines == 2 && str.prev();
-        return {column: str.col, row: str.row};
-    }),
-    "W": new Motion(function(editor) {
-        var str = new StringStream(editor);
-        while(str.ch && !(whiteRe.test(str.ch) && !whiteRe.test(str.peek(1))) && str.skippedLines < 2)
-            str.next();
-        if (str.skippedLines == 2)
-            str.prev();
-        else
-            str.next();
-
-        return {column: str.col, row: str.row};
-    }),
-    "b": new Motion(function(editor) {
-        var str = new StringStream(editor);
-
-        str.prev();
-        while (str.ch && whiteRe.test(str.ch) && str.skippedLines > -2)
-            str.prev();
-
-        if (str.ch && wordSeparatorRe.test(str.ch)) {
-            while (str.ch && wordSeparatorRe.test(str.ch))
-                str.prev();
-        } else {
-            while (str.ch && !nonWordRe.test(str.ch))
-                str.prev();
-        }
-        str.ch && str.next();
-        return {column: str.col, row: str.row};
-    }),
-    "B": new Motion(function(editor) {
-        var str = new StringStream(editor);
-        str.prev();
-        while(str.ch && !(!whiteRe.test(str.ch) && whiteRe.test(str.peek(-1))) && str.skippedLines > -2)
-            str.prev();
-
-        if (str.skippedLines == -2)
-            str.next();
-
-        return {column: str.col, row: str.row};
-    }),
-    "e": new Motion(function(editor) {
-        var str = new StringStream(editor);
-
-        str.next();
-        while (str.ch && whiteRe.test(str.ch))
-            str.next();
-
-        if (str.ch && wordSeparatorRe.test(str.ch)) {
-            while (str.ch && wordSeparatorRe.test(str.ch))
-                str.next();
-        } else {
-            while (str.ch && !nonWordRe.test(str.ch))
-                str.next();
-        }
-        str.ch && str.prev();
-        return {column: str.col, row: str.row};
-    }),
-    "E": new Motion(function(editor) {
-        var str = new StringStream(editor);
-        str.next();
-        while(str.ch && !(!whiteRe.test(str.ch) && whiteRe.test(str.peek(1))))
-            str.next();
-
-        return {column: str.col, row: str.row};
-    }),
-
-    "l": {
-        nav: function(editor) {
-            var pos = editor.getCursorPosition();
-            var col = pos.column;
-            var lineLen = editor.session.getLine(pos.row).length;
-            if (lineLen && col !== lineLen)
-                editor.navigateRight();
-        },
-        sel: function(editor) {
-            var pos = editor.getCursorPosition();
-            var col = pos.column;
-            var lineLen = editor.session.getLine(pos.row).length;
-            if (lineLen && col !== lineLen) //In selection mode you can select the newline
-                editor.selection.selectRight();
-        }
-    },
-    "h": {
-        nav: function(editor) {
-            var pos = editor.getCursorPosition();
-            if (pos.column > 0)
-                editor.navigateLeft();
-        },
-        sel: function(editor) {
-            var pos = editor.getCursorPosition();
-            if (pos.column > 0)
-                editor.selection.selectLeft();
-        }
-    },
-    "H": {
-        nav: function(editor) {
-            var row = editor.renderer.getScrollTopRow();
-            editor.moveCursorTo(row);
-        },
-        sel: function(editor) {
-            var row = editor.renderer.getScrollTopRow();
-            editor.selection.selectTo(row);
-        }
-    },
-    "M": {
-        nav: function(editor) {
-            var topRow = editor.renderer.getScrollTopRow();
-            var bottomRow = editor.renderer.getScrollBottomRow();
-            var row = topRow + ((bottomRow - topRow) / 2);
-            editor.moveCursorTo(row);
-        },
-        sel: function(editor) {
-            var topRow = editor.renderer.getScrollTopRow();
-            var bottomRow = editor.renderer.getScrollBottomRow();
-            var row = topRow + ((bottomRow - topRow) / 2);
-            editor.selection.selectTo(row);
-        }
-    },
-    "L": {
-        nav: function(editor) {
-            var row = editor.renderer.getScrollBottomRow();
-            editor.moveCursorTo(row);
-        },
-        sel: function(editor) {
-            var row = editor.renderer.getScrollBottomRow();
-            editor.selection.selectTo(row);
-        }
-    },
-    "k": {
-        nav: function(editor) {
-            editor.navigateUp();
-        },
-        sel: function(editor) {
-            editor.selection.selectUp();
-        }
-    },
-    "j": {
-        nav: function(editor) {
-            editor.navigateDown();
-        },
-        sel: function(editor) {
-            editor.selection.selectDown();
-        }
-    },
-
-    "i": {
-        param: true,
-        sel: function(editor, range, count, param) {
-            switch (param) {
-                case "w":
-                    editor.selection.selectWord();
-                    break;
-                case "W":
-                    editor.selection.selectAWord();
-                    break;
-                case "(":
-                case "{":
-                case "[":
-                    var cursor = editor.getCursorPosition();
-                    var end = editor.session.$findClosingBracket(param, cursor, /paren/);
-                    if (!end)
-                        return;
-                    var start = editor.session.$findOpeningBracket(editor.session.$brackets[param], cursor, /paren/);
-                    if (!start)
-                        return;
-                    start.column ++;
-                    editor.selection.setSelectionRange(Range.fromPoints(start, end));
-                    break;
-                case "'":
-                case '"':
-                case "/":
-                    var end = find(editor, param, 1);
-                    if (!end)
-                        return;
-                    var start = find(editor, param, -1);
-                    if (!start)
-                        return;
-                    editor.selection.setSelectionRange(Range.fromPoints(start.end, end.start));
-                    break;
-            }
-        }
-    },
-    "a": {
-        param: true,
-        sel: function(editor, range, count, param) {
-            switch (param) {
-                case "w":
-                    editor.selection.selectAWord();
-                    break;
-                case "W":
-                    editor.selection.selectAWord();
-                    break;
-                case "(":
-                case "{":
-                case "[":
-                    var cursor = editor.getCursorPosition();
-                    var end = editor.session.$findClosingBracket(param, cursor, /paren/);
-                    if (!end)
-                        return;
-                    var start = editor.session.$findOpeningBracket(editor.session.$brackets[param], cursor, /paren/);
-                    if (!start)
-                        return;
-                    end.column ++;
-                    editor.selection.setSelectionRange(Range.fromPoints(start, end));
-                    break;
-                case "'":
-                case "\"":
-                case "/":
-                    var end = find(editor, param, 1);
-                    if (!end)
-                        return;
-                    var start = find(editor, param, -1);
-                    if (!start)
-                        return;
-                    end.column ++;
-                    editor.selection.setSelectionRange(Range.fromPoints(start.start, end.end));
-                    break;
-            }
-        }
-    },
-
-    "f": new Motion({
-        param: true,
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel, isRepeat) {
-            if (!isRepeat)
-                LAST_SEARCH_MOTION = {ch: "f", param: param};
-            var cursor = editor.getCursorPosition();
-            var column = util.getRightNthChar(editor, cursor, param, count || 1);
-
-            if (typeof column === "number") {
-                cursor.column += column + (isSel ? 2 : 1);
-                return cursor;
-            }
-        }
-    }),
-    "F": new Motion({
-        param: true,
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel, isRepeat) {
-            if (!isRepeat)
-                LAST_SEARCH_MOTION = {ch: "F", param: param};
-            var cursor = editor.getCursorPosition();
-            var column = util.getLeftNthChar(editor, cursor, param, count || 1);
-
-            if (typeof column === "number") {
-                cursor.column -= column + 1;
-                return cursor;
-            }
-        }
-    }),
-    "t": new Motion({
-        param: true,
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel, isRepeat) {
-            if (!isRepeat)
-                LAST_SEARCH_MOTION = {ch: "t", param: param};
-            var cursor = editor.getCursorPosition();
-            var column = util.getRightNthChar(editor, cursor, param, count || 1);
-
-            if (isRepeat && column == 0 && !(count > 1))
-                var column = util.getRightNthChar(editor, cursor, param, 2);
-                
-            if (typeof column === "number") {
-                cursor.column += column + (isSel ? 1 : 0);
-                return cursor;
-            }
-        }
-    }),
-    "T": new Motion({
-        param: true,
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel, isRepeat) {
-            if (!isRepeat)
-                LAST_SEARCH_MOTION = {ch: "T", param: param};
-            var cursor = editor.getCursorPosition();
-            var column = util.getLeftNthChar(editor, cursor, param, count || 1);
-
-            if (isRepeat && column == 0 && !(count > 1))
-                var column = util.getLeftNthChar(editor, cursor, param, 2);
-            
-            if (typeof column === "number") {
-                cursor.column -= column;
-                return cursor;
-            }
-        }
-    }),
-    ";": new Motion({
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel) {
-            var ch = LAST_SEARCH_MOTION.ch;
-            if (!ch)
-                return;
-            return module.exports[ch].getPos(
-                editor, range, count, LAST_SEARCH_MOTION.param, isSel, true
-            );
-        }
-    }),
-    ",": new Motion({
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel) {
-            var ch = LAST_SEARCH_MOTION.ch;
-            if (!ch)
-                return;
-            var up = ch.toUpperCase();
-            ch = ch === up ? ch.toLowerCase() : up;
-            
-            return module.exports[ch].getPos(
-                editor, range, count, LAST_SEARCH_MOTION.param, isSel, true
-            );
-        }
-    }),
-
-    "^": {
-        nav: function(editor) {
-            editor.navigateLineStart();
-        },
-        sel: function(editor) {
-            editor.selection.selectLineStart();
-        }
-    },
-    "$": {
-        nav: function(editor) {
-            editor.navigateLineEnd();
-        },
-        sel: function(editor) {
-            editor.selection.selectLineEnd();
-        }
-    },
-    "0": new Motion(function(ed) {
-        return {row: ed.selection.lead.row, column: 0};
-    }),
-    "G": {
-        nav: function(editor, range, count, param) {
-            if (!count && count !== 0) { // Stupid JS
-                count = editor.session.getLength();
-            }
-            editor.gotoLine(count);
-        },
-        sel: function(editor, range, count, param) {
-            if (!count && count !== 0) { // Stupid JS
-                count = editor.session.getLength();
-            }
-            editor.selection.selectTo(count, 0);
-        }
-    },
-    "g": {
-        param: true,
-        nav: function(editor, range, count, param) {
-            switch(param) {
-                case "m":
-                    console.log("Middle line");
-                    break;
-                case "e":
-                    console.log("End of prev word");
-                    break;
-                case "g":
-                    editor.gotoLine(count || 0);
-                case "u":
-                    editor.gotoLine(count || 0);
-                case "U":
-                    editor.gotoLine(count || 0);
-            }
-        },
-        sel: function(editor, range, count, param) {
-            switch(param) {
-                case "m":
-                    console.log("Middle line");
-                    break;
-                case "e":
-                    console.log("End of prev word");
-                    break;
-                case "g":
-                    editor.selection.selectTo(count || 0, 0);
-            }
-        }
-    },
-    "o": {
-        nav: function(editor, range, count, param) {
-            count = count || 1;
-            var content = "";
-            while (0 < count--)
-                content += "\n";
-
-            if (content.length) {
-                editor.navigateLineEnd()
-                editor.insert(content);
-                util.insertMode(editor);
-            }
-        }
-    },
-    "O": {
-        nav: function(editor, range, count, param) {
-            var row = editor.getCursorPosition().row;
-            count = count || 1;
-            var content = "";
-            while (0 < count--)
-                content += "\n";
-
-            if (content.length) {
-                if(row > 0) {
-                    editor.navigateUp();
-                    editor.navigateLineEnd()
-                    editor.insert(content);
-                } else {
-                    editor.session.insert({row: 0, column: 0}, content);
-                    editor.navigateUp();
-                }
-                util.insertMode(editor);
-            }
-        }
-    },
-    "%": new Motion(function(editor){
-        var brRe = /[\[\]{}()]/g;
-        var cursor = editor.getCursorPosition();
-        var ch = editor.session.getLine(cursor.row)[cursor.column];
-        if (!brRe.test(ch)) {
-            var range = find(editor, brRe);
-            if (!range)
-                return;
-            cursor = range.start;
-        }
-        var match = editor.session.findMatchingBracket({
-            row: cursor.row,
-            column: cursor.column + 1
-        });
-
-        return match;
-    }),
-    "{": new Motion(function(ed) {
-        var session = ed.session;
-        var row = session.selection.lead.row;
-        while(row > 0 && !/\S/.test(session.getLine(row)))
-            row--;
-        while(/\S/.test(session.getLine(row)))
-            row--;
-        return {column: 0, row: row};
-    }),
-    "}": new Motion(function(ed) {
-        var session = ed.session;
-        var l = session.getLength();
-        var row = session.selection.lead.row;
-        while(row < l && !/\S/.test(session.getLine(row)))
-            row++;
-        while(/\S/.test(session.getLine(row)))
-            row++;
-        return {column: 0, row: row};
-    }),
-    "ctrl-d": {
-        nav: function(editor, range, count, param) {
-            editor.selection.clearSelection();
-            keepScrollPosition(editor, editor.gotoPageDown);
-        },
-        sel: function(editor, range, count, param) {
-            keepScrollPosition(editor, editor.selectPageDown);
-        }
-    },
-    "ctrl-u": {
-        nav: function(editor, range, count, param) {
-            editor.selection.clearSelection();
-            keepScrollPosition(editor, editor.gotoPageUp);
-        },
-        sel: function(editor, range, count, param) {
-            keepScrollPosition(editor, editor.selectPageUp);
-        }
-    },
-    "`": new Motion({
-        param: true,
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel) {
-            var s = editor.session;
-            var marker = s.vimMarkers && s.vimMarkers[param];
-            if (marker) {
-                return marker.getPosition();
-            }
-        }
-    }),
-    "'": new Motion({
-        param: true,
-        handlesCount: true,
-        getPos: function(editor, range, count, param, isSel) {
-            var s = editor.session;
-            var marker = s.vimMarkers && s.vimMarkers[param];
-            if (marker) {
-                var pos = marker.getPosition();
-                var line = editor.session.getLine(pos.row);                
-                pos.column = line.search(/\S/);
-                if (pos.column == -1)
-                    pos.column = line.length;
-                return pos;
-            }
-        }
-    })
-};
-
-module.exports.backspace = module.exports.left = module.exports.h;
-module.exports.space = module.exports['return'] = module.exports.right = module.exports.l;
-module.exports.up = module.exports.k;
-module.exports.down = module.exports.j;
-module.exports.pagedown = module.exports["ctrl-d"];
-module.exports.pageup = module.exports["ctrl-u"];
-
-});
- 
-define('ace/keyboard/vim/maps/operators', ['require', 'exports', 'module' , 'ace/keyboard/vim/maps/util', 'ace/keyboard/vim/registers'], function(require, exports, module) {
-
-
-
-var util = require("./util");
-var registers = require("../registers");
-
-module.exports = {
-    "d": {
-        selFn: function(editor, range, count, param) {
-            registers._default.text = editor.getCopyText();
-            registers._default.isLine = util.onVisualLineMode;
-            if(util.onVisualLineMode)
-                editor.removeLines();
-            else
-                editor.session.remove(range);
-            util.normalMode(editor);
-        },
-        fn: function(editor, range, count, param) {
-            count = count || 1;
-            switch (param) {
-                case "d":
-                    registers._default.text = "";
-                    registers._default.isLine = true;
-                    for (var i = 0; i < count; i++) {
-                        editor.selection.selectLine();
-                        registers._default.text += editor.getCopyText();
-                        var selRange = editor.getSelectionRange();
-                        if (!selRange.isMultiLine()) {
-                            var row = selRange.start.row - 1;
-                            var col = editor.session.getLine(row).length
-                            selRange.setStart(row, col);
-                            editor.session.remove(selRange);
-                            editor.selection.clearSelection();
-                            break;
-                        }
-                        editor.session.remove(selRange);
-                        editor.selection.clearSelection();
-                    }
-                    registers._default.text = registers._default.text.replace(/\n$/, "");
-                    break;
-                default:
-                    if (range) {
-                        editor.selection.setSelectionRange(range);
-                        registers._default.text = editor.getCopyText();
-                        registers._default.isLine = false;
-                        editor.session.remove(range);
-                        editor.selection.clearSelection();
-                    }
-            }
-        }
-    },
-    "c": {
-        selFn: function(editor, range, count, param) {
-            editor.session.remove(range);
-            util.insertMode(editor);
-        },
-        fn: function(editor, range, count, param) {
-            count = count || 1;
-            switch (param) {
-                case "c":
-                    for (var i = 0; i < count; i++) {
-                        editor.removeLines();
-                        util.insertMode(editor);
-                    }
-
-                    break;
-                default:
-                    if (range) {
-                        editor.session.remove(range);
-                        util.insertMode(editor);
-                    }
-            }
-        }
-    },
-    "y": {
-        selFn: function(editor, range, count, param) {
-            registers._default.text = editor.getCopyText();
-            registers._default.isLine = util.onVisualLineMode;
-            editor.selection.clearSelection();
-            util.normalMode(editor);
-        },
-        fn: function(editor, range, count, param) {
-            count = count || 1;
-            switch (param) {
-                case "y":
-                    var pos = editor.getCursorPosition();
-                    editor.selection.selectLine();
-                    for (var i = 0; i < count - 1; i++) {
-                        editor.selection.moveCursorDown();
-                    }
-                    registers._default.text = editor.getCopyText().replace(/\n$/, "");
-                    editor.selection.clearSelection();
-                    registers._default.isLine = true;
-                    editor.moveCursorToPosition(pos);
-                    break;
-                default:
-                    if (range) {
-                        var pos = editor.getCursorPosition();
-                        editor.selection.setSelectionRange(range);
-                        registers._default.text = editor.getCopyText();
-                        registers._default.isLine = false;
-                        editor.selection.clearSelection();
-                        editor.moveCursorTo(pos.row, pos.column);
-                    }
-            }
-        }
-    },
-    ">": {
-        selFn: function(editor, range, count, param) {
-            count = count || 1;
-            for (var i = 0; i < count; i++) {
-                editor.indent();
-            }
-            util.normalMode(editor);
-        },
-        fn: function(editor, range, count, param) {
-            count = parseInt(count || 1, 10);
-            switch (param) {
-                case ">":
-                    var pos = editor.getCursorPosition();
-                    editor.selection.selectLine();
-                    for (var i = 0; i < count - 1; i++) {
-                        editor.selection.moveCursorDown();
-                    }
-                    editor.indent();
-                    editor.selection.clearSelection();
-                    editor.moveCursorToPosition(pos);
-                    editor.navigateLineEnd();
-                    editor.navigateLineStart();
-                    break;
-            }
-        }
-    },
-    "<": {
-        selFn: function(editor, range, count, param) {
-            count = count || 1;
-            for (var i = 0; i < count; i++) {
-                editor.blockOutdent();
-            }
-            util.normalMode(editor);
-        },
-        fn: function(editor, range, count, param) {
-            count = count || 1;
-            switch (param) {
-                case "<":
-                    var pos = editor.getCursorPosition();
-                    editor.selection.selectLine();
-                    for (var i = 0; i < count - 1; i++) {
-                        editor.selection.moveCursorDown();
-                    }
-                    editor.blockOutdent();
-                    editor.selection.clearSelection();
-                    editor.moveCursorToPosition(pos);
-                    editor.navigateLineEnd();
-                    editor.navigateLineStart();
-                    break;
-            }
-        }
-    }
-};
-});
- 
-"use strict"
-
-define('ace/keyboard/vim/maps/aliases', ['require', 'exports', 'module' ], function(require, exports, module) {
-module.exports = {
-    "x": {
-        operator: {
-            ch: "d",
-            count: 1
-        },
-        motion: {
-            ch: "l",
-            count: 1
-        }
-    },
-    "X": {
-        operator: {
-            ch: "d",
-            count: 1
-        },
-        motion: {
-            ch: "h",
-            count: 1
-        }
-    },
-    "D": {
-        operator: {
-            ch: "d",
-            count: 1
-        },
-        motion: {
-            ch: "$",
-            count: 1
-        }
-    },
-    "C": {
-        operator: {
-            ch: "c",
-            count: 1
-        },
-        motion: {
-            ch: "$",
-            count: 1
-        }
-    },
-    "s": {
-        operator: {
-            ch: "c",
-            count: 1
-        },
-        motion: {
-            ch: "l",
-            count: 1
-        }
-    },
-    "S": {
-        operator: {
-            ch: "c",
-            count: 1
-        },
-        param: "c"
-    }
-};
-});
-
diff --git a/try/ace/mode-abap.js b/try/ace/mode-abap.js
deleted file mode 100644
index c7cd0cb..0000000
--- a/try/ace/mode-abap.js
+++ /dev/null
@@ -1,260 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/abap', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/abap_highlight_rules', 'ace/mode/folding/coffee', 'ace/range', 'ace/mode/text', 'ace/lib/oop'], function(require, exports, module) {
-
-
-var Tokenizer = require("../tokenizer").Tokenizer;
-var Rules = require("./abap_highlight_rules").AbapHighlightRules;
-var FoldMode = require("./folding/coffee").FoldMode;
-var Range = require("../range").Range;
-var TextMode = require("./text").Mode;
-var oop = require("../lib/oop");
-
-function Mode() {
-    this.$tokenizer = new Tokenizer(new Rules().getRules());
-    this.foldingRules = new FoldMode();
-}
-
-oop.inherits(Mode, TextMode);
-
-(function() {
-    
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        return indent;
-    };
-    
-    this.toggleCommentLines = function(state, doc, startRow, endRow){
-        var range = new Range(0, 0, 0, 0);
-        for (var i = startRow; i <= endRow; ++i) {
-            var line = doc.getLine(i);
-            if (hereComment.test(line))
-                continue;
-                
-            if (commentLine.test(line))
-                line = line.replace(commentLine, '$1');
-            else
-                line = line.replace(indentation, '$&#');
-    
-            range.end.row = range.start.row = i;
-            range.end.column = line.length + 1;
-            doc.replace(range, line);
-        }
-    };
-    
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/abap_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var AbapHighlightRules = function() {
-
-    var keywordMapper = this.createKeywordMapper({
-        "variable.language": "this",
-        "keyword": 
-            "ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT BACK" +
-            " CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY" +
-            " DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO" +
-            " ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT" +
-            " FETCH FIELDS FORM FORMAT FREE FROM FUNCTION" +
-            " GENERATE GET" +
-            " HIDE" +
-            " IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION" +
-            " LEAVE LIKE LINE LOAD LOCAL LOOP" +
-            " MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY" +
-            " ON OVERLAY OPTIONAL OTHERS" +
-            " PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT" +
-            " RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK" +
-            " SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS" +
-            " TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES" +
-            " UNASSIGN ULINE UNPACK UPDATE" +
-            " WHEN WHILE WINDOW WRITE" +
-            " OCCURS STRUCTURE OBJECT PROPERTY" +
-            " CASTING APPEND RAISING VALUE COLOR" +
-            " CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT" +
-            " ID NUMBER FOR TITLE OUTPUT" +
-            " WITH EXIT USING" +
-            " INTO WHERE GROUP BY HAVING ORDER BY SINGLE" +
-            " APPENDING CORRESPONDING FIELDS OF TABLE" +
-            " LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING" +
-            " EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN",
-        "constant.language": 
-            "TRUE FALSE NULL SPACE",
-        "support.type": 
-            "c n i p f d t x string xstring decfloat16 decfloat34",
-        "keyword.operator":
-            "abs sign ceil floor trunc frac acos asin atan cos sin tan" +
-            " abapOperator cosh sinh tanh exp log log10 sqrt" +
-            " strlen xstrlen charlen numofchar dbmaxlen lines" 
-    }, "text", true, " ");
-
-    var compoundKeywords = "WITH\\W+(?:HEADER\\W+LINE|FRAME|KEY)|NO\\W+STANDARD\\W+PAGE\\W+HEADING|"+
-        "EXIT\\W+FROM\\W+STEP\\W+LOOP|BEGIN\\W+OF\\W+(?:BLOCK|LINE)|BEGIN\\W+OF|"+
-        "END\\W+OF\\W+(?:BLOCK|LINE)|END\\W+OF|NO\\W+INTERVALS|"+
-        "RESPECTING\\W+BLANKS|SEPARATED\\W+BY|USING\\W+(?:EDIT\\W+MASK)|"+
-        "WHERE\\W+(?:LINE)|RADIOBUTTON\\W+GROUP|REF\\W+TO|"+
-        "(?:PUBLIC|PRIVATE|PROTECTED)(?:\\W+SECTION)?|DELETING\\W+(?:TRAILING|LEADING)"+
-        "(?:ALL\\W+OCCURRENCES)|(?:FIRST|LAST)\\W+OCCURRENCE|INHERITING\\W+FROM|"+
-        "LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|"+
-        "CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|"+
-        "FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|"+
-        "NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|"+
-        "START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|"+
-        "TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|"+
-        "IS\\W+(?:NOT\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)";
-     
-    this.$rules = {
-        "start" : [
-            {token : "string", regex : "`", next  : "string"},
-            {token : "string", regex : "'", next  : "qstring"},
-            {token : "doc.comment", regex : /^\*.+/},
-            {token : "comment",  regex : /".+$/},
-            {token : "invalid", regex: "\\.{2,}"},
-            {token : "keyword.operator", regex: /\W[\-+\%=<>*]\W|\*\*|[~:,\.&$]|->*?|=>/},
-            {token : "paren.lparen", regex : "[\\[({]"},
-            {token : "paren.rparen", regex : "[\\])}]"},
-            {token : "constant.numeric", regex: "[+-]?\\d+\\b"},
-            {token : "variable.parameter", regex : /sy|pa?\d\d\d\d\|t\d\d\d\.|innnn/}, 
-            {token : "keyword", regex : compoundKeywords}, 
-            {token : "variable.parameter", regex : /\w+-\w+(?:-\w+)*/}, 
-            {token : keywordMapper, regex : "\\b\\w+\\b"},
-            {caseInsensitive: true}
-        ],
-        "qstring" : [
-            {token : "constant.language.escape",   regex : "''"},
-            {token : "string", regex : "'",     next  : "start"},
-            {defaultToken : "string"}
-        ],
-        "string" : [
-            {token : "constant.language.escape",   regex : "``"},
-            {token : "string", regex : "`",     next  : "start"},
-            {defaultToken : "string"}
-        ]
-    }
-};
-oop.inherits(AbapHighlightRules, TextHighlightRules);
-
-exports.AbapHighlightRules = AbapHighlightRules;
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-ada.js b/try/ace/mode-ada.js
deleted file mode 100644
index e7fc952..0000000
--- a/try/ace/mode-ada.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/ada', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/ada_highlight_rules', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var AdaHighlightRules = require("./ada_highlight_rules").AdaHighlightRules;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new AdaHighlightRules().getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "--";
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/ada_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var AdaHighlightRules = function() {
-var keywords = "abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|" +
-"access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|" +
-"array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|" +
-"body|private|then|if|procedure|type|case|in|protected|constant|interface|until|" +
-"|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor";
-
-    var builtinConstants = (
-        "true|false|null"
-    );
-
-    var builtinFunctions = (
-        "count|min|max|avg|sum|rank|now|coalesce|main"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": builtinFunctions,
-        "keyword": keywords,
-        "constant.language": builtinConstants
-    }, "identifier", true);
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment",
-            regex : "--.*$"
-        }, {
-            token : "string",           // " string
-            regex : '".*?"'
-        }, {
-            token : "string",           // ' string
-            regex : "'.*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\(]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\)]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ]
-    };
-};
-
-oop.inherits(AdaHighlightRules, TextHighlightRules);
-
-exports.AdaHighlightRules = AdaHighlightRules;
-});
\ No newline at end of file
diff --git a/try/ace/mode-asciidoc.js b/try/ace/mode-asciidoc.js
deleted file mode 100644
index 769b989..0000000
--- a/try/ace/mode-asciidoc.js
+++ /dev/null
@@ -1,372 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/asciidoc', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/asciidoc_highlight_rules', 'ace/mode/folding/asciidoc'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var AsciidocHighlightRules = require("./asciidoc_highlight_rules").AsciidocHighlightRules;
-var AsciidocFoldMode = require("./folding/asciidoc").FoldMode;
-
-var Mode = function() {
-    var highlighter = new AsciidocHighlightRules();
-    
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-    this.foldingRules = new AsciidocFoldMode();    
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.getNextLineIndent = function(state, line, tab) {
-        if (state == "listblock") {
-            var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);
-            if (match) {
-                return new Array(match[1].length + 1).join(" ") + match[2];
-            } else {
-                return "";
-            }
-        } else {
-            return this.$getIndent(line);
-        }
-    };
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/asciidoc_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var AsciidocHighlightRules = function() {
-    var identifierRe = "[a-zA-Z\u00a1-\uffff]+\\b";
-
-    this.$rules = {
-        "start": [
-            {token: "empty",   regex: /$/},
-            {token: "literal", regex: /^\.{4,}\s*$/,  next: "listingBlock"},
-            {token: "literal", regex: /^-{4,}\s*$/,   next: "literalBlock"},
-            {token: "string",  regex: /^\+{4,}\s*$/,  next: "passthroughBlock"},
-            {token: "keyword", regex: /^={4,}\s*$/},
-            {token: "text",    regex: /^\s*$/},
-            {token: "empty", regex: "", next: "dissallowDelimitedBlock"}
-        ],
-
-        "dissallowDelimitedBlock": [
-            {include: "paragraphEnd"},
-            {token: "comment", regex: '^//.+$'},
-            {token: "keyword", regex: "^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):"},
-
-            {include: "listStart"},
-            {token: "literal", regex: /^\s+.+$/, next: "indentedBlock"},
-            {token: "empty",   regex: "", next: "text"}
-        ],
-
-        "paragraphEnd": [
-            {token: "doc.comment", regex: /^\/{4,}\s*$/,    next: "commentBlock"},
-            {token: "tableBlock",  regex: /^\s*[|!]=+\s*$/, next: "tableBlock"},
-            {token: "keyword",     regex: /^(?:--|''')\s*$/, next: "start"},
-            {token: "option",      regex: /^\[.*\]\s*$/,     next: "start"},
-            {token: "pageBreak",   regex: /^>{3,}$/,         next: "start"},
-            {token: "literal",     regex: /^\.{4,}\s*$/,     next: "listingBlock"},
-            {token: "titleUnderline",    regex: /^(?:={2,}|-{2,}|~{2,}|\^{2,}|\+{2,})\s*$/, next: "start"},
-            {token: "singleLineTitle",   regex: /^={1,5}\s+\S.*$/, next: "start"},
-
-            {token: "otherBlock",    regex: /^(?:\*{2,}|_{2,})\s*$/, next: "start"},
-            {token: "optionalTitle", regex: /^\.[^.\s].+$/,  next: "start"}
-        ],
-
-        "listStart": [
-            {token: "keyword",  regex: /^\s*(?:\d+\.|[a-zA-Z]\.|[ixvmIXVM]+\)|\*{1,5}|-|\.{1,5})\s/, next: "listText"},
-            {token: "meta.tag", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: "listText"},
-            {token: "support.function.list.callout", regex: /^(?:<\d+>|\d+>|>) /, next: "text"},
-            {token: "keyword",  regex: /^\+\s*$/, next: "start"}
-        ],
-
-        "text": [
-            {token: ["link", "variable.language"], regex: /((?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+)(\[.*?\])/},
-            {token: "link", regex: /(?:https?:\/\/|ftp:\/\/|file:\/\/|mailto:|callto:)[^\s\[]+/},
-            {token: "link", regex: /\b[\w\.\/\-]+@[\w\.\/\-]+\b/},
-            {include: "macros"},
-            {include: "paragraphEnd"},
-            {token: "literal", regex:/\+{3,}/, next:"smallPassthrough"},
-            {token: "escape", regex: /\((?:C|TM|R)\)|\.{3}|->|<-|=>|<=|&#(?:\d+|x[a-fA-F\d]+);|(?: |^)--(?=\s+\S)/},
-            {token: "escape", regex: /\\[_*'`+#]|\\{2}[_*'`+#]{2}/},
-            {token: "keyword", regex: /\s\+$/},
-            {token: "text", regex: identifierRe},
-            {token: ["keyword", "string", "keyword"],
-                regex: /(<<[\w\d\-$]+,)(.*?)(>>|$)/},
-            {token: "keyword", regex: /<<[\w\d\-$]+,?|>>/},
-            {token: "constant.character", regex: /\({2,3}.*?\){2,3}/},
-            {token: "keyword", regex: /\[\[.+?\]\]/},
-            {token: "support", regex: /^\[{3}[\w\d =\-]+\]{3}/},
-
-            {include: "quotes"},
-            {token: "empty", regex: /^\s*$/, next: "start"}
-        ],
-
-        "listText": [
-            {include: "listStart"},
-            {include: "text"}
-        ],
-
-        "indentedBlock": [
-            {token: "literal", regex: /^[\s\w].+$/, next: "indentedBlock"},
-            {token: "literal", regex: "", next: "start"}
-        ],
-
-        "listingBlock": [
-            {token: "literal", regex: /^\.{4,}\s*$/, next: "dissallowDelimitedBlock"},
-            {token: "constant.numeric", regex: '<\\d+>'},
-            {token: "literal", regex: '[^<]+'},
-            {token: "literal", regex: '<'}
-        ],
-        "literalBlock": [
-            {token: "literal", regex: /^-{4,}\s*$/, next: "dissallowDelimitedBlock"},
-            {token: "constant.numeric", regex: '<\\d+>'},
-            {token: "literal", regex: '[^<]+'},
-            {token: "literal", regex: '<'}
-        ],
-        "passthroughBlock": [
-            {token: "literal", regex: /^\+{4,}\s*$/, next: "dissallowDelimitedBlock"},
-            {token: "literal", regex: identifierRe + "|\\d+"},
-            {include: "macros"},
-            {token: "literal", regex: "."}
-        ],
-
-        "smallPassthrough": [
-            {token: "literal", regex: /[+]{3,}/, next: "dissallowDelimitedBlock"},
-            {token: "literal", regex: /^\s*$/, next: "dissallowDelimitedBlock"},
-            {token: "literal", regex: identifierRe + "|\\d+"},
-            {include: "macros"}
-        ],
-
-        "commentBlock": [
-            {token: "doc.comment", regex: /^\/{4,}\s*$/, next: "dissallowDelimitedBlock"},
-            {token: "doc.comment", regex: '^.*$'}
-        ],
-        "tableBlock": [
-            {token: "tableBlock", regex: /^\s*\|={3,}\s*$/, next: "dissallowDelimitedBlock"},
-            {token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "innerTableBlock"},
-            {token: "tableBlock", regex: /\|/},
-            {include: "text", noEscape: true}
-        ],
-        "innerTableBlock": [
-            {token: "tableBlock", regex: /^\s*!={3,}\s*$/, next: "tableBlock"},
-            {token: "tableBlock", regex: /^\s*|={3,}\s*$/, next: "dissallowDelimitedBlock"},
-            {token: "tableBlock", regex: /\!/}
-        ],
-        "macros": [
-            {token: "macro", regex: /{[\w\-$]+}/},
-            {token: ["text", "string", "text", "constant.character", "text"], regex: /({)([\w\-$]+)(:)?(.+)?(})/},
-            {token: ["text", "markup.list.macro", "keyword", "string"], regex: /(\w+)(footnote(?:ref)?::?)([^\s\[]+)?(\[.*?\])?/},
-            {token: ["markup.list.macro", "keyword", "string"], regex: /([a-zA-Z\-][\w\.\/\-]*::?)([^\s\[]+)(\[.*?\])?/},
-            {token: ["markup.list.macro", "keyword"], regex: /([a-zA-Z\-][\w\.\/\-]+::?)(\[.*?\])/},
-            {token: "keyword",     regex: /^:.+?:(?= |$)/}
-        ],
-
-        "quotes": [
-            {token: "string.italic", regex: /__[^_\s].*?__/},
-            {token: "string.italic", regex: quoteRule("_")},
-            
-            {token: "keyword.bold", regex: /\*\*[^*\s].*?\*\*/},
-            {token: "keyword.bold", regex: quoteRule("\\*")},
-            
-            {token: "literal", regex: quoteRule("\\+")},
-            {token: "literal", regex: /\+\+[^+\s].*?\+\+/},
-            {token: "literal", regex: /\$\$.+?\$\$/},
-            {token: "literal", regex: quoteRule("`")},
-
-            {token: "keyword", regex: quoteRule("^")},
-            {token: "keyword", regex: quoteRule("~")},
-            {token: "keyword", regex: /##?/},
-            {token: "keyword", regex: /(?:\B|^)``|\b''/}
-        ]
-
-    };
-
-    function quoteRule(ch) {
-        var prefix = /\w/.test(ch) ? "\\b" : "(?:\\B|^)";
-        return prefix + ch + "[^" + ch + "].*?" + ch + "(?![\\w*])";
-    }
-
-    var tokenMap = {
-        macro: "constant.character",
-        tableBlock: "doc.comment",
-        titleUnderline: "markup.heading",
-        singleLineTitle: "markup.heading",
-        pageBreak: "string",
-        option: "string.regexp",
-        otherBlock: "markup.list",
-        literal: "support.function",
-        optionalTitle: "constant.numeric",
-        escape: "constant.language.escape",
-        link: "markup.underline.list"
-    };
-
-    for (var state in this.$rules) {
-        var stateRules = this.$rules[state];
-        for (var i = stateRules.length; i--; ) {
-            var rule = stateRules[i];
-            if (rule.include || typeof rule == "string") {
-                var args = [i, 1].concat(this.$rules[rule.include || rule]);
-                if (rule.noEscape) {
-                    args = args.filter(function(x) {
-                        return !x.next;
-                    });
-                }
-                stateRules.splice.apply(stateRules, args);
-            } else if (rule.token in tokenMap) {
-                rule.token = tokenMap[rule.token];
-            }
-        }
-    }
-};
-oop.inherits(AsciidocHighlightRules, TextHighlightRules);
-
-exports.AsciidocHighlightRules = AsciidocHighlightRules;
-});
-
-define('ace/mode/folding/asciidoc', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-    this.foldingStartMarker = /^(?:\|={10,}|[\.\/=\-~^+]{4,}\s*$|={1,5} )/;
-    this.singleLineHeadingRe = /^={1,5}(?=\s+\S)/;
-
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        if (!this.foldingStartMarker.test(line))
-            return ""
-
-        if (line[0] == "=") {
-            if (this.singleLineHeadingRe.test(line))
-                return "start";
-            if (session.getLine(row - 1).length != session.getLine(row).length)
-                return "";
-            return "start";
-        }
-        if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock")
-            return "end";
-        return "start";
-    };
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-        if (!line.match(this.foldingStartMarker))
-            return;
-
-        var token;
-        function getTokenType(row) {
-            token = session.getTokens(row)[0];
-            return token && token.type;
-        }
-
-        var levels = ["=","-","~","^","+"];
-        var heading = "markup.heading";
-        var singleLineHeadingRe = this.singleLineHeadingRe;
-        function getLevel() {
-            var match = token.value.match(singleLineHeadingRe);
-            if (match)
-                return match[0].length;
-            var level = levels.indexOf(token.value[0]) + 1;
-            if (level == 1) {
-                if (session.getLine(row - 1).length != session.getLine(row).length)
-                    return Infinity;
-            }
-            return level;
-        }
-
-        if (getTokenType(row) == heading) {
-            var startHeadingLevel = getLevel();
-            while (++row < maxRow) {
-                if (getTokenType(row) != heading)
-                    continue;
-                var level = getLevel();
-                if (level <= startHeadingLevel)
-                    break;
-            }
-
-            var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe);
-            endRow = isSingleLineHeading ? row - 1 : row - 2;
-
-            if (endRow > startRow) {
-                while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == "["))
-                    endRow--;
-            }
-
-            if (endRow > startRow) {
-                var endColumn = session.getLine(endRow).length;
-                return new Range(startRow, startColumn, endRow, endColumn);
-            }
-        } else {
-            var state = session.bgTokenizer.getState(row);
-            if (state == "dissallowDelimitedBlock") {
-                while (row -- > 0) {
-                    if (session.bgTokenizer.getState(row).lastIndexOf("Block") == -1)
-                        break;
-                }
-                endRow = row + 1;
-                if (endRow < startRow) {
-                    var endColumn = session.getLine(row).length;
-                    return new Range(endRow, 5, startRow, startColumn - 5);
-                }
-            } else {
-                while (++row < maxRow) {
-                    if (session.bgTokenizer.getState(row) == "dissallowDelimitedBlock")
-                        break;
-                }
-                endRow = row;
-                if (endRow > startRow) {
-                    var endColumn = session.getLine(row).length;
-                    return new Range(startRow, 5, endRow, endColumn - 5);
-                }
-            }
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-batchfile.js b/try/ace/mode-batchfile.js
deleted file mode 100644
index 571e678..0000000
--- a/try/ace/mode-batchfile.js
+++ /dev/null
@@ -1,171 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- *
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/batchfile', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/batchfile_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var BatchFileHighlightRules = require("./batchfile_highlight_rules").BatchFileHighlightRules;
-var FoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    var highlighter = new BatchFileHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "::";
-    this.blockComment = "";
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/batchfile_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var BatchFileHighlightRules = function() {
-
-    this.$rules = { start: 
-       [ { token: 'keyword.command.dosbatch',
-           regex: '\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\b',
-           caseInsensitive: true },
-         { token: 'keyword.control.statement.dosbatch',
-           regex: '\\b(?:goto|call|exit)\\b',
-           caseInsensitive: true },
-         { token: 'keyword.control.conditional.if.dosbatch',
-           regex: '\\bif\\s+not\\s+(?:exist|defined|errorlevel|cmdextversion)\\b',
-           caseInsensitive: true },
-         { token: 'keyword.control.conditional.dosbatch',
-           regex: '\\b(?:if|else)\\b',
-           caseInsensitive: true },
-         { token: 'keyword.control.repeat.dosbatch',
-           regex: '\\bfor\\b',
-           caseInsensitive: true },
-         { token: 'keyword.operator.dosbatch',
-           regex: '\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\b' },
-         { token: ['doc.comment', 'comment'],
-           regex: '(?:^|\\b)(rem)($|\\s.*$)',
-           caseInsensitive: true },
-         { token: 'comment.line.colons.dosbatch',
-           regex: '::.*$' },
-         { include: 'variable' },
-         { token: 'punctuation.definition.string.begin.shell',
-           regex: '"',
-           push: [ 
-              { token: 'punctuation.definition.string.end.shell', regex: '"', next: 'pop' },
-              { include: 'variable' },
-              { defaultToken: 'string.quoted.double.dosbatch' } ] },
-         { token: 'keyword.operator.pipe.dosbatch', regex: '[|]' },
-         { token: 'keyword.operator.redirect.shell',
-           regex: '&>|\\d*>&\\d*|\\d*(?:>>|>|<)|\\d*<&|\\d*<>' } ],
-        variable: [
-         { token: 'constant.numeric', regex: '%%\\w+'},
-         { token: ['markup.list', 'constant.other', 'markup.list'],
-            regex: '(%)(\\w+)(%?)' }]}
-    
-    this.normalizeRules();
-};
-
-BatchFileHighlightRules.metaData = { name: 'Batch File',
-      scopeName: 'source.dosbatch',
-      fileTypes: [ 'bat' ] }
-
-
-oop.inherits(BatchFileHighlightRules, TextHighlightRules);
-
-exports.BatchFileHighlightRules = BatchFileHighlightRules;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-c9search.js b/try/ace/mode-c9search.js
deleted file mode 100644
index cbb8b0b..0000000
--- a/try/ace/mode-c9search.js
+++ /dev/null
@@ -1,182 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/c9search', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/c9search_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/folding/c9search'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var C9SearchHighlightRules = require("./c9search_highlight_rules").C9SearchHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var C9StyleFoldMode = require("./folding/c9search").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new C9SearchHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.foldingRules = new C9StyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/c9search_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var C9SearchHighlightRules = function() {
-    this.$rules = {
-        "start" : [
-            {
-                token : ["c9searchresults.constant.numeric", "c9searchresults.text", "c9searchresults.text"],
-                regex : "(^\\s+[0-9]+)(:\\s*)(.+)"
-            },
-            {
-                token : ["string", "text"], // single line
-                regex : "(.+)(:$)"
-            }
-        ]
-    };
-};
-
-oop.inherits(C9SearchHighlightRules, TextHighlightRules);
-
-exports.C9SearchHighlightRules = C9SearchHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-
-define('ace/mode/folding/c9search', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /^(\S.*\:|Searching for.*)$/;
-    this.foldingStopMarker = /^(\s+|Found.*)$/;
-    
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var lines = session.doc.getAllLines(row);
-        var line = lines[row];
-        var level1 = /^(Found.*|Searching for.*)$/;
-        var level2 = /^(\S.*\:|\s*)$/;
-        var re = level1.test(line) ? level1 : level2;
-
-        if (this.foldingStartMarker.test(line)) {            
-            for (var i = row + 1, l = session.getLength(); i < l; i++) {
-                if (re.test(lines[i]))
-                    break;
-            }
-
-            return new Range(row, line.length, i, 0);
-        }
-
-        if (this.foldingStopMarker.test(line)) {
-            for (var i = row - 1; i >= 0; i--) {
-                line = lines[i];
-                if (re.test(line))
-                    break;
-            }
-
-            return new Range(i, line.length, row, 0);
-        }
-    };
-    
-}).call(FoldMode.prototype);
-
-});
-
diff --git a/try/ace/mode-clojure.js b/try/ace/mode-clojure.js
deleted file mode 100644
index b48fce2..0000000
--- a/try/ace/mode-clojure.js
+++ /dev/null
@@ -1,299 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/clojure', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/clojure_highlight_rules', 'ace/mode/matching_parens_outdent', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var ClojureHighlightRules = require("./clojure_highlight_rules").ClojureHighlightRules;
-var MatchingParensOutdent = require("./matching_parens_outdent").MatchingParensOutdent;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new ClojureHighlightRules().getRules());
-    this.$outdent = new MatchingParensOutdent();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = ";";
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-        
-        if (state == "start") {
-            var match = line.match(/[\(\[]/);
-            if (match) {
-                indent += "  ";
-            }
-            match = line.match(/[\)]/);
-            if (match) {
-              indent = "";
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/clojure_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-
-
-var ClojureHighlightRules = function() {
-
-    var builtinFunctions = (
-        '* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +
-        '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +
-        '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +
-        '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +
-        '*read-eval* *source-path* *use-context-classloader* ' +
-        '*warn-on-reflection* + - -> ->> .. / < <= = ' +
-        '== > &gt; >= &gt;= accessor aclone ' +
-        'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +
-        'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +
-        'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +
-        'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +
-        'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +
-        'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +
-        'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +
-        'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +
-        'char-escape-string char-name-string char? chars chunk chunk-append ' +
-        'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +
-        'class class? clear-agent-errors clojure-version coll? comment commute ' +
-        'comp comparator compare compare-and-set! compile complement concat cond ' +
-        'condp conj conj! cons constantly construct-proxy contains? count ' +
-        'counted? create-ns create-struct cycle dec decimal? declare definline ' +
-        'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +
-        'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +
-        'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +
-        'double-array doubles drop drop-last drop-while empty empty? ensure ' +
-        'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +
-        'find-doc find-ns find-var first float float-array float? floats flush ' +
-        'fn fn? fnext for force format future future-call future-cancel ' +
-        'future-cancelled? future-done? future? gen-class gen-interface gensym ' +
-        'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +
-        'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +
-        'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +
-        'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +
-        'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +
-        'list* list? load load-file load-reader load-string loaded-libs locking ' +
-        'long long-array longs loop macroexpand macroexpand-1 make-array ' +
-        'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +
-        'merge-with meta method-sig methods min min-key mod name namespace neg? ' +
-        'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +
-        'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +
-        'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +
-        'or parents partial partition pcalls peek persistent! pmap pop pop! ' +
-        'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +
-        'primitives-classnames print print-ctor print-doc print-dup print-method ' +
-        'print-namespace-doc print-simple print-special-doc print-str printf ' +
-        'println println-str prn prn-str promise proxy proxy-call-with-super ' +
-        'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +
-        'rand rand-int range ratio? rational? rationalize re-find re-groups ' +
-        're-matcher re-matches re-pattern re-seq read read-line read-string ' +
-        'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +
-        'refer refer-clojure release-pending-sends rem remove remove-method ' +
-        'remove-ns remove-watch repeat repeatedly replace replicate require ' +
-        'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +
-        'rsubseq second select-keys send send-off seq seq? seque sequence ' +
-        'sequential? set set-validator! set? short short-array shorts ' +
-        'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +
-        'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +
-        'split-at split-with str stream? string? struct struct-map subs subseq ' +
-        'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +
-        'take-last take-nth take-while test the-ns time to-array to-array-2d ' +
-        'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +
-        'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +
-        'unchecked-remainder unchecked-subtract underive unquote ' +
-        'unquote-splicing update-in update-proxy use val vals var-get var-set ' +
-        'var? vary-meta vec vector vector? when when-first when-let when-not ' +
-        'while with-bindings with-bindings* with-in-str with-loading-context ' +
-        'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +
-        'zero? zipmap'
-    );
-
-    var keywords = ('throw try var ' +
-        'def do fn if let loop monitor-enter monitor-exit new quote recur set!'
-    );
-
-    var buildinConstants = ("true false nil");
-
-    var keywordMapper = this.createKeywordMapper({
-        "keyword": keywords,
-        "constant.language": buildinConstants,
-        "support.function": builtinFunctions
-    }, "identifier", false, " ");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : ";.*$"
-            }, {
-                token : "keyword", //parens
-                regex : "[\\(|\\)]"
-            }, {
-                token : "keyword", //lists
-                regex : "[\\'\\(]"
-            }, {
-                token : "keyword", //vectors
-                regex : "[\\[|\\]]"
-            }, {
-                token : "keyword", //sets and maps
-                regex : "[\\{|\\}|\\#\\{|\\#\\}]"
-            }, {
-                    token : "keyword", // ampersands
-                    regex : '[\\&]'
-            }, {
-                    token : "keyword", // metadata
-                    regex : '[\\#\\^\\{]'
-            }, {
-                    token : "keyword", // anonymous fn syntactic sugar
-                    regex : '[\\%]'
-            }, {
-                    token : "keyword", // deref reader macro
-                    regex : '[@]'
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0[xX][0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : "constant.language",
-                regex : '[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]'
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"
-            }, {
-                token : "string", // single line
-                regex : '"',
-                next: "string"
-            }, {
-                token : "constant", // symbol
-                regex : /:[^()\[\]{}'"\^%`,;\s]+/
-            }, {
-                token : "string.regexp", //Regular Expressions
-                regex : '/#"(?:\\.|(?:\\\")|[^\""\n])*"/g'
-            }
-
-        ],
-        "string" : [
-            {
-                token : "constant.language.escape",                
-                regex : "\\\\.|\\\\$"
-            }, {
-                token : "string",                
-                regex : '[^"\\\\]+'
-            }, {
-                token : "string",
-                regex : '"',
-                next : "start"
-            }
-        ]
-    };
-};
-
-oop.inherits(ClojureHighlightRules, TextHighlightRules);
-
-exports.ClojureHighlightRules = ClojureHighlightRules;
-});
-
-define('ace/mode/matching_parens_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingParensOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\)/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\))/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        var match = line.match(/^(\s+)/);
-        if (match) {
-            return match[1];
-        }
-
-        return "";
-    };
-
-}).call(MatchingParensOutdent.prototype);
-
-exports.MatchingParensOutdent = MatchingParensOutdent;
-});
diff --git a/try/ace/mode-cobol.js b/try/ace/mode-cobol.js
deleted file mode 100644
index 2f4c835..0000000
--- a/try/ace/mode-cobol.js
+++ /dev/null
@@ -1,124 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/cobol', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/cobol_highlight_rules', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var CobolHighlightRules = require("./cobol_highlight_rules").CobolHighlightRules;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new CobolHighlightRules().getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "*";
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/cobol_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var CobolHighlightRules = function() {
-var keywords = "ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|" +
-"AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|" +
-"ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|" +
-"TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|" +
-"UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|" +
-"PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|" +
-"CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|" +
-"COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|" +
-"RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|" +
-"DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|" +
-"ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|" +
-"EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT";
-
-    var builtinConstants = (
-        "true|false|null"
-    );
-
-    var builtinFunctions = (
-        "count|min|max|avg|sum|rank|now|coalesce|main"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": builtinFunctions,
-        "keyword": keywords,
-        "constant.language": builtinConstants
-    }, "identifier", true);
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment",
-            regex : "\\*.*$"
-        }, {
-            token : "string",           // " string
-            regex : '".*?"'
-        }, {
-            token : "string",           // ' string
-            regex : "'.*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\(]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\)]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ]
-    };
-};
-
-oop.inherits(CobolHighlightRules, TextHighlightRules);
-
-exports.CobolHighlightRules = CobolHighlightRules;
-});
\ No newline at end of file
diff --git a/try/ace/mode-coffee.js b/try/ace/mode-coffee.js
deleted file mode 100644
index 00134e9..0000000
--- a/try/ace/mode-coffee.js
+++ /dev/null
@@ -1,443 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/coffee', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/coffee_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/folding/coffee', 'ace/range', 'ace/mode/text', 'ace/worker/worker_client', 'ace/lib/oop'], function(require, exports, module) {
-
-
-var Tokenizer = require("../tokenizer").Tokenizer;
-var Rules = require("./coffee_highlight_rules").CoffeeHighlightRules;
-var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var FoldMode = require("./folding/coffee").FoldMode;
-var Range = require("../range").Range;
-var TextMode = require("./text").Mode;
-var WorkerClient = require("../worker/worker_client").WorkerClient;
-var oop = require("../lib/oop");
-
-function Mode() {
-    this.$tokenizer = new Tokenizer(new Rules().getRules());
-    this.$outdent = new Outdent();
-    this.foldingRules = new FoldMode();
-}
-
-oop.inherits(Mode, TextMode);
-
-(function() {
-    
-    var indenter = /(?:[({[=:]|[-=]>|\b(?:else|switch|try|catch(?:\s*[$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)?|finally))\s*$/;
-    var commentLine = /^(\s*)#/;
-    var hereComment = /^\s*###(?!#)/;
-    var indentation = /^\s*/;
-    
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
-    
-        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&
-            state === 'start' && indenter.test(line))
-            indent += tab;
-        return indent;
-    };
-    
-    this.toggleCommentLines = function(state, doc, startRow, endRow){
-        console.log("toggle");
-        var range = new Range(0, 0, 0, 0);
-        for (var i = startRow; i <= endRow; ++i) {
-            var line = doc.getLine(i);
-            if (hereComment.test(line))
-                continue;
-                
-            if (commentLine.test(line))
-                line = line.replace(commentLine, '$1');
-            else
-                line = line.replace(indentation, '$&#');
-    
-            range.end.row = range.start.row = i;
-            range.end.column = line.length + 1;
-            doc.replace(range, line);
-        }
-    };
-    
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-    
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-    
-    this.createWorker = function(session) {
-        var worker = new WorkerClient(["ace"], "ace/mode/coffee_worker", "Worker");
-        worker.attachToDocument(session.getDocument());
-        
-        worker.on("error", function(e) {
-            session.setAnnotations([e.data]);
-        });
-        
-        worker.on("ok", function(e) {
-            session.clearAnnotations();
-        });
-        
-        return worker;
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/coffee_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-    var oop = require("../lib/oop");
-    var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-    oop.inherits(CoffeeHighlightRules, TextHighlightRules);
-
-    function CoffeeHighlightRules() {
-        var identifier = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
-
-        var keywords = (
-            "this|throw|then|try|typeof|super|switch|return|break|by|continue|" +
-            "catch|class|in|instanceof|is|isnt|if|else|extends|for|forown|" +
-            "finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|" +
-            "or|on|unless|until|and|yes"
-        );
-
-        var langConstant = (
-            "true|false|null|undefined|NaN|Infinity"
-        );
-
-        var illegal = (
-            "case|const|default|function|var|void|with|enum|export|implements|" +
-            "interface|let|package|private|protected|public|static|yield|" +
-            "__hasProp|slice|bind|indexOf"
-        );
-
-        var supportClass = (
-            "Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|" +
-            "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" +
-            "SyntaxError|TypeError|URIError|"  +
-            "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" +
-            "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray"
-        );
-
-        var supportFunction = (
-            "Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|" +
-            "encodeURIComponent|decodeURI|decodeURIComponent|String|"
-        );
-
-        var variableLanguage = (
-            "window|arguments|prototype|document"
-        );
-
-        var keywordMapper = this.createKeywordMapper({
-            "keyword": keywords,
-            "constant.language": langConstant,
-            "invalid.illegal": illegal,
-            "language.support.class": supportClass,
-            "language.support.function": supportFunction,
-            "variable.language": variableLanguage
-        }, "identifier");
-
-        var functionRule = {
-            token: ["paren.lparen", "variable.parameter", "paren.rparen", "text", "storage.type"],
-            regex: /(?:(\()((?:"[^")]*?"|'[^')]*?'|\/[^\/)]*?\/|[^()\"'\/])*?)(\))(\s*))?([\-=]>)/.source
-        };
-
-        var stringEscape = /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;
-
-        this.$rules = {
-            start : [
-                {
-                    token : "constant.numeric",
-                    regex : "(?:0x[\\da-fA-F]+|(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:[eE][+-]?\\d+)?)"
-                }, {
-                    stateName: "qdoc",
-                    token : "string", regex : "'''", next : [
-                        {token : "string", regex : "'''", next : "start"},
-                        {token : "constant.language.escape", regex : stringEscape},
-                        {defaultToken: "string"}
-                    ]
-                }, {
-                    stateName: "qqdoc",
-                    token : "string",
-                    regex : '"""',
-                    next : [
-                        {token : "string", regex : '"""', next : "start"},
-                        {token : "paren.string", regex : '#{', push : "start"},
-                        {token : "constant.language.escape", regex : stringEscape},
-                        {defaultToken: "string"}
-                    ]
-                }, {
-                    stateName: "qstring",
-                    token : "string", regex : "'", next : [
-                        {token : "string", regex : "'", next : "start"},
-                        {token : "constant.language.escape", regex : stringEscape},
-                        {defaultToken: "string"}
-                    ]
-                }, {
-                    stateName: "qqstring",
-                    token : "string.start", regex : '"', next : [
-                        {token : "string.end", regex : '"', next : "start"},
-                        {token : "paren.string", regex : '#{', push : "start"},
-                        {token : "constant.language.escape", regex : stringEscape},
-                        {defaultToken: "string"}
-                    ]
-                }, {
-                    stateName: "js",
-                    token : "string", regex : "`", next : [
-                        {token : "string", regex : "`", next : "start"},
-                        {token : "constant.language.escape", regex : stringEscape},
-                        {defaultToken: "string"}
-                    ]
-                }, {
-                    regex: "[{}]", onMatch: function(val, state, stack) {
-                        this.next = "";
-                        if (val == "{" && stack.length) {
-                            stack.unshift("start", state);
-                            return "paren";
-                        }
-                        if (val == "}" && stack.length) {
-                            stack.shift();
-                            this.next = stack.shift();
-                            if (this.next.indexOf("string") != -1)
-                                return "paren.string";
-                        }
-                        return "paren";
-                    }
-                }, {
-                    token : "string.regex",
-                    regex : "///",
-                    next : "heregex"
-                }, {
-                    token : "string.regex",
-                    regex : /(?:\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)(?:[imgy]{0,4})(?!\w)/
-                }, {
-                    token : "comment",
-                    regex : "###(?!#)",
-                    next : "comment"
-                }, {
-                    token : "comment",
-                    regex : "#.*"
-                }, {
-                    token : ["punctuation.operator", "text", "identifier"],
-                    regex : "(\\.)(\\s*)(" + illegal + ")"
-                }, {
-                    token : "punctuation.operator",
-                    regex : "\\."
-                }, {
-                    token : ["keyword", "text", "language.support.class",
-                     "text", "keyword", "text", "language.support.class"],
-                    regex : "(class)(\\s+)(" + identifier + ")(?:(\\s+)(extends)(\\s+)(" + identifier + "))?"
-                }, {
-                    token : ["entity.name.function", "text", "keyword.operator", "text"].concat(functionRule.token),
-                    regex : "(" + identifier + ")(\\s*)([=:])(\\s*)" + functionRule.regex
-                }, 
-                functionRule, 
-                {
-                    token : "variable",
-                    regex : "@(?:" + identifier + ")?"
-                }, {
-                    token: keywordMapper,
-                    regex : identifier
-                }, {
-                    token : "punctuation.operator",
-                    regex : "\\,|\\."
-                }, {
-                    token : "storage.type",
-                    regex : "[\\-=]>"
-                }, {
-                    token : "keyword.operator",
-                    regex : "(?:[-+*/%<>&|^!?=]=|>>>=?|\\-\\-|\\+\\+|::|&&=|\\|\\|=|<<=|>>=|\\?\\.|\\.{2,3}|[!*+-=><])"
-                }, {
-                    token : "paren.lparen",
-                    regex : "[({[]"
-                }, {
-                    token : "paren.rparen",
-                    regex : "[\\]})]"
-                }, {
-                    token : "text",
-                    regex : "\\s+"
-                }],
-
-
-            heregex : [{
-                token : "string.regex",
-                regex : '.*?///[imgy]{0,4}',
-                next : "start"
-            }, {
-                token : "comment.regex",
-                regex : "\\s+(?:#.*)?"
-            }, {
-                token : "string.regex",
-                regex : "\\S+"
-            }],
-
-            comment : [{
-                token : "comment",
-                regex : '###',
-                next : "start"
-            }, {
-                defaultToken : "comment"
-            }]
-        };
-        this.normalizeRules();
-    }
-
-    exports.CoffeeHighlightRules = CoffeeHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-coldfusion.js b/try/ace/mode-coldfusion.js
deleted file mode 100644
index 312f360..0000000
--- a/try/ace/mode-coldfusion.js
+++ /dev/null
@@ -1,1765 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/coldfusion', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml', 'ace/mode/javascript', 'ace/mode/css', 'ace/tokenizer', 'ace/mode/coldfusion_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var XmlMode = require("./xml").Mode;
-var JavaScriptMode = require("./javascript").Mode;
-var CssMode = require("./css").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var ColdfusionHighlightRules = require("./coldfusion_highlight_rules").ColdfusionHighlightRules;
-
-var Mode = function() {
-    XmlMode.call(this);
-    
-    var highlighter = new ColdfusionHighlightRules();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-    
-    this.$embeds = highlighter.getEmbeds();
-    this.createModeDelegates({
-      "js-": JavaScriptMode,
-      "css-": CssMode
-    });
-};
-oop.inherits(Mode, XmlMode);
-
-(function() {
-
-    this.getNextLineIndent = function(state, line, tab) {
-        return this.$getIndent(line);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
-var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
-var XmlFoldMode = require("./folding/xml").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
-    this.$behaviour = new XmlBehaviour();
-    this.foldingRules = new XmlFoldMode();
-};
-
-oop.inherits(Mode, TextMode);
-
-(function() {
-    
-    this.blockComment = {start: "<!--", end: "-->"};
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var xmlUtil = require("./xml_util");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var XmlHighlightRules = function() {
-    this.$rules = {
-        start : [
-            {token : "text", regex : "<\\!\\[CDATA\\[", next : "cdata"},
-            {token : "xml-pe", regex : "<\\?.*?\\?>"},
-            {token : "comment", regex : "<\\!--", next : "comment"},
-            {token : "xml-pe", regex : "<\\!.*?>"},
-            {token : "meta.tag", regex : "<\\/?", next : "tag"},
-            {token : "text", regex : "\\s+"},
-            {
-                token : "constant.character.entity", 
-                regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" 
-            }
-        ],
-        
-        cdata : [
-            {token : "text", regex : "\\]\\]>", next : "start"},
-            {token : "text", regex : "\\s+"},
-            {token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"}
-        ],
-
-        comment : [
-            {token : "comment", regex : ".*?-->", next : "start"},
-            {token : "comment", regex : ".+"}
-        ]
-    };
-    
-    xmlUtil.tag(this.$rules, "tag", "start");
-};
-
-oop.inherits(XmlHighlightRules, TextHighlightRules);
-
-exports.XmlHighlightRules = XmlHighlightRules;
-});
-
-define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-function string(state) {
-    return [{
-        token : "string",
-        regex : '"',
-        next : state + "_qqstring"
-    }, {
-        token : "string",
-        regex : "'",
-        next : state + "_qstring"
-    }];
-}
-
-function multiLineString(quote, state) {
-    return [
-        {token : "string", regex : quote, next : state},
-        {
-            token : "constant.language.escape",
-            regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" 
-        },
-        {defaultToken : "string"}
-    ];
-}
-
-exports.tag = function(states, name, nextState, tagMap) {
-    states[name] = [{
-        token : "text",
-        regex : "\\s+"
-    }, {
-        
-    token : !tagMap ? "meta.tag.tag-name" : function(value) {
-            if (tagMap[value])
-                return "meta.tag.tag-name." + tagMap[value];
-            else
-                return "meta.tag.tag-name";
-        },
-        regex : "[-_a-zA-Z0-9:]+",
-        next : name + "_embed_attribute_list" 
-    }, {
-        token: "empty",
-        regex: "",
-        next : name + "_embed_attribute_list"
-    }];
-
-    states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list");
-    states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list");
-    
-    states[name + "_embed_attribute_list"] = [{
-        token : "meta.tag.r",
-        regex : "/?>",
-        next : nextState
-    }, {
-        token : "keyword.operator",
-        regex : "="
-    }, {
-        token : "entity.other.attribute-name",
-        regex : "[-_a-zA-Z0-9:]+"
-    }, {
-        token : "constant.numeric", // float
-        regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-    }, {
-        token : "text",
-        regex : "\\s+"
-    }].concat(string(name));
-};
-
-});
-
-define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-function hasType(token, type) {
-    var hasType = true;
-    var typeList = token.type.split('.');
-    var needleList = type.split('.');
-    needleList.forEach(function(needle){
-        if (typeList.indexOf(needle) == -1) {
-            hasType = false;
-            return false;
-        }
-    });
-    return hasType;
-}
-
-var XmlBehaviour = function () {
-    
-    this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
-    
-    this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
-        if (text == '>') {
-            var position = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, position.row, position.column);
-            var token = iterator.getCurrentToken();
-            var atCursor = false;
-            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
-                do {
-                    token = iterator.stepBackward();
-                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
-            } else {
-                atCursor = true;
-            }
-            if (!token || !hasType(token, 'meta.tag-name') || iterator.stepBackward().value.match('/')) {
-                return
-            }
-            var tag = token.value;
-            if (atCursor){
-                var tag = tag.substring(0, position.column - token.start);
-            }
-
-            return {
-               text: '>' + '</' + tag + '>',
-               selection: [1, 1]
-            }
-        }
-    });
-
-    this.add('autoindent', 'insertion', function (state, action, editor, session, text) {
-        if (text == "\n") {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChars = line.substring(cursor.column, cursor.column + 2);
-            if (rightChars == '</') {
-                var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
-                var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent,
-                    selection: [1, indent.length, 1, indent.length]
-                }
-            }
-        }
-    });
-    
-}
-oop.inherits(XmlBehaviour, Behaviour);
-
-exports.XmlBehaviour = XmlBehaviour;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var lang = require("../../lib/lang");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-var FoldMode = exports.FoldMode = function(voidElements) {
-    BaseFoldMode.call(this);
-    this.voidElements = voidElements || {};
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var tag = this._getFirstTagInLine(session, row);
-
-        if (tag.closing)
-            return foldStyle == "markbeginend" ? "end" : "";
-
-        if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
-            return "";
-
-        if (tag.selfClosing)
-            return "";
-
-        if (tag.value.indexOf("/" + tag.tagName) !== -1)
-            return "";
-
-        return "start";
-    };
-    
-    this._getFirstTagInLine = function(session, row) {
-        var tokens = session.getTokens(row);
-        var value = "";
-        for (var i = 0; i < tokens.length; i++) {
-            var token = tokens[i];
-            if (token.type.indexOf("meta.tag") === 0)
-                value += token.value;
-            else
-                value += lang.stringRepeat(" ", token.value.length);
-        }
-        
-        return this._parseTag(value);
-    };
-
-    this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
-    this._parseTag = function(tag) {
-        
-        var match = tag.match(this.tagRe);
-        var column = 0;
-
-        return {
-            value: tag,
-            match: match ? match[2] : "",
-            closing: match ? !!match[3] : false,
-            selfClosing: match ? !!match[5] || match[2] == "/>" : false,
-            tagName: match ? match[4] : "",
-            column: match[1] ? column + match[1].length : column
-        };
-    };
-    this._readTagForward = function(iterator) {
-        var token = iterator.getCurrentToken();
-        if (!token)
-            return null;
-            
-        var value = "";
-        var start;
-        
-        do {
-            if (token.type.indexOf("meta.tag") === 0) {
-                if (!start) {
-                    var start = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn()
-                    };
-                }
-                value += token.value;
-                if (value.indexOf(">") !== -1) {
-                    var tag = this._parseTag(value);
-                    tag.start = start;
-                    tag.end = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn() + token.value.length
-                    };
-                    iterator.stepForward();
-                    return tag;
-                }
-            }
-        } while(token = iterator.stepForward());
-        
-        return null;
-    };
-    
-    this._readTagBackward = function(iterator) {
-        var token = iterator.getCurrentToken();
-        if (!token)
-            return null;
-            
-        var value = "";
-        var end;
-
-        do {
-            if (token.type.indexOf("meta.tag") === 0) {
-                if (!end) {
-                    end = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn() + token.value.length
-                    };
-                }
-                value = token.value + value;
-                if (value.indexOf("<") !== -1) {
-                    var tag = this._parseTag(value);
-                    tag.end = end;
-                    tag.start = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn()
-                    };
-                    iterator.stepBackward();
-                    return tag;
-                }
-            }
-        } while(token = iterator.stepBackward());
-        
-        return null;
-    };
-    
-    this._pop = function(stack, tag) {
-        while (stack.length) {
-            
-            var top = stack[stack.length-1];
-            if (!tag || top.tagName == tag.tagName) {
-                return stack.pop();
-            }
-            else if (this.voidElements[tag.tagName]) {
-                return;
-            }
-            else if (this.voidElements[top.tagName]) {
-                stack.pop();
-                continue;
-            } else {
-                return null;
-            }
-        }
-    };
-    
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var firstTag = this._getFirstTagInLine(session, row);
-        
-        if (!firstTag.match)
-            return null;
-        
-        var isBackward = firstTag.closing || firstTag.selfClosing;
-        var stack = [];
-        var tag;
-        
-        if (!isBackward) {
-            var iterator = new TokenIterator(session, row, firstTag.column);
-            var start = {
-                row: row,
-                column: firstTag.column + firstTag.tagName.length + 2
-            };
-            while (tag = this._readTagForward(iterator)) {
-                if (tag.selfClosing) {
-                    if (!stack.length) {
-                        tag.start.column += tag.tagName.length + 2;
-                        tag.end.column -= 2;
-                        return Range.fromPoints(tag.start, tag.end);
-                    } else
-                        continue;
-                }
-                
-                if (tag.closing) {
-                    this._pop(stack, tag);
-                    if (stack.length == 0)
-                        return Range.fromPoints(start, tag.start);
-                }
-                else {
-                    stack.push(tag)
-                }
-            }
-        }
-        else {
-            var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
-            var end = {
-                row: row,
-                column: firstTag.column
-            };
-            
-            while (tag = this._readTagBackward(iterator)) {
-                if (tag.selfClosing) {
-                    if (!stack.length) {
-                        tag.start.column += tag.tagName.length + 2;
-                        tag.end.column -= 2;
-                        return Range.fromPoints(tag.start, tag.end);
-                    } else
-                        continue;
-                }
-                
-                if (!tag.closing) {
-                    this._pop(stack, tag);
-                    if (stack.length == 0) {
-                        tag.start.column += tag.tagName.length + 2;
-                        return Range.fromPoints(tag.start, end);
-                    }
-                }
-                else {
-                    stack.push(tag)
-                }
-            }
-        }
-        
-    };
-
-}).call(FoldMode.prototype);
-
-});
-
-define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-var WorkerClient = require("../worker/worker_client").WorkerClient;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-        var endState = tokenizedLine.state;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start" || state == "no_regex") {
-            var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        } else if (state == "doc-start") {
-            if (endState == "start" || endState == "no_regex") {
-                return "";
-            }
-            var match = line.match(/^\s*(\/?)\*/);
-            if (match) {
-                if (match[1]) {
-                    indent += " ";
-                }
-                indent += "* ";
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-    this.createWorker = function(session) {
-        var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
-        worker.attachToDocument(session.getDocument());
-
-        worker.on("jslint", function(results) {
-            session.setAnnotations(results.data);
-        });
-
-        worker.on("terminate", function() {
-            session.clearAnnotations();
-        });
-
-        return worker;
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var JavaScriptHighlightRules = function() {
-    var keywordMapper = this.createKeywordMapper({
-        "variable.language":
-            "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|"  + // Constructors
-            "Namespace|QName|XML|XMLList|"                                             + // E4X
-            "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|"   +
-            "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|"                    +
-            "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|"   + // Errors
-            "SyntaxError|TypeError|URIError|"                                          +
-            "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
-            "isNaN|parseFloat|parseInt|"                                               +
-            "JSON|Math|"                                                               + // Other
-            "this|arguments|prototype|window|document"                                 , // Pseudo
-        "keyword":
-            "const|yield|import|get|set|" +
-            "break|case|catch|continue|default|delete|do|else|finally|for|function|" +
-            "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
-            "__parent__|__count__|escape|unescape|with|__proto__|" +
-            "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",
-        "storage.type":
-            "const|let|var|function",
-        "constant.language":
-            "null|Infinity|NaN|undefined",
-        "support.function":
-            "alert",
-        "constant.language.boolean": "true|false"
-    }, "identifier");
-    var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
-    var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
-
-    var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
-        "u[0-9a-fA-F]{4}|" + // unicode
-        "[0-2][0-7]{0,2}|" + // oct
-        "3[0-6][0-7]?|" + // oct
-        "37[0-7]?|" + // oct
-        "[4-7][0-7]?|" + //oct
-        ".)";
-
-    this.$rules = {
-        "no_regex" : [
-            {
-                token : "comment",
-                regex : /\/\/.*$/
-            },
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : /\/\*/,
-                next : "comment"
-            }, {
-                token : "string",
-                regex : "'(?=.)",
-                next  : "qstring"
-            }, {
-                token : "string",
-                regex : '"(?=.)',
-                next  : "qqstring"
-            }, {
-                token : "constant.numeric", // hex
-                regex : /0[xX][0-9a-fA-F]+\b/
-            }, {
-                token : "constant.numeric", // float
-                regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "support.function",
-                    "punctuation.operator", "entity.name.function", "text","keyword.operator"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "entity.name.function", "text",
-                    "keyword.operator", "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "entity.name.function", "text", "keyword.operator", "text", "storage.type",
-                    "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "entity.name.function", "text",
-                    "keyword.operator", "text",
-                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
-                ],
-                regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "entity.name.function", "text", "punctuation.operator",
-                    "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "text", "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(:)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : "keyword",
-                regex : "(?:" + kwBeforeRe + ")\\b",
-                next : "start"
-            }, {
-                token : ["punctuation.operator", "support.function"],
-                regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
-            }, {
-                token : ["punctuation.operator", "support.function.dom"],
-                regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
-            }, {
-                token : ["punctuation.operator", "support.constant"],
-                regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
-            }, {
-                token : ["storage.type", "punctuation.operator", "support.function.firebug"],
-                regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/
-            }, {
-                token : keywordMapper,
-                regex : identifierRe
-            }, {
-                token : "keyword.operator",
-                regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/,
-                next  : "start"
-            }, {
-                token : "punctuation.operator",
-                regex : /\?|\:|\,|\;|\./,
-                next  : "start"
-            }, {
-                token : "paren.lparen",
-                regex : /[\[({]/,
-                next  : "start"
-            }, {
-                token : "paren.rparen",
-                regex : /[\])}]/
-            }, {
-                token : "keyword.operator",
-                regex : /\/=?/,
-                next  : "start"
-            }, {
-                token: "comment",
-                regex: /^#!.*$/
-            }
-        ],
-        "start": [
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment_regex_allowed"
-            }, {
-                token : "comment",
-                regex : "\\/\\/.*$",
-                next : "start"
-            }, {
-                token: "string.regexp",
-                regex: "\\/",
-                next: "regex"
-            }, {
-                token : "text",
-                regex : "\\s+|^$",
-                next : "start"
-            }, {
-                token: "empty",
-                regex: "",
-                next: "no_regex"
-            }
-        ],
-        "regex": [
-            {
-                token: "regexp.keyword.operator",
-                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
-            }, {
-                token: "string.regexp",
-                regex: "/\\w*",
-                next: "no_regex"
-            }, {
-                token : "invalid",
-                regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
-            }, {
-                token : "constant.language.escape",
-                regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?]/
-            }, {
-                token : "constant.language.delimiter",
-                regex: /\|/
-            }, {
-                token: "constant.language.escape",
-                regex: /\[\^?/,
-                next: "regex_character_class"
-            }, {
-                token: "empty",
-                regex: "$",
-                next: "no_regex"
-            }, {
-                defaultToken: "string.regexp"
-            }
-        ],
-        "regex_character_class": [
-            {
-                token: "regexp.keyword.operator",
-                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
-            }, {
-                token: "constant.language.escape",
-                regex: "]",
-                next: "regex"
-            }, {
-                token: "constant.language.escape",
-                regex: "-"
-            }, {
-                token: "empty",
-                regex: "$",
-                next: "no_regex"
-            }, {
-                defaultToken: "string.regexp.charachterclass"
-            }
-        ],
-        "function_arguments": [
-            {
-                token: "variable.parameter",
-                regex: identifierRe
-            }, {
-                token: "punctuation.operator",
-                regex: "[, ]+"
-            }, {
-                token: "punctuation.operator",
-                regex: "$"
-            }, {
-                token: "empty",
-                regex: "",
-                next: "no_regex"
-            }
-        ],
-        "comment_regex_allowed" : [
-            {token : "comment", regex : "\\*\\/", next : "start"},
-            {defaultToken : "comment"}
-        ],
-        "comment" : [
-            {token : "comment", regex : "\\*\\/", next : "no_regex"},
-            {defaultToken : "comment"}
-        ],
-        "qqstring" : [
-            {
-                token : "constant.language.escape",
-                regex : escapedRe
-            }, {
-                token : "string",
-                regex : "\\\\$",
-                next  : "qqstring"
-            }, {
-                token : "string",
-                regex : '"|$',
-                next  : "no_regex"
-            }, {
-                defaultToken: "string"
-            }
-        ],
-        "qstring" : [
-            {
-                token : "constant.language.escape",
-                regex : escapedRe
-            }, {
-                token : "string",
-                regex : "\\\\$",
-                next  : "qstring"
-            }, {
-                token : "string",
-                regex : "'|$",
-                next  : "no_regex"
-            }, {
-                defaultToken: "string"
-            }
-        ]
-    };
-
-    this.embedRules(DocCommentHighlightRules, "doc-",
-        [ DocCommentHighlightRules.getEndRule("no_regex") ]);
-};
-
-oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
-
-exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
-
-define('ace/mode/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/css_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/worker/worker_client', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var WorkerClient = require("../worker/worker_client").WorkerClient;
-var CssBehaviour = require("./behaviour/css").CssBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CssBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.foldingRules = "cStyle";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        var match = line.match(/^.*\{\s*$/);
-        if (match) {
-            indent += tab;
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-    this.createWorker = function(session) {
-        var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
-        worker.attachToDocument(session.getDocument());
-
-        worker.on("csslint", function(e) {
-            session.setAnnotations(e.data);
-        });
-
-        worker.on("terminate", function() {
-            session.clearAnnotations();
-        });
-
-        return worker;
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index";
-var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
-var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";
-var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";
-var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
-
-var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
-var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
-var pseudoClasses  = exports.pseudoClasses =  "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
-
-var CssHighlightRules = function() {
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": supportFunction,
-        "support.constant": supportConstant,
-        "support.type": supportType,
-        "support.constant.color": supportConstantColor,
-        "support.constant.fonts": supportConstantFonts
-    }, "text", true);
-
-    var base_ruleset = [
-        {
-            token : "comment", // multi line comment
-            regex : "\\/\\*",
-            next : "ruleset_comment"
-        }, {
-            token : "string", // single line
-            regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-        }, {
-            token : "string", // single line
-            regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-        }, {
-            token : ["constant.numeric", "keyword"],
-            regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"
-        }, {
-            token : "constant.numeric",
-            regex : numRe
-        }, {
-            token : "constant.numeric",  // hex6 color
-            regex : "#[a-f0-9]{6}"
-        }, {
-            token : "constant.numeric", // hex3 color
-            regex : "#[a-f0-9]{3}"
-        }, {
-            token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
-            regex : pseudoElements
-        }, {
-            token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
-            regex : pseudoClasses
-        }, {
-            token : ["support.function", "string", "support.function"],
-            regex : "(url\\()(.*)(\\))"
-        }, {
-            token : keywordMapper,
-            regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
-        }, {
-            caseInsensitive: true
-        }
-      ];
-
-    var ruleset = lang.copyArray(base_ruleset);
-    ruleset.unshift({
-        token : "paren.rparen",
-        regex : "\\}",
-        next:   "start"
-    });
-
-    var media_ruleset = lang.copyArray( base_ruleset );
-    media_ruleset.unshift({
-        token : "paren.rparen",
-        regex : "\\}",
-        next:   "media"
-    });
-
-    var base_comment = [{
-          token : "comment", // comment spanning whole line
-          regex : ".+"
-    }];
-
-    var comment = lang.copyArray(base_comment);
-    comment.unshift({
-          token : "comment", // closing comment
-          regex : ".*?\\*\\/",
-          next : "start"
-    });
-
-    var media_comment = lang.copyArray(base_comment);
-    media_comment.unshift({
-          token : "comment", // closing comment
-          regex : ".*?\\*\\/",
-          next : "media"
-    });
-
-    var ruleset_comment = lang.copyArray(base_comment);
-    ruleset_comment.unshift({
-          token : "comment", // closing comment
-          regex : ".*?\\*\\/",
-          next : "ruleset"
-    });
-
-    this.$rules = {
-        "start" : [{
-            token : "comment", // multi line comment
-            regex : "\\/\\*",
-            next : "comment"
-        }, {
-            token: "paren.lparen",
-            regex: "\\{",
-            next:  "ruleset"
-        }, {
-            token: "string",
-            regex: "@.*?{",
-            next:  "media"
-        },{
-            token: "keyword",
-            regex: "#[a-z0-9-_]+"
-        },{
-            token: "variable",
-            regex: "\\.[a-z0-9-_]+"
-        },{
-            token: "string",
-            regex: ":[a-z0-9-_]+"
-        },{
-            token: "constant",
-            regex: "[a-z0-9-_]+"
-        },{
-            caseInsensitive: true
-        }],
-
-        "media" : [ {
-            token : "comment", // multi line comment
-            regex : "\\/\\*",
-            next : "media_comment"
-        }, {
-            token: "paren.lparen",
-            regex: "\\{",
-            next:  "media_ruleset"
-        },{
-            token: "string",
-            regex: "\\}",
-            next:  "start"
-        },{
-            token: "keyword",
-            regex: "#[a-z0-9-_]+"
-        },{
-            token: "variable",
-            regex: "\\.[a-z0-9-_]+"
-        },{
-            token: "string",
-            regex: ":[a-z0-9-_]+"
-        },{
-            token: "constant",
-            regex: "[a-z0-9-_]+"
-        },{
-            caseInsensitive: true
-        }],
-
-        "comment" : comment,
-
-        "ruleset" : ruleset,
-        "ruleset_comment" : ruleset_comment,
-
-        "media_ruleset" : media_ruleset,
-        "media_comment" : media_comment
-    };
-};
-
-oop.inherits(CssHighlightRules, TextHighlightRules);
-
-exports.CssHighlightRules = CssHighlightRules;
-
-});
-
-define('ace/mode/behaviour/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-var CssBehaviour = function () {
-
-    this.inherit(CstyleBehaviour);
-
-    this.add("colon", "insertion", function (state, action, editor, session, text) {
-        if (text === ':') {
-            var cursor = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, cursor.row, cursor.column);
-            var token = iterator.getCurrentToken();
-            if (token && token.value.match(/\s+/)) {
-                token = iterator.stepBackward();
-            }
-            if (token && token.type === 'support.type') {
-                var line = session.doc.getLine(cursor.row);
-                var rightChar = line.substring(cursor.column, cursor.column + 1);
-                if (rightChar === ':') {
-                    return {
-                       text: '',
-                       selection: [1, 1]
-                    }
-                }
-                if (!line.substring(cursor.column).match(/^\s*;/)) {
-                    return {
-                       text: ':;',
-                       selection: [1, 1]
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("colon", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected === ':') {
-            var cursor = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, cursor.row, cursor.column);
-            var token = iterator.getCurrentToken();
-            if (token && token.value.match(/\s+/)) {
-                token = iterator.stepBackward();
-            }
-            if (token && token.type === 'support.type') {
-                var line = session.doc.getLine(range.start.row);
-                var rightChar = line.substring(range.end.column, range.end.column + 1);
-                if (rightChar === ';') {
-                    range.end.column ++;
-                    return range;
-                }
-            }
-        }
-    });
-
-    this.add("semicolon", "insertion", function (state, action, editor, session, text) {
-        if (text === ';') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar === ';') {
-                return {
-                   text: '',
-                   selection: [1, 1]
-                }
-            }
-        }
-    });
-
-}
-oop.inherits(CssBehaviour, CstyleBehaviour);
-
-exports.CssBehaviour = CssBehaviour;
-});
-
-define('ace/mode/coldfusion_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/text_highlight_rules', 'ace/mode/xml_util'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
-var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var xml_util = require("./xml_util");
-
-var ColdfusionHighlightRules = function() {
-
-    this.$rules = {
-        start : [ {
-            token : "text",
-            regex : "<\\!\\[CDATA\\[",
-            next : "cdata"
-        }, {
-            token : "xml-pe",
-            regex : "<\\?.*?\\?>"
-        }, {
-            token : "comment",
-            regex : "<\\!--",
-            next : "comment"
-        }, {
-            token : "meta.tag",
-            regex : "<(?=script)",
-            next : "script"
-        }, {
-            token : "meta.tag",
-            regex : "<(?=cfscript)",
-            next : "cfscript"
-        }, {
-            token : "meta.tag",
-            regex : "<(?=style)",
-            next : "style"
-        }, {
-            token : "meta.tag", // opening tag
-            regex : "<\\/?",
-            next : "tag"
-        } ],
-    
-        cdata : [ {
-            token : "text",
-            regex : "\\]\\]>",
-            next : "start"
-        } ],
-
-        comment : [ {
-            token : "comment",
-            regex : ".*?-->",
-            next : "start"
-        }, {
-            defaultToken : "comment"
-        } ]
-    };
-    
-    xml_util.tag(this.$rules, "tag", "start");
-    xml_util.tag(this.$rules, "style", "css-start");
-    xml_util.tag(this.$rules, "script", "js-start");
-    xml_util.tag(this.$rules, "cfscript", "js-start");
-
-    this.embedRules(JavaScriptHighlightRules, "js-", [{
-        token: "comment",
-        regex: "\\/\\/.*(?=<\\/script>)",
-        next: "tag"
-    }, {
-        token: "meta.tag",
-        regex: "<\\/(?=script)",
-        next: "tag"
-    }, {
-        token: "comment",
-        regex: "\\/\\/.*(?=<\\/cfscript>)",
-        next: "tag"
-    }, {
-        token: "meta.tag",
-        regex: "<\\/(?=cfscript)",
-        next: "tag"
-    }]);
-    
-    this.embedRules(CssHighlightRules, "css-", [{
-        token: "meta.tag",
-        regex: "<\\/(?=style)",
-        next: "tag"
-    }]);
-};
-
-oop.inherits(ColdfusionHighlightRules, TextHighlightRules);
-
-exports.ColdfusionHighlightRules = ColdfusionHighlightRules;
-});
diff --git a/try/ace/mode-diff.js b/try/ace/mode-diff.js
deleted file mode 100644
index c58f497..0000000
--- a/try/ace/mode-diff.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/diff', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/diff_highlight_rules', 'ace/mode/folding/diff'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var HighlightRules = require("./diff_highlight_rules").DiffHighlightRules;
-var FoldMode = require("./folding/diff").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
-    this.foldingRules = new FoldMode(["diff", "index", "\\+{3}", "@@|\\*{5}"], "i");
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/diff_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DiffHighlightRules = function() {


-
-    this.$rules = {
-        "start" : [{
-                regex: "^(?:\\*{15}|={67}|-{3}|\\+{3})$",
-                token: "punctuation.definition.separator.diff",
-                "name": "keyword"
-            }, { //diff.range.unified
-                regex: "^(@@)(\\s*.+?\\s*)(@@)(.*)$",
-                token: [
-                    "constant",
-                    "constant.numeric",
-                    "constant",
-                    "comment.doc.tag"
-                ]
-            }, { //diff.range.normal
-                regex: "^(\\d+)([,\\d]+)(a|d|c)(\\d+)([,\\d]+)(.*)$",
-                token: [
-                    "constant.numeric",
-                    "punctuation.definition.range.diff",
-                    "constant.function",
-                    "constant.numeric",
-                    "punctuation.definition.range.diff",
-                    "invalid"
-                ],
-                "name": "meta."
-            }, {
-                regex: "^(\\-{3}|\\+{3}|\\*{3})( .+)$",
-                token: [
-                    "constant.numeric",
-                    "meta.tag"
-                ]
-            }, { // added
-                regex: "^([!+>])(.*?)(\\s*)$",
-                token: [
-                    "support.constant",
-                    "text",
-                    "invalid"
-                ]
-            }, { // removed
-                regex: "^([<\\-])(.*?)(\\s*)$",
-                token: [
-                    "support.function",
-                    "string",
-                    "invalid"
-                ]
-            }, {
-                regex: "^(diff)(\\s+--\\w+)?(.+?)( .+)?$",
-                token: ["variable", "variable", "keyword", "variable"]
-            }, {
-                regex: "^Index.+$",
-                token: "variable"
-            }, {
-                regex: "\\s*$",
-                token: "invalid"
-            }, {
-                defaultToken: "invisible",
-                caseInsensitive: true
-            }
-        ]
-    };
-};
-
-oop.inherits(DiffHighlightRules, TextHighlightRules);
-
-exports.DiffHighlightRules = DiffHighlightRules;
-});
-
-define('ace/mode/folding/diff', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function(levels, flag) {
-	this.regExpList = levels;
-	this.flag = flag;
-	this.foldingStartMarker = RegExp("^(" + levels.join("|") + ")", this.flag);
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var start = {row: row, column: line.length};
-
-        var regList = this.regExpList;
-        for (var i = 1; i <= regList.length; i++) {
-            var re = RegExp("^(" + regList.slice(0, i).join("|") + ")", this.flag);
-            if (re.test(line))
-                break;
-        }
-
-        for (var l = session.getLength(); ++row < l; ) {
-            line = session.getLine(row);
-            if (re.test(line))
-                break;
-        }
-        if (row == start.row + 1)
-            return;
-        return  Range.fromPoints(start, {row: row - 1, column: line.length});
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-erlang.js b/try/ace/mode-erlang.js
deleted file mode 100644
index d58b373..0000000
--- a/try/ace/mode-erlang.js
+++ /dev/null
@@ -1,951 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- *
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/erlang', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/erlang_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var ErlangHighlightRules = require("./erlang_highlight_rules").ErlangHighlightRules;
-var FoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    var highlighter = new ErlangHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "%";
-    this.blockComment = {start: "/*", end: "*/"};
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/erlang_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var ErlangHighlightRules = function() {
-
-    this.$rules = { start: 
-       [ { include: '#module-directive' },
-         { include: '#import-export-directive' },
-         { include: '#behaviour-directive' },
-         { include: '#record-directive' },
-         { include: '#define-directive' },
-         { include: '#macro-directive' },
-         { include: '#directive' },
-         { include: '#function' },
-         { include: '#everything-else' } ],
-      '#atom': 
-       [ { token: 'punctuation.definition.symbol.begin.erlang',
-           regex: '\'',
-           push: 
-            [ { token: 'punctuation.definition.symbol.end.erlang',
-                regex: '\'',
-                next: 'pop' },
-              { token: 
-                 [ 'punctuation.definition.escape.erlang',
-                   'constant.other.symbol.escape.erlang',
-                   'punctuation.definition.escape.erlang',
-                   'constant.other.symbol.escape.erlang',
-                   'constant.other.symbol.escape.erlang' ],
-                regex: '(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' },
-              { token: 'invalid.illegal.atom.erlang', regex: '\\\\\\^?.?' },
-              { defaultToken: 'constant.other.symbol.quoted.single.erlang' } ] },
-         { token: 'constant.other.symbol.unquoted.erlang',
-           regex: '[a-z][a-zA-Z\\d@_]*' } ],
-      '#behaviour-directive': 
-       [ { token: 
-            [ 'meta.directive.behaviour.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.behaviour.erlang',
-              'keyword.control.directive.behaviour.erlang',
-              'meta.directive.behaviour.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.behaviour.erlang',
-              'entity.name.type.class.behaviour.definition.erlang',
-              'meta.directive.behaviour.erlang',
-              'punctuation.definition.parameters.end.erlang',
-              'meta.directive.behaviour.erlang',
-              'punctuation.section.directive.end.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(behaviour)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\))(\\s*)(\\.)' } ],
-      '#binary': 
-       [ { token: 'punctuation.definition.binary.begin.erlang',
-           regex: '<<',
-           push: 
-            [ { token: 'punctuation.definition.binary.end.erlang',
-                regex: '>>',
-                next: 'pop' },
-              { token: 
-                 [ 'punctuation.separator.binary.erlang',
-                   'punctuation.separator.value-size.erlang' ],
-                regex: '(,)|(:)' },
-              { include: '#internal-type-specifiers' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.structure.binary.erlang' } ] } ],
-      '#character': 
-       [ { token: 
-            [ 'punctuation.definition.character.erlang',
-              'punctuation.definition.escape.erlang',
-              'constant.character.escape.erlang',
-              'punctuation.definition.escape.erlang',
-              'constant.character.escape.erlang',
-              'constant.character.escape.erlang' ],
-           regex: '(\\$)(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' },
-         { token: 'invalid.illegal.character.erlang',
-           regex: '\\$\\\\\\^?.?' },
-         { token: 
-            [ 'punctuation.definition.character.erlang',
-              'constant.character.erlang' ],
-           regex: '(\\$)(\\S)' },
-         { token: 'invalid.illegal.character.erlang', regex: '\\$.?' } ],
-      '#comment': 
-       [ { token: 'punctuation.definition.comment.erlang',
-           regex: '%.*$',
-           push_: 
-            [ { token: 'comment.line.percentage.erlang',
-                regex: '$',
-                next: 'pop' },
-              { defaultToken: 'comment.line.percentage.erlang' } ] } ],
-      '#define-directive': 
-       [ { token: 
-            [ 'meta.directive.define.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.define.erlang',
-              'keyword.control.directive.define.erlang',
-              'meta.directive.define.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.define.erlang',
-              'entity.name.function.macro.definition.erlang',
-              'meta.directive.define.erlang',
-              'punctuation.separator.parameters.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(define)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(,)',
-           push: 
-            [ { token: 
-                 [ 'punctuation.definition.parameters.end.erlang',
-                   'meta.directive.define.erlang',
-                   'punctuation.section.directive.end.erlang' ],
-                regex: '(\\))(\\s*)(\\.)',
-                next: 'pop' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.directive.define.erlang' } ] },
-         { token: 'meta.directive.define.erlang',
-           regex: '(?=^\\s*-\\s*define\\s*\\(\\s*[a-zA-Z\\d@_]+\\s*\\()',
-           push: 
-            [ { token: 
-                 [ 'punctuation.definition.parameters.end.erlang',
-                   'meta.directive.define.erlang',
-                   'punctuation.section.directive.end.erlang' ],
-                regex: '(\\))(\\s*)(\\.)',
-                next: 'pop' },
-              { token: 
-                 [ 'text',
-                   'punctuation.section.directive.begin.erlang',
-                   'text',
-                   'keyword.control.directive.define.erlang',
-                   'text',
-                   'punctuation.definition.parameters.begin.erlang',
-                   'text',
-                   'entity.name.function.macro.definition.erlang',
-                   'text',
-                   'punctuation.definition.parameters.begin.erlang' ],
-                regex: '^(\\s*)(-)(\\s*)(define)(\\s*)(\\()(\\s*)([a-zA-Z\\d@_]+)(\\s*)(\\()',
-                push: 
-                 [ { token: 
-                      [ 'punctuation.definition.parameters.end.erlang',
-                        'text',
-                        'punctuation.separator.parameters.erlang' ],
-                     regex: '(\\))(\\s*)(,)',
-                     next: 'pop' },
-                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },
-                   { include: '#everything-else' } ] },
-              { token: 'punctuation.separator.define.erlang',
-                regex: '\\|\\||\\||:|;|,|\\.|->' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.directive.define.erlang' } ] } ],
-      '#directive': 
-       [ { token: 
-            [ 'meta.directive.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.erlang',
-              'keyword.control.directive.erlang',
-              'meta.directive.erlang',
-              'punctuation.definition.parameters.begin.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\(?)',
-           push: 
-            [ { token: 
-                 [ 'punctuation.definition.parameters.end.erlang',
-                   'meta.directive.erlang',
-                   'punctuation.section.directive.end.erlang' ],
-                regex: '(\\)?)(\\s*)(\\.)',
-                next: 'pop' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.directive.erlang' } ] },
-         { token: 
-            [ 'meta.directive.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.erlang',
-              'keyword.control.directive.erlang',
-              'meta.directive.erlang',
-              'punctuation.section.directive.end.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\.)' } ],
-      '#everything-else': 
-       [ { include: '#comment' },
-         { include: '#record-usage' },
-         { include: '#macro-usage' },
-         { include: '#expression' },
-         { include: '#keyword' },
-         { include: '#textual-operator' },
-         { include: '#function-call' },
-         { include: '#tuple' },
-         { include: '#list' },
-         { include: '#binary' },
-         { include: '#parenthesized-expression' },
-         { include: '#character' },
-         { include: '#number' },
-         { include: '#atom' },
-         { include: '#string' },
-         { include: '#symbolic-operator' },
-         { include: '#variable' } ],
-      '#expression': 
-       [ { token: 'keyword.control.if.erlang',
-           regex: '\\bif\\b',
-           push: 
-            [ { token: 'keyword.control.end.erlang',
-                regex: '\\bend\\b',
-                next: 'pop' },
-              { include: '#internal-expression-punctuation' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.if.erlang' } ] },
-         { token: 'keyword.control.case.erlang',
-           regex: '\\bcase\\b',
-           push: 
-            [ { token: 'keyword.control.end.erlang',
-                regex: '\\bend\\b',
-                next: 'pop' },
-              { include: '#internal-expression-punctuation' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.case.erlang' } ] },
-         { token: 'keyword.control.receive.erlang',
-           regex: '\\breceive\\b',
-           push: 
-            [ { token: 'keyword.control.end.erlang',
-                regex: '\\bend\\b',
-                next: 'pop' },
-              { include: '#internal-expression-punctuation' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.receive.erlang' } ] },
-         { token: 
-            [ 'keyword.control.fun.erlang',
-              'text',
-              'entity.name.type.class.module.erlang',
-              'text',
-              'punctuation.separator.module-function.erlang',
-              'text',
-              'entity.name.function.erlang',
-              'text',
-              'punctuation.separator.function-arity.erlang' ],
-           regex: '\\b(fun)(\\s*)(?:([a-z][a-zA-Z\\d@_]*)(\\s*)(:)(\\s*))?([a-z][a-zA-Z\\d@_]*)(\\s*)(/)' },
-         { token: 'keyword.control.fun.erlang',
-           regex: '\\bfun\\b',
-           push: 
-            [ { token: 'keyword.control.end.erlang',
-                regex: '\\bend\\b',
-                next: 'pop' },
-              { token: 'text',
-                regex: '(?=\\()',
-                push: 
-                 [ { token: 'punctuation.separator.clauses.erlang',
-                     regex: ';|(?=\\bend\\b)',
-                     next: 'pop' },
-                   { include: '#internal-function-parts' } ] },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.fun.erlang' } ] },
-         { token: 'keyword.control.try.erlang',
-           regex: '\\btry\\b',
-           push: 
-            [ { token: 'keyword.control.end.erlang',
-                regex: '\\bend\\b',
-                next: 'pop' },
-              { include: '#internal-expression-punctuation' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.try.erlang' } ] },
-         { token: 'keyword.control.begin.erlang',
-           regex: '\\bbegin\\b',
-           push: 
-            [ { token: 'keyword.control.end.erlang',
-                regex: '\\bend\\b',
-                next: 'pop' },
-              { include: '#internal-expression-punctuation' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.begin.erlang' } ] },
-         { token: 'keyword.control.query.erlang',
-           regex: '\\bquery\\b',
-           push: 
-            [ { token: 'keyword.control.end.erlang',
-                regex: '\\bend\\b',
-                next: 'pop' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.query.erlang' } ] } ],
-      '#function': 
-       [ { token: 
-            [ 'meta.function.erlang',
-              'entity.name.function.definition.erlang',
-              'meta.function.erlang' ],
-           regex: '^(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(?=\\()',
-           push: 
-            [ { token: 'punctuation.terminator.function.erlang',
-                regex: '\\.',
-                next: 'pop' },
-              { token: [ 'text', 'entity.name.function.erlang', 'text' ],
-                regex: '^(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(?=\\()' },
-              { token: 'text',
-                regex: '(?=\\()',
-                push: 
-                 [ { token: 'punctuation.separator.clauses.erlang',
-                     regex: ';|(?=\\.)',
-                     next: 'pop' },
-                   { include: '#parenthesized-expression' },
-                   { include: '#internal-function-parts' } ] },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.function.erlang' } ] } ],
-      '#function-call': 
-       [ { token: 'meta.function-call.erlang',
-           regex: '(?=(?:[a-z][a-zA-Z\\d@_]*|\'[^\']*\')\\s*(?:\\(|:\\s*(?:[a-z][a-zA-Z\\d@_]*|\'[^\']*\')\\s*\\())',
-           push: 
-            [ { token: 'punctuation.definition.parameters.end.erlang',
-                regex: '\\)',
-                next: 'pop' },
-              { token: 
-                 [ 'entity.name.type.class.module.erlang',
-                   'text',
-                   'punctuation.separator.module-function.erlang',
-                   'text',
-                   'entity.name.function.guard.erlang',
-                   'text',
-                   'punctuation.definition.parameters.begin.erlang' ],
-                regex: '(?:(erlang)(\\s*)(:)(\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\s*)(\\()',
-                push: 
-                 [ { token: 'text', regex: '(?=\\))', next: 'pop' },
-                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },
-                   { include: '#everything-else' } ] },
-              { token: 
-                 [ 'entity.name.type.class.module.erlang',
-                   'text',
-                   'punctuation.separator.module-function.erlang',
-                   'text',
-                   'entity.name.function.erlang',
-                   'text',
-                   'punctuation.definition.parameters.begin.erlang' ],
-                regex: '(?:([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(:)(\\s*))?([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(\\()',
-                push: 
-                 [ { token: 'text', regex: '(?=\\))', next: 'pop' },
-                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },
-                   { include: '#everything-else' } ] },
-              { defaultToken: 'meta.function-call.erlang' } ] } ],
-      '#import-export-directive': 
-       [ { token: 
-            [ 'meta.directive.import.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.import.erlang',
-              'keyword.control.directive.import.erlang',
-              'meta.directive.import.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.import.erlang',
-              'entity.name.type.class.module.erlang',
-              'meta.directive.import.erlang',
-              'punctuation.separator.parameters.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(import)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(,)',
-           push: 
-            [ { token: 
-                 [ 'punctuation.definition.parameters.end.erlang',
-                   'meta.directive.import.erlang',
-                   'punctuation.section.directive.end.erlang' ],
-                regex: '(\\))(\\s*)(\\.)',
-                next: 'pop' },
-              { include: '#internal-function-list' },
-              { defaultToken: 'meta.directive.import.erlang' } ] },
-         { token: 
-            [ 'meta.directive.export.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.export.erlang',
-              'keyword.control.directive.export.erlang',
-              'meta.directive.export.erlang',
-              'punctuation.definition.parameters.begin.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(export)(\\s*)(\\()',
-           push: 
-            [ { token: 
-                 [ 'punctuation.definition.parameters.end.erlang',
-                   'meta.directive.export.erlang',
-                   'punctuation.section.directive.end.erlang' ],
-                regex: '(\\))(\\s*)(\\.)',
-                next: 'pop' },
-              { include: '#internal-function-list' },
-              { defaultToken: 'meta.directive.export.erlang' } ] } ],
-      '#internal-expression-punctuation': 
-       [ { token: 
-            [ 'punctuation.separator.clause-head-body.erlang',
-              'punctuation.separator.clauses.erlang',
-              'punctuation.separator.expressions.erlang' ],
-           regex: '(->)|(;)|(,)' } ],
-      '#internal-function-list': 
-       [ { token: 'punctuation.definition.list.begin.erlang',
-           regex: '\\[',
-           push: 
-            [ { token: 'punctuation.definition.list.end.erlang',
-                regex: '\\]',
-                next: 'pop' },
-              { token: 
-                 [ 'entity.name.function.erlang',
-                   'text',
-                   'punctuation.separator.function-arity.erlang' ],
-                regex: '([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(/)',
-                push: 
-                 [ { token: 'punctuation.separator.list.erlang',
-                     regex: ',|(?=\\])',
-                     next: 'pop' },
-                   { include: '#everything-else' } ] },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.structure.list.function.erlang' } ] } ],
-      '#internal-function-parts': 
-       [ { token: 'text',
-           regex: '(?=\\()',
-           push: 
-            [ { token: 'punctuation.separator.clause-head-body.erlang',
-                regex: '->',
-                next: 'pop' },
-              { token: 'punctuation.definition.parameters.begin.erlang',
-                regex: '\\(',
-                push: 
-                 [ { token: 'punctuation.definition.parameters.end.erlang',
-                     regex: '\\)',
-                     next: 'pop' },
-                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },
-                   { include: '#everything-else' } ] },
-              { token: 'punctuation.separator.guards.erlang', regex: ',|;' },
-              { include: '#everything-else' } ] },
-         { token: 'punctuation.separator.expressions.erlang',
-           regex: ',' },
-         { include: '#everything-else' } ],
-      '#internal-record-body': 
-       [ { token: 'punctuation.definition.class.record.begin.erlang',
-           regex: '\\{',
-           push: 
-            [ { token: 'meta.structure.record.erlang',
-                regex: '(?=\\})',
-                next: 'pop' },
-              { token: 
-                 [ 'variable.other.field.erlang',
-                   'variable.language.omitted.field.erlang',
-                   'text',
-                   'keyword.operator.assignment.erlang' ],
-                regex: '(?:([a-z][a-zA-Z\\d@_]*|\'[^\']*\')|(_))(\\s*)(=|::)',
-                push: 
-                 [ { token: 'punctuation.separator.class.record.erlang',
-                     regex: ',|(?=\\})',
-                     next: 'pop' },
-                   { include: '#everything-else' } ] },
-              { token: 
-                 [ 'variable.other.field.erlang',
-                   'text',
-                   'punctuation.separator.class.record.erlang' ],
-                regex: '([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)((?:,)?)' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.structure.record.erlang' } ] } ],
-      '#internal-type-specifiers': 
-       [ { token: 'punctuation.separator.value-type.erlang',
-           regex: '/',
-           push: 
-            [ { token: 'text', regex: '(?=,|:|>>)', next: 'pop' },
-              { token: 
-                 [ 'storage.type.erlang',
-                   'storage.modifier.signedness.erlang',
-                   'storage.modifier.endianness.erlang',
-                   'storage.modifier.unit.erlang',
-                   'punctuation.separator.type-specifiers.erlang' ],
-                regex: '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)' } ] } ],
-      '#keyword': 
-       [ { token: 'keyword.control.erlang',
-           regex: '\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\b' } ],
-      '#list': 
-       [ { token: 'punctuation.definition.list.begin.erlang',
-           regex: '\\[',
-           push: 
-            [ { token: 'punctuation.definition.list.end.erlang',
-                regex: '\\]',
-                next: 'pop' },
-              { token: 'punctuation.separator.list.erlang',
-                regex: '\\||\\|\\||,' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.structure.list.erlang' } ] } ],
-      '#macro-directive': 
-       [ { token: 
-            [ 'meta.directive.ifdef.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.ifdef.erlang',
-              'keyword.control.directive.ifdef.erlang',
-              'meta.directive.ifdef.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.ifdef.erlang',
-              'entity.name.function.macro.erlang',
-              'meta.directive.ifdef.erlang',
-              'punctuation.definition.parameters.end.erlang',
-              'meta.directive.ifdef.erlang',
-              'punctuation.section.directive.end.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(ifdef)(\\s*)(\\()(\\s*)([a-zA-z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' },
-         { token: 
-            [ 'meta.directive.ifndef.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.ifndef.erlang',
-              'keyword.control.directive.ifndef.erlang',
-              'meta.directive.ifndef.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.ifndef.erlang',
-              'entity.name.function.macro.erlang',
-              'meta.directive.ifndef.erlang',
-              'punctuation.definition.parameters.end.erlang',
-              'meta.directive.ifndef.erlang',
-              'punctuation.section.directive.end.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(ifndef)(\\s*)(\\()(\\s*)([a-zA-z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' },
-         { token: 
-            [ 'meta.directive.undef.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.undef.erlang',
-              'keyword.control.directive.undef.erlang',
-              'meta.directive.undef.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.undef.erlang',
-              'entity.name.function.macro.erlang',
-              'meta.directive.undef.erlang',
-              'punctuation.definition.parameters.end.erlang',
-              'meta.directive.undef.erlang',
-              'punctuation.section.directive.end.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(undef)(\\s*)(\\()(\\s*)([a-zA-z\\d@_]+)(\\s*)(\\))(\\s*)(\\.)' } ],
-      '#macro-usage': 
-       [ { token: 
-            [ 'keyword.operator.macro.erlang',
-              'meta.macro-usage.erlang',
-              'entity.name.function.macro.erlang' ],
-           regex: '(\\?\\??)(\\s*)([a-zA-Z\\d@_]+)' } ],
-      '#module-directive': 
-       [ { token: 
-            [ 'meta.directive.module.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.module.erlang',
-              'keyword.control.directive.module.erlang',
-              'meta.directive.module.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.module.erlang',
-              'entity.name.type.class.module.definition.erlang',
-              'meta.directive.module.erlang',
-              'punctuation.definition.parameters.end.erlang',
-              'meta.directive.module.erlang',
-              'punctuation.section.directive.end.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(module)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*)(\\s*)(\\))(\\s*)(\\.)' } ],
-      '#number': 
-       [ { token: 'text',
-           regex: '(?=\\d)',
-           push: 
-            [ { token: 'text', regex: '(?!\\d)', next: 'pop' },
-              { token: 
-                 [ 'constant.numeric.float.erlang',
-                   'punctuation.separator.integer-float.erlang',
-                   'constant.numeric.float.erlang',
-                   'punctuation.separator.float-exponent.erlang' ],
-                regex: '(\\d+)(\\.)(\\d+)((?:[eE][\\+\\-]?\\d+)?)' },
-              { token: 
-                 [ 'constant.numeric.integer.binary.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.binary.erlang' ],
-                regex: '(2)(#)([0-1]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-3.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-3.erlang' ],
-                regex: '(3)(#)([0-2]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-4.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-4.erlang' ],
-                regex: '(4)(#)([0-3]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-5.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-5.erlang' ],
-                regex: '(5)(#)([0-4]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-6.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-6.erlang' ],
-                regex: '(6)(#)([0-5]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-7.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-7.erlang' ],
-                regex: '(7)(#)([0-6]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.octal.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.octal.erlang' ],
-                regex: '(8)(#)([0-7]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-9.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-9.erlang' ],
-                regex: '(9)(#)([0-8]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.decimal.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.decimal.erlang' ],
-                regex: '(10)(#)(\\d+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-11.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-11.erlang' ],
-                regex: '(11)(#)([\\daA]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-12.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-12.erlang' ],
-                regex: '(12)(#)([\\da-bA-B]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-13.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-13.erlang' ],
-                regex: '(13)(#)([\\da-cA-C]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-14.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-14.erlang' ],
-                regex: '(14)(#)([\\da-dA-D]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-15.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-15.erlang' ],
-                regex: '(15)(#)([\\da-eA-E]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.hexadecimal.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.hexadecimal.erlang' ],
-                regex: '(16)(#)([\\da-fA-F]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-17.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-17.erlang' ],
-                regex: '(17)(#)([\\da-gA-G]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-18.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-18.erlang' ],
-                regex: '(18)(#)([\\da-hA-H]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-19.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-19.erlang' ],
-                regex: '(19)(#)([\\da-iA-I]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-20.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-20.erlang' ],
-                regex: '(20)(#)([\\da-jA-J]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-21.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-21.erlang' ],
-                regex: '(21)(#)([\\da-kA-K]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-22.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-22.erlang' ],
-                regex: '(22)(#)([\\da-lA-L]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-23.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-23.erlang' ],
-                regex: '(23)(#)([\\da-mA-M]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-24.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-24.erlang' ],
-                regex: '(24)(#)([\\da-nA-N]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-25.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-25.erlang' ],
-                regex: '(25)(#)([\\da-oA-O]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-26.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-26.erlang' ],
-                regex: '(26)(#)([\\da-pA-P]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-27.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-27.erlang' ],
-                regex: '(27)(#)([\\da-qA-Q]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-28.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-28.erlang' ],
-                regex: '(28)(#)([\\da-rA-R]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-29.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-29.erlang' ],
-                regex: '(29)(#)([\\da-sA-S]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-30.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-30.erlang' ],
-                regex: '(30)(#)([\\da-tA-T]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-31.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-31.erlang' ],
-                regex: '(31)(#)([\\da-uA-U]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-32.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-32.erlang' ],
-                regex: '(32)(#)([\\da-vA-V]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-33.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-33.erlang' ],
-                regex: '(33)(#)([\\da-wA-W]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-34.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-34.erlang' ],
-                regex: '(34)(#)([\\da-xA-X]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-35.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-35.erlang' ],
-                regex: '(35)(#)([\\da-yA-Y]+)' },
-              { token: 
-                 [ 'constant.numeric.integer.base-36.erlang',
-                   'punctuation.separator.base-integer.erlang',
-                   'constant.numeric.integer.base-36.erlang' ],
-                regex: '(36)(#)([\\da-zA-Z]+)' },
-              { token: 'invalid.illegal.integer.erlang',
-                regex: '\\d+#[\\da-zA-Z]+' },
-              { token: 'constant.numeric.integer.decimal.erlang',
-                regex: '\\d+' } ] } ],
-      '#parenthesized-expression': 
-       [ { token: 'punctuation.section.expression.begin.erlang',
-           regex: '\\(',
-           push: 
-            [ { token: 'punctuation.section.expression.end.erlang',
-                regex: '\\)',
-                next: 'pop' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.expression.parenthesized' } ] } ],
-      '#record-directive': 
-       [ { token: 
-            [ 'meta.directive.record.erlang',
-              'punctuation.section.directive.begin.erlang',
-              'meta.directive.record.erlang',
-              'keyword.control.directive.import.erlang',
-              'meta.directive.record.erlang',
-              'punctuation.definition.parameters.begin.erlang',
-              'meta.directive.record.erlang',
-              'entity.name.type.class.record.definition.erlang',
-              'meta.directive.record.erlang',
-              'punctuation.separator.parameters.erlang' ],
-           regex: '^(\\s*)(-)(\\s*)(record)(\\s*)(\\()(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(,)',
-           push: 
-            [ { token: 
-                 [ 'punctuation.definition.class.record.end.erlang',
-                   'meta.directive.record.erlang',
-                   'punctuation.definition.parameters.end.erlang',
-                   'meta.directive.record.erlang',
-                   'punctuation.section.directive.end.erlang' ],
-                regex: '(\\})(\\s*)(\\))(\\s*)(\\.)',
-                next: 'pop' },
-              { include: '#internal-record-body' },
-              { defaultToken: 'meta.directive.record.erlang' } ] } ],
-      '#record-usage': 
-       [ { token: 
-            [ 'keyword.operator.record.erlang',
-              'meta.record-usage.erlang',
-              'entity.name.type.class.record.erlang',
-              'meta.record-usage.erlang',
-              'punctuation.separator.record-field.erlang',
-              'meta.record-usage.erlang',
-              'variable.other.field.erlang' ],
-           regex: '(#)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')(\\s*)(\\.)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')' },
-         { token: 
-            [ 'keyword.operator.record.erlang',
-              'meta.record-usage.erlang',
-              'entity.name.type.class.record.erlang' ],
-           regex: '(#)(\\s*)([a-z][a-zA-Z\\d@_]*|\'[^\']*\')',
-           push: 
-            [ { token: 'punctuation.definition.class.record.end.erlang',
-                regex: '\\}',
-                next: 'pop' },
-              { include: '#internal-record-body' },
-              { defaultToken: 'meta.record-usage.erlang' } ] } ],
-      '#string': 
-       [ { token: 'punctuation.definition.string.begin.erlang',
-           regex: '"',
-           push: 
-            [ { token: 'punctuation.definition.string.end.erlang',
-                regex: '"',
-                next: 'pop' },
-              { token: 
-                 [ 'punctuation.definition.escape.erlang',
-                   'constant.character.escape.erlang',
-                   'punctuation.definition.escape.erlang',
-                   'constant.character.escape.erlang',
-                   'constant.character.escape.erlang' ],
-                regex: '(\\\\)(?:([bdefnrstv\\\\\'"])|(\\^)([@-_])|([0-7]{1,3}))' },
-              { token: 'invalid.illegal.string.erlang', regex: '\\\\\\^?.?' },
-              { token: 
-                 [ 'punctuation.definition.placeholder.erlang',
-                   'punctuation.separator.placeholder-parts.erlang',
-                   'constant.other.placeholder.erlang',
-                   'punctuation.separator.placeholder-parts.erlang',
-                   'punctuation.separator.placeholder-parts.erlang',
-                   'constant.other.placeholder.erlang',
-                   'punctuation.separator.placeholder-parts.erlang',
-                   'punctuation.separator.placeholder-parts.erlang',
-                   'punctuation.separator.placeholder-parts.erlang',
-                   'constant.other.placeholder.erlang',
-                   'constant.other.placeholder.erlang' ],
-                regex: '(~)(?:((?:\\-)?)(\\d+)|(\\*))?(?:(\\.)(?:(\\d+)|(\\*)))?(?:(\\.)(?:(\\*)|(.)))?([~cfegswpWPBX#bx\\+ni])' },
-              { token: 
-                 [ 'punctuation.definition.placeholder.erlang',
-                   'punctuation.separator.placeholder-parts.erlang',
-                   'constant.other.placeholder.erlang',
-                   'constant.other.placeholder.erlang' ],
-                regex: '(~)((?:\\*)?)((?:\\d+)?)([~du\\-#fsacl])' },
-              { token: 'invalid.illegal.string.erlang', regex: '~.?' },
-              { defaultToken: 'string.quoted.double.erlang' } ] } ],
-      '#symbolic-operator': 
-       [ { token: 'keyword.operator.symbolic.erlang',
-           regex: '\\+\\+|\\+|--|-|\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::' } ],
-      '#textual-operator': 
-       [ { token: 'keyword.operator.textual.erlang',
-           regex: '\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\b' } ],
-      '#tuple': 
-       [ { token: 'punctuation.definition.tuple.begin.erlang',
-           regex: '\\{',
-           push: 
-            [ { token: 'punctuation.definition.tuple.end.erlang',
-                regex: '\\}',
-                next: 'pop' },
-              { token: 'punctuation.separator.tuple.erlang', regex: ',' },
-              { include: '#everything-else' },
-              { defaultToken: 'meta.structure.tuple.erlang' } ] } ],
-      '#variable': 
-       [ { token: [ 'variable.other.erlang', 'variable.language.omitted.erlang' ],
-           regex: '(_[a-zA-Z\\d@_]+|[A-Z][a-zA-Z\\d@_]*)|(_)' } ] }
-    
-    this.normalizeRules();
-};
-
-ErlangHighlightRules.metaData = { comment: 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp',
-      fileTypes: [ 'erl', 'hrl' ],
-      keyEquivalent: '^~E',
-      name: 'Erlang',
-      scopeName: 'source.erlang' }
-
-
-oop.inherits(ErlangHighlightRules, TextHighlightRules);
-
-exports.ErlangHighlightRules = ErlangHighlightRules;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-forth.js b/try/ace/mode-forth.js
deleted file mode 100644
index 8becc28..0000000
--- a/try/ace/mode-forth.js
+++ /dev/null
@@ -1,239 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- *
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/forth', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/forth_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var ForthHighlightRules = require("./forth_highlight_rules").ForthHighlightRules;
-var FoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    var highlighter = new ForthHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "(?<=^|\\s)\\.?\\( [^)]*\\)";
-    this.blockComment = {start: "/*", end: "*/"};
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/forth_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var ForthHighlightRules = function() {
-
-    this.$rules = { start: [ { include: '#forth' } ],
-      '#comment': 
-       [ { token: 'comment.line.double-dash.forth',
-           regex: '(?:^|\\s)--\\s.*$',
-           comment: 'line comments for iForth' },
-         { token: 'comment.line.backslash.forth',
-           regex: '(?:^|\\s)\\\\[\\s\\S]*$',
-           comment: 'ANSI line comment' },
-         { token: 'comment.line.backslash-g.forth',
-           regex: '(?:^|\\s)\\\\[Gg] .*$',
-           comment: 'gForth line comment' },
-         { token: 'comment.block.forth',
-           regex: '(?:^|\\s)\\(\\*(?=\\s|$)',
-           push: 
-            [ { token: 'comment.block.forth',
-                regex: '(?:^|\\s)\\*\\)(?=\\s|$)',
-                next: 'pop' },
-              { defaultToken: 'comment.block.forth' } ],
-           comment: 'multiline comments for iForth' },
-         { token: 'comment.block.documentation.forth',
-           regex: '\\bDOC\\b',
-           caseInsensitive: true,
-           push: 
-            [ { token: 'comment.block.documentation.forth',
-                regex: '\\bENDDOC\\b',
-                caseInsensitive: true,
-                next: 'pop' },
-              { defaultToken: 'comment.block.documentation.forth' } ],
-           comment: 'documentation comments for iForth' },
-         { token: 'comment.line.parentheses.forth',
-           regex: '(?:^|\\s)\\.?\\( [^)]*\\)',
-           comment: 'ANSI line comment' } ],
-      '#constant': 
-       [ { token: 'constant.language.forth',
-           regex: '(?:^|\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\s|$)',
-           caseInsensitive: true},
-         { token: 'constant.numeric.forth',
-           regex: '(?:^|\\s)[$#%]?[-+]?[0-9]+(?:\\.[0-9]*e-?[0-9]+|\\.?[0-9a-fA-F]*)(?=\\s|$)'},
-         { token: 'constant.character.forth',
-           regex: '(?:^|\\s)(?:[&^]\\S|(?:"|\')\\S(?:"|\'))(?=\\s|$)'}],
-      '#forth': 
-       [ { include: '#constant' },
-         { include: '#comment' },
-         { include: '#string' },
-         { include: '#word' },
-         { include: '#variable' },
-         { include: '#storage' },
-         { include: '#word-def' } ],
-      '#storage': 
-       [ { token: 'storage.type.forth',
-           regex: '(?:^|\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\s|$)',
-           caseInsensitive: true}],
-      '#string': 
-       [ { token: 'string.quoted.double.forth',
-           regex: '(ABORT" |BREAK" |\\." |C" |0"|S\\\\?" )([^"]+")',
-           caseInsensitive: true},
-         { token: 'string.unquoted.forth',
-           regex: '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\S+(?=\\s|$)',
-           caseInsensitive: true}],
-      '#variable': 
-       [ { token: 'variable.language.forth',
-           regex: '\\b(?:I|J)\\b',
-           caseInsensitive: true } ],
-      '#word': 
-       [ { token: 'keyword.control.immediate.forth',
-           regex: '(?:^|\\s)\\[(?:\\?DO|\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\](?=\\s|$)',
-           caseInsensitive: true},
-         { token: 'keyword.other.immediate.forth',
-           regex: '(?:^|\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\'S|])(?=\\s|$)',
-           caseInsensitive: true},
-         { token: 'keyword.control.compile-only.forth',
-           regex: '(?:^|\\s)(?:-DO|\\-LOOP|\\?DO|\\?LEAVE|\\+DO|\\+LOOP|ABORT\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\-DO|U\\+DO|UNTIL|WHILE)(?=\\s|$)',
-           caseInsensitive: true},
-         { token: 'keyword.other.compile-only.forth',
-           regex: '(?:^|\\s)(?:\\?DUP-0=-IF|\\?DUP-IF|\\)|\\[|\\[\'\\]|\\[CHAR\\]|\\[COMPILE\\]|\\[IS\\]|\\[TO\\]|<COMPILATION|<INTERPRETATION|ASSERT\\(|ASSERT0\\(|ASSERT1\\(|ASSERT2\\(|ASSERT3\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\s|$)',
-           caseInsensitive: true},
-         { token: 'keyword.other.non-immediate.forth',
-           regex: '(?:^|\\s)(?:\'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\s|$)',
-           caseInsensitive: true},
-         { token: 'keyword.other.warning.forth',
-           regex: '(?:^|\\s)(?:~~|BREAK:|BREAK"|DBG)(?=\\s|$)',
-           caseInsensitive: true}],
-      '#word-def': 
-       [ { token: 
-            [ 'keyword.other.compile-only.forth',
-              'keyword.other.compile-only.forth',
-              'meta.block.forth',
-              'entity.name.function.forth' ],
-           regex: '(:NONAME)|(^:|\\s:)(\\s)(\\S+)(?=\\s|$)',
-           caseInsensitive: true,
-           push: 
-            [ { token: 'keyword.other.compile-only.forth',
-                regex: ';(?:CODE)?',
-                caseInsensitive: true,
-                next: 'pop' },
-              { include: '#constant' },
-              { include: '#comment' },
-              { include: '#string' },
-              { include: '#word' },
-              { include: '#variable' },
-              { include: '#storage' },
-              { defaultToken: 'meta.block.forth' } ] } ] }
-    
-    this.normalizeRules();
-};
-
-ForthHighlightRules.metaData = { fileTypes: [ 'frt', 'fs', 'ldr' ],
-      foldingStartMarker: '/\\*\\*|\\{\\s*$',
-      foldingStopMarker: '\\*\\*/|^\\s*\\}',
-      keyEquivalent: '^~F',
-      name: 'Forth',
-      scopeName: 'source.forth' }
-
-
-oop.inherits(ForthHighlightRules, TextHighlightRules);
-
-exports.ForthHighlightRules = ForthHighlightRules;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-golang.js b/try/ace/mode-golang.js
deleted file mode 100644
index 1323b6b..0000000
--- a/try/ace/mode-golang.js
+++ /dev/null
@@ -1,632 +0,0 @@
-define('ace/mode/golang', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/golang_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var GolangHighlightRules = require("./golang_highlight_rules").GolangHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new GolangHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-        var endState = tokenizedLine.state;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-        
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };//end getNextLineIndent
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-define('ace/mode/golang_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-    var oop = require("../lib/oop");
-    var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-    var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-    var GolangHighlightRules = function() {
-        var keywords = (
-            "true|else|false|break|case|return|goto|if|const|" +
-            "continue|struct|default|switch|for|" +
-            "func|import|package|chan|defer|fallthrough|go|interface|map|range" +
-            "select|type|var"
-        );
-        var buildinConstants = ("nil|true|false|iota");
-
-        var keywordMapper = this.createKeywordMapper({
-            "variable.language": "this",
-            "keyword": keywords,
-            "constant.language": buildinConstants
-        }, "identifier");
-
-        this.$rules = {
-            "start" : [
-                {
-                    token : "comment",
-                    regex : "\\/\\/.*$"
-                },
-                DocCommentHighlightRules.getStartRule("doc-start"),
-                {
-                    token : "comment", // multi line comment
-                    regex : "\\/\\*",
-                    next : "comment"
-                }, {
-                    token : "string", // single line
-                    regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-                }, {
-                    token : "string", // multi line string start
-                    regex : '["].*\\\\$',
-                    next : "qqstring"
-                }, {
-                    token : "string", // single line
-                    regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-                }, {
-                    token : "string", // multi line string start
-                    regex : "['].*\\\\$",
-                    next : "qstring"
-                }, {
-                    token : "constant.numeric", // hex
-                    regex : "0[xX][0-9a-fA-F]+\\b"
-                }, {
-                    token : "constant.numeric", // float
-                    regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-                }, {
-                    token : "constant", // <CONSTANT>
-                    regex : "<[a-zA-Z0-9.]+>"
-                }, {
-                    token : "keyword", // pre-compiler directivs
-                    regex : "(?:#include|#pragma|#line|#define|#undef|#ifdef|#else|#elif|#endif|#ifndef)"
-                }, {
-                    token : keywordMapper,
-                    regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-                }, {
-                    token : "keyword.operator",
-                    regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"
-                }, {
-                    token : "punctuation.operator",
-                    regex : "\\?|\\:|\\,|\\;|\\."
-                }, {
-                    token : "paren.lparen",
-                    regex : "[[({]"
-                }, {
-                    token : "paren.rparen",
-                    regex : "[\\])}]"
-                }, {
-                    token : "text",
-                    regex : "\\s+"
-                }
-            ],
-            "comment" : [
-                {
-                    token : "comment", // closing comment
-                    regex : ".*?\\*\\/",
-                    next : "start"
-                }, {
-                    token : "comment", // comment spanning whole line
-                    regex : ".+"
-                }
-            ],
-            "qqstring" : [
-                {
-                    token : "string",
-                    regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
-                    next : "start"
-                }, {
-                    token : "string",
-                    regex : '.+'
-                }
-            ],
-            "qstring" : [
-                {
-                    token : "string",
-                    regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
-                    next : "start"
-                }, {
-                    token : "string",
-                    regex : '.+'
-                }
-            ]
-        };
-
-        this.embedRules(DocCommentHighlightRules, "doc-",
-            [ DocCommentHighlightRules.getEndRule("start") ]);
-    }
-    oop.inherits(GolangHighlightRules, TextHighlightRules);
-
-    exports.GolangHighlightRules = GolangHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-haml.js b/try/ace/mode-haml.js
deleted file mode 100644
index caade6f..0000000
--- a/try/ace/mode-haml.js
+++ /dev/null
@@ -1,487 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- * 
- * Garen J. Torikian < gjtorikian AT gmail DOT com >
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/haml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/haml_highlight_rules', 'ace/mode/folding/coffee'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var HamlHighlightRules = require("./haml_highlight_rules").HamlHighlightRules;
-var FoldMode = require("./folding/coffee").FoldMode;
-
-var Mode = function() {
-    var highlighter = new HamlHighlightRules();
-    this.foldingRules = new FoldMode();    
-    
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = ["//", "#"];
-    
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});define('ace/mode/haml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules', 'ace/mode/ruby_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var RubyExports = require("./ruby_highlight_rules");
-var RubyHighlightRules = RubyExports.RubyHighlightRules;
-
-var HamlHighlightRules = function() {
-
-    this.$rules = 
-        {
-    "start": [
-        {
-            token : "punctuation.section.comment",
-            regex : /^\s*\/.*/
-        },
-        {
-            token : "punctuation.section.comment",
-            regex : /^\s*#.*/
-        },
-        {
-            token: "string.quoted.double",
-            regex: "==.+?=="
-        },
-        {
-            token: "keyword.other.doctype",
-            regex: "^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
-        },
-        RubyExports.qString,
-        RubyExports.qqString,
-        RubyExports.tString,
-        {
-            token: ["entity.name.tag.haml"],
-            regex: /^\s*%[\w:]+/,
-            next: "tag_single"
-        },
-        {
-            token: [ "meta.escape.haml" ],
-            regex: "^\\s*\\\\."
-        },
-        RubyExports.constantNumericHex,
-        RubyExports.constantNumericFloat,
-        
-        RubyExports.constantOtherSymbol,
-        {
-            token: "text",
-            regex: "=|-|~",
-            next: "embedded_ruby"
-        }
-    ],
-    "tag_single": [
-        {
-            token: "entity.other.attribute-name.class.haml",
-            regex: "\\.[\\w-]+"
-        },
-        {
-            token: "entity.other.attribute-name.id.haml",
-            regex: "#[\\w-]+"
-        },
-        {
-            token: "punctuation.section",
-            regex: "\\{",
-            next: "section"
-        },
-        
-        RubyExports.constantOtherSymbol,
-        
-        {
-            token: "text",
-            regex: /\s/,
-            next: "start"
-        },
-        {
-            token: "empty",
-            regex: "$|(?!\\.|#|\\{|\\[|=|-|~|\\/)",
-            next: "start"
-        }
-    ],
-    "section": [
-        RubyExports.constantOtherSymbol,
-        
-        RubyExports.qString,
-        RubyExports.qqString,
-        RubyExports.tString,
-        
-        RubyExports.constantNumericHex,
-        RubyExports.constantNumericFloat,
-        {
-            token: "punctuation.section",
-            regex: "\\}",
-            next: "start"
-        } 
-    ],
-    "embedded_ruby": [ 
-        RubyExports.constantNumericHex,
-        RubyExports.constantNumericFloat,
-        {
-                token : "support.class", // class name
-                regex : "[A-Z][a-zA-Z_\\d]+"
-        },    
-        {
-            token : new RubyHighlightRules().getKeywords(),
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        },
-        {
-            token : ["keyword", "text", "text"],
-            regex : "(?:do|\\{)(?: \\|[^|]+\\|)?$",
-            next  : "start"
-        }, 
-        {
-            token : ["text"],
-            regex : "^$",
-            next  : "start"
-        }, 
-        {
-            token : ["text"],
-            regex : "^(?!.*\\|\\s*$)",
-            next  : "start"
-        }
-    ]
-}
-
-};
-
-oop.inherits(HamlHighlightRules, TextHighlightRules);
-
-exports.HamlHighlightRules = HamlHighlightRules;
-});
-
-define('ace/mode/ruby_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var constantOtherSymbol = exports.constantOtherSymbol = {
-    token : "constant.other.symbol.ruby", // symbol
-    regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"
-};
-
-var qString = exports.qString = {
-    token : "string", // single line
-    regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-};
-
-var qqString = exports.qqString = {
-    token : "string", // single line
-    regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-};
-
-var tString = exports.tString = {
-    token : "string", // backtick string
-    regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"
-};
-
-var constantNumericHex = exports.constantNumericHex = {
-    token : "constant.numeric", // hex
-    regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"
-};
-
-var constantNumericFloat = exports.constantNumericFloat = {
-    token : "constant.numeric", // float
-    regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"
-};
-
-var RubyHighlightRules = function() {
-
-    var builtinFunctions = (
-        "abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|" +
-        "assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|" +
-        "assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|" +
-        "assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|" +
-        "assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|" +
-        "assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|" +
-        "attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|" +
-        "caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|" +
-        "exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|" +
-        "gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|" +
-        "link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|" +
-        "p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|" +
-        "raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|" +
-        "set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|" +
-        "throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|" +
-        "render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|" +
-        "content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|" +
-        "fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|" +
-        "time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|" +
-        "select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|" +
-        "file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|" +
-        "protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|" +
-        "send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|" +
-        "validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|" +
-        "validates_inclusion_of|validates_numericality_of|validates_with|validates_each|" +
-        "authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|" +
-        "filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|" +
-        "translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|" +
-        "cache|expire_fragment|expire_cache_for|observe|cache_sweeper|" +
-        "has_many|has_one|belongs_to|has_and_belongs_to_many"
-    );
-
-    var keywords = (
-        "alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|" +
-        "__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|" +
-        "redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield"
-    );
-
-    var buildinConstants = (
-        "true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|" +
-        "RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING"
-    );
-
-    var builtinVariables = (
-        "\$DEBUG|\$defout|\$FILENAME|\$LOAD_PATH|\$SAFE|\$stdin|\$stdout|\$stderr|\$VERBOSE|" +
-        "$!|root_url|flash|session|cookies|params|request|response|logger|self"
-    );
-
-    var keywordMapper = this.$keywords = this.createKeywordMapper({
-        "keyword": keywords,
-        "constant.language": buildinConstants,
-        "variable.language": builtinVariables,
-        "support.function": builtinFunctions,
-        "invalid.deprecated": "debugger" // TODO is this a remnant from js mode?
-    }, "identifier");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "#.*$"
-            }, {
-                token : "comment", // multi line comment
-                regex : "^=begin(?:$|\\s.*$)",
-                next : "comment"
-            }, {
-                token : "string.regexp",
-                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
-            },
-
-            qString,
-            qqString,
-            tString,
-
-            {
-                token : "text", // namespaces aren't symbols
-                regex : "::"
-            }, {
-                token : "variable.instance", // instance variable
-                regex : "@{1,2}[a-zA-Z_\\d]+"
-            }, {
-                token : "support.class", // class name
-                regex : "[A-Z][a-zA-Z_\\d]+"
-            },
-
-            constantOtherSymbol,
-            constantNumericHex,
-            constantNumericFloat,
-
-            {
-                token : "constant.language.boolean",
-                regex : "(?:true|false)\\b"
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                token : "punctuation.separator.key-value",
-                regex : "=>"
-            }, {
-                stateName: "heredoc",
-                onMatch : function(value, currentState, stack) {
-                    var next = value[2] == '-' ? "indentedHeredoc" : "heredoc";
-                    var tokens = value.split(this.splitRegex);
-                    stack.push(next, tokens[3]);
-                    return [
-                        {type:"constant", value: tokens[1]},
-                        {type:"string", value: tokens[2]},
-                        {type:"support.class", value: tokens[3]},
-                        {type:"string", value: tokens[4]}
-                    ];
-                },
-                regex : "(<<-?)(['\"`]?)([\\w]+)(['\"`]?)",
-                rules: {
-                    heredoc: [{
-                        onMatch:  function(value, currentState, stack) {
-                            if (value == stack[1]) {
-                                stack.shift();
-                                stack.shift();
-                                return "support.class";
-                            }
-                            return "string";
-                        },
-                        regex: ".*$",
-                        next: "start"
-                    }],
-                    indentedHeredoc: [{
-                        token: "string",
-                        regex: "^ +"
-                    }, {
-                        onMatch:  function(value, currentState, stack) {
-                            if (value == stack[1]) {
-                                stack.shift();
-                                stack.shift();
-                                return "support.class";
-                            }
-                            return "string";
-                        },
-                        regex: ".*$",
-                        next: "start"
-                    }]
-                }
-            }, {
-                token : "keyword.operator",
-                regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : "^=end(?:$|\\s.*$)",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ]
-    };
-
-    this.normalizeRules();
-};
-
-oop.inherits(RubyHighlightRules, TextHighlightRules);
-
-exports.RubyHighlightRules = RubyHighlightRules;
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-haxe.js b/try/ace/mode-haxe.js
deleted file mode 100644
index 0c7859e..0000000
--- a/try/ace/mode-haxe.js
+++ /dev/null
@@ -1,609 +0,0 @@
-define('ace/mode/haxe', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/haxe_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var HaxeHighlightRules = require("./haxe_highlight_rules").HaxeHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new HaxeHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-    
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-define('ace/mode/haxe_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var HaxeHighlightRules = function() {
-
-    var keywords = (
-        "break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std"
-    );
-
-    var buildinConstants = (
-        "null|true|false"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "variable.language": "this",
-        "keyword": keywords,
-        "constant.language": buildinConstants
-    }, "identifier");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "\\/\\/.*$"
-            },
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string.regexp",
-                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0[xX][0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : "constant.language.boolean",
-                regex : "(?:true|false)\\b"
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                token : "keyword.operator",
-                regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
-            }, {
-                token : "punctuation.operator",
-                regex : "\\?|\\:|\\,|\\;|\\."
-            }, {
-                token : "paren.lparen",
-                regex : "[[({<]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}>]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ]
-    };
-
-    this.embedRules(DocCommentHighlightRules, "doc-",
-        [ DocCommentHighlightRules.getEndRule("start") ]);
-};
-
-oop.inherits(HaxeHighlightRules, TextHighlightRules);
-
-exports.HaxeHighlightRules = HaxeHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-ini.js b/try/ace/mode-ini.js
deleted file mode 100644
index 5f749c5..0000000
--- a/try/ace/mode-ini.js
+++ /dev/null
@@ -1,173 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- *
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/ini', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/ini_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var IniHighlightRules = require("./ini_highlight_rules").IniHighlightRules;
-var FoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    var highlighter = new IniHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = ";";
-    this.blockComment = {start: "/*", end: "*/"};
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/ini_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var IniHighlightRules = function() {
-
-    this.$rules = { start: 
-       [ { token: 'punctuation.definition.comment.ini',
-           regex: '#.*',
-           push_: 
-            [ { token: 'comment.line.number-sign.ini',
-                regex: '$',
-                next: 'pop' },
-              { defaultToken: 'comment.line.number-sign.ini' } ] },
-         { token: 'punctuation.definition.comment.ini',
-           regex: ';.*',
-           push_: 
-            [ { token: 'comment.line.semicolon.ini', regex: '$', next: 'pop' },
-              { defaultToken: 'comment.line.semicolon.ini' } ] },
-         { token: 
-            [ 'keyword.other.definition.ini',
-              'text',
-              'punctuation.separator.key-value.ini' ],
-           regex: '\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)' },
-         { token: 
-            [ 'punctuation.definition.entity.ini',
-              'constant.section.group-title.ini',
-              'punctuation.definition.entity.ini' ],
-           regex: '^(\\[)(.*?)(\\])' },
-         { token: 'punctuation.definition.string.begin.ini',
-           regex: '\'',
-           push: 
-            [ { token: 'punctuation.definition.string.end.ini',
-                regex: '\'',
-                next: 'pop' },
-              { token: 'constant.character.escape.ini', regex: '\\\\.' },
-              { defaultToken: 'string.quoted.single.ini' } ] },
-         { token: 'punctuation.definition.string.begin.ini',
-           regex: '"',
-           push: 
-            [ { token: 'punctuation.definition.string.end.ini',
-                regex: '"',
-                next: 'pop' },
-              { defaultToken: 'string.quoted.double.ini' } ] } ] }
-    
-    this.normalizeRules();
-};
-
-IniHighlightRules.metaData = { fileTypes: [ 'ini', 'conf' ],
-      keyEquivalent: '^~I',
-      name: 'Ini',
-      scopeName: 'source.ini' }
-
-
-oop.inherits(IniHighlightRules, TextHighlightRules);
-
-exports.IniHighlightRules = IniHighlightRules;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-json.js b/try/ace/mode-json.js
deleted file mode 100644
index 2e20337..0000000
--- a/try/ace/mode-json.js
+++ /dev/null
@@ -1,578 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/json', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/json_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle', 'ace/worker/worker_client'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var HighlightRules = require("./json_highlight_rules").JsonHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-var WorkerClient = require("../worker/worker_client").WorkerClient;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-    this.createWorker = function(session) {
-        var worker = new WorkerClient(["ace"], "ace/mode/json_worker", "JsonWorker");
-        worker.attachToDocument(session.getDocument());
-
-        worker.on("error", function(e) {
-            session.setAnnotations([e.data]);
-        });
-
-        worker.on("ok", function() {
-            session.clearAnnotations();
-        });
-
-        return worker;
-    };
-
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/json_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var JsonHighlightRules = function() {
-    this.$rules = {
-        "start" : [
-            {
-                token : "variable", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'
-            }, {
-                token : "string", // single line
-                regex : '"',
-                next  : "string"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0[xX][0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : "constant.language.boolean",
-                regex : "(?:true|false)\\b"
-            }, {
-                token : "invalid.illegal", // single quoted strings are not allowed
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "invalid.illegal", // comments are not allowed
-                regex : "\\/\\/.*$"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "string" : [
-            {
-                token : "constant.language.escape",
-                regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/
-            }, {
-                token : "string",
-                regex : '[^"\\\\]+'
-            }, {
-                token : "string",
-                regex : '"',
-                next  : "start"
-            }, {
-                token : "string",
-                regex : "",
-                next  : "start"
-            }
-        ]
-    };
-    
-};
-
-oop.inherits(JsonHighlightRules, TextHighlightRules);
-
-exports.JsonHighlightRules = JsonHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-jsx.js b/try/ace/mode-jsx.js
deleted file mode 100644
index b8427fc..0000000
--- a/try/ace/mode-jsx.js
+++ /dev/null
@@ -1,635 +0,0 @@
-define('ace/mode/jsx', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/jsx_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var JsxHighlightRules = require("./jsx_highlight_rules").JsxHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-function Mode() {
-    this.$tokenizer = new Tokenizer(new JsxHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-}
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-define('ace/mode/jsx_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var JsxHighlightRules = function() {
-    var keywords = lang.arrayToMap(
-        ("break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|" +
-         "if|throw|" +
-         "delete|in|try|" +
-         "class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|" +
-         "number|int|string|boolean|variant|" +
-         "log|assert").split("|")
-    );
-    
-    var buildinConstants = lang.arrayToMap(
-        ("null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined").split("|")
-    );
-    
-    var reserved = lang.arrayToMap(
-        ("debugger|with|" +
-         "const|export|" +
-         "let|private|public|yield|protected|" +
-         "extern|native|as|operator|__fake__|__readonly__").split("|")
-    );
-    
-    var identifierRe = "[a-zA-Z_][a-zA-Z0-9_]*\\b";
-    
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "\\/\\/.*$"
-            },
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string.regexp",
-                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0[xX][0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : "constant.language.boolean",
-                regex : "(?:true|false)\\b"
-            }, {
-                token : [
-                    "storage.type",
-                    "text",
-                    "entity.name.function"
-                ],
-                regex : "(function)(\\s+)(" + identifierRe + ")"
-            }, {
-                token : function(value) {
-                    if (value == "this")
-                        return "variable.language";
-                    else if (value == "function")
-                        return "storage.type";
-                    else if (keywords.hasOwnProperty(value) || reserved.hasOwnProperty(value))
-                        return "keyword";
-                    else if (buildinConstants.hasOwnProperty(value))
-                        return "constant.language";
-                    else if (/^_?[A-Z][a-zA-Z0-9_]*$/.test(value))
-                        return "language.support.class";
-                    else
-                        return "identifier";
-                },
-                regex : identifierRe
-            }, {
-                token : "keyword.operator",
-                regex : "!|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
-            }, {
-                token : "punctuation.operator",
-                regex : "\\?|\\:|\\,|\\;|\\."
-            }, {
-                token : "paren.lparen",
-                regex : "[[({<]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}>]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ]
-    };
-    
-    this.embedRules(DocCommentHighlightRules, "doc-",
-        [ DocCommentHighlightRules.getEndRule("start") ]);
-};
-
-oop.inherits(JsxHighlightRules, TextHighlightRules);
-
-exports.JsxHighlightRules = JsxHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-julia.js b/try/ace/mode-julia.js
deleted file mode 100644
index a029d6d..0000000
--- a/try/ace/mode-julia.js
+++ /dev/null
@@ -1,245 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- *
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/julia', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/julia_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var JuliaHighlightRules = require("./julia_highlight_rules").JuliaHighlightRules;
-var FoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    var highlighter = new JuliaHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "#";
-    this.blockComment = "";
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/julia_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var JuliaHighlightRules = function() {
-
-    this.$rules = { start: 
-       [ { include: '#function_decl' },
-         { include: '#function_call' },
-         { include: '#type_decl' },
-         { include: '#keyword' },
-         { include: '#operator' },
-         { include: '#number' },
-         { include: '#string' },
-         { include: '#comment' } ],
-      '#bracket': 
-       [ { token: 'keyword.bracket.julia',
-           regex: '\\(|\\)|\\[|\\]|\\{|\\}|,' } ],
-      '#comment': 
-       [ { token: 
-            [ 'punctuation.definition.comment.julia',
-              'comment.line.number-sign.julia' ],
-           regex: '(#)(?!\\{)(.*$)'} ],
-      '#function_call': 
-       [ { token: [ 'support.function.julia', 'text' ],
-           regex: '([a-zA-Z0-9_]+!?)(\\w*\\()'} ],
-      '#function_decl': 
-       [ { token: [ 'keyword.other.julia', 'meta.function.julia',
-               'entity.name.function.julia', 'meta.function.julia','text' ],
-           regex: '(function|macro)(\\s*)([a-zA-Z0-9_\\{]+!?)(\\w*)([(\\\\{])'} ],
-      '#keyword':
-       [ { token: 'keyword.other.julia',
-           regex: '\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\b' },
-         { token: 'keyword.control.julia',
-           regex: '\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\b' },
-         { token: 'storage.modifier.variable.julia',
-           regex: '\\b(?:global|local|const|export|import|importall|using)\\b' },
-         { token: 'variable.macro.julia', regex: '@\\w+\\b' } ],
-      '#number': 
-       [ { token: 'constant.numeric.julia',
-           regex: '\\b0(?:x|X)[0-9a-fA-F]*|(?:\\b[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]*)?(?:im)?|\\bInf(?:32)?\\b|\\bNaN(?:32)?\\b|\\btrue\\b|\\bfalse\\b' } ],
-      '#operator': 
-       [ { token: 'keyword.operator.update.julia',
-           regex: '=|:=|\\+=|-=|\\*=|/=|//=|\\.//=|\\.\\*=|\\\\=|\\.\\\\=|^=|\\.^=|%=|\\|=|&=|\\$=|<<=|>>=' },
-         { token: 'keyword.operator.ternary.julia', regex: '\\?|:' },
-         { token: 'keyword.operator.boolean.julia',
-           regex: '\\|\\||&&|!' },
-         { token: 'keyword.operator.arrow.julia', regex: '->|<-|-->' },
-         { token: 'keyword.operator.relation.julia',
-           regex: '>|<|>=|<=|==|!=|\\.>|\\.<|\\.>=|\\.>=|\\.==|\\.!=|\\.=|\\.!|<:|:>' },
-         { token: 'keyword.operator.range.julia', regex: ':' },
-         { token: 'keyword.operator.shift.julia', regex: '<<|>>' },
-         { token: 'keyword.operator.bitwise.julia', regex: '\\||\\&|~' },
-         { token: 'keyword.operator.arithmetic.julia',
-           regex: '\\+|-|\\*|\\.\\*|/|\\./|//|\\.//|%|\\.%|\\\\|\\.\\\\|\\^|\\.\\^' },
-         { token: 'keyword.operator.isa.julia', regex: '::' },
-         { token: 'keyword.operator.dots.julia',
-           regex: '\\.(?=[a-zA-Z])|\\.\\.+' },
-         { token: 'keyword.operator.interpolation.julia',
-           regex: '\\$#?(?=.)' },
-         { token: [ 'variable', 'keyword.operator.transposed-variable.julia' ],
-           regex: '(\\w+)((?:\'|\\.\')*\\.?\')' },
-         { token: 'text',
-           regex: '\\[|\\('},
-         { token: [ 'text', 'keyword.operator.transposed-matrix.julia' ],
-            regex: "([\\]\\)])((?:'|\\.')*\\.?')"} ],
-      '#string': 
-       [ { token: 'punctuation.definition.string.begin.julia',
-           regex: '\'',
-           push: 
-            [ { token: 'punctuation.definition.string.end.julia',
-                regex: '\'',
-                next: 'pop' },
-              { include: '#string_escaped_char' },
-              { defaultToken: 'string.quoted.single.julia' } ] },
-         { token: 'punctuation.definition.string.begin.julia',
-           regex: '"',
-           push: 
-            [ { token: 'punctuation.definition.string.end.julia',
-                regex: '"',
-                next: 'pop' },
-              { include: '#string_escaped_char' },
-              { defaultToken: 'string.quoted.double.julia' } ] },
-         { token: 'punctuation.definition.string.begin.julia',
-           regex: '\\b\\w+"',
-           push: 
-            [ { token: 'punctuation.definition.string.end.julia',
-                regex: '"\\w*',
-                next: 'pop' },
-              { include: '#string_custom_escaped_char' },
-              { defaultToken: 'string.quoted.custom-double.julia' } ] },
-         { token: 'punctuation.definition.string.begin.julia',
-           regex: '`',
-           push: 
-            [ { token: 'punctuation.definition.string.end.julia',
-                regex: '`',
-                next: 'pop' },
-              { include: '#string_escaped_char' },
-              { defaultToken: 'string.quoted.backtick.julia' } ] } ],
-      '#string_custom_escaped_char': [ { token: 'constant.character.escape.julia', regex: '\\\\"' } ],
-      '#string_escaped_char': 
-       [ { token: 'constant.character.escape.julia',
-           regex: '\\\\(?:\\\\|[0-3]\\d{,2}|[4-7]\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)' } ],
-      '#type_decl': 
-       [ { token: 
-            [ 'keyword.control.type.julia',
-              'meta.type.julia',
-              'entity.name.type.julia',
-              'entity.other.inherited-class.julia',
-              'punctuation.separator.inheritance.julia',
-              'entity.other.inherited-class.julia' ],
-           regex: '(type|immutable)(\\s+)([a-zA-Z0-9_]+)(?:(\\s*)(<:)(\\s*[.a-zA-Z0-9_:]+))?' },
-         { token: [ 'other.typed-variable.julia', 'support.type.julia' ],
-           regex: '([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)' } ] }
-    
-    this.normalizeRules();
-};
-
-JuliaHighlightRules.metaData = { fileTypes: [ 'jl' ],
-      firstLineMatch: '^#!.*\\bjulia\\s*$',
-      foldingStartMarker: '^\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\b(?!.*\\bend\\b).*$',
-      foldingStopMarker: '^\\s*(?:end)\\b.*$',
-      name: 'Julia',
-      scopeName: 'source.julia' }
-
-
-oop.inherits(JuliaHighlightRules, TextHighlightRules);
-
-exports.JuliaHighlightRules = JuliaHighlightRules;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-latex.js b/try/ace/mode-latex.js
deleted file mode 100644
index 7741042..0000000
--- a/try/ace/mode-latex.js
+++ /dev/null
@@ -1,189 +0,0 @@
-define('ace/mode/latex', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/latex_highlight_rules', 'ace/mode/folding/latex', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var LatexHighlightRules = require("./latex_highlight_rules").LatexHighlightRules;
-var LatexFoldMode = require("./folding/latex").FoldMode;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new LatexHighlightRules().getRules());
-    this.foldingRules = new LatexFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "%";
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-define('ace/mode/latex_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var LatexHighlightRules = function() {   
-    this.$rules = {
-        "start" : [{
-            token : "keyword",
-            regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)"
-        }, {
-            token : "lparen",
-            regex : "[[({]"
-        }, {
-            token : "rparen",
-            regex : "[\\])}]"
-        }, {
-            token : "string",
-            regex : "\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"
-        }, {
-            token : "comment",
-            regex : "%.*$"
-        }]
-    };
-};
-
-oop.inherits(LatexHighlightRules, TextHighlightRules);
-
-exports.LatexHighlightRules = LatexHighlightRules;
-
-});
-
-define('ace/mode/folding/latex', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-var FoldMode = exports.FoldMode = function() {};
-
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /^\s*\\(begin)|(section|subsection)\b|{\s*$/;
-    this.foldingStopMarker = /^\s*\\(end)\b|^\s*}/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.doc.getLine(row);
-        var match = this.foldingStartMarker.exec(line);
-        if (match) {
-            if (match[1])
-                return this.latexBlock(session, row, match[0].length - 1);
-            if (match[2])
-                return this.latexSection(session, row, match[0].length - 1);
-
-            return this.openingBracketBlock(session, "{", row, match.index);
-        }
-
-        var match = this.foldingStopMarker.exec(line);
-        if (match) {
-            if (match[1])
-                return this.latexBlock(session, row, match[0].length - 1);
-
-            return this.closingBracketBlock(session, "}", row, match.index + match[0].length);
-        }
-    };
-
-    this.latexBlock = function(session, row, column) {
-        var keywords = {
-            "\\begin": 1,
-            "\\end": -1
-        };
-
-        var stream = new TokenIterator(session, row, column);
-        var token = stream.getCurrentToken();
-        if (!token || token.type !== "keyword")
-            return;
-
-        var val = token.value;
-        var dir = keywords[val];
-
-        var getType = function() {
-            var token = stream.stepForward();
-            var type = token.type == "lparen" ?stream.stepForward().value : "";
-            if (dir === -1) {
-                stream.stepBackward();
-                if (type)
-                    stream.stepBackward();
-            }
-            return type;
-        };
-        var stack = [getType()];
-        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;
-        var startRow = row;
-
-        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;
-        while(token = stream.step()) {
-            if (token.type !== "keyword")
-                continue;
-            var level = keywords[token.value];
-            if (!level)
-                continue;
-            var type = getType();
-            if (level === dir)
-                stack.unshift(type);
-            else if (stack.shift() !== type || !stack.length)
-                break;
-        }
-
-        if (stack.length)
-            return;
-
-        var row = stream.getCurrentTokenRow();
-        if (dir === -1)
-            return new Range(row, session.getLine(row).length, startRow, startColumn);
-        stream.stepBackward();
-        return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());
-    };
-
-    this.latexSection = function(session, row, column) {
-        var keywords = ["\\subsection", "\\section", "\\begin", "\\end"];
-
-        var stream = new TokenIterator(session, row, column);
-        var token = stream.getCurrentToken();
-        if (!token || token.type != "keyword")
-            return;
-
-        var startLevel = keywords.indexOf(token.value);
-        var stackDepth = 0
-        var endRow = row;
-
-        while(token = stream.stepForward()) {
-            if (token.type !== "keyword")
-                continue;
-            var level = keywords.indexOf(token.value);
-
-            if (level >= 2) {
-                if (!stackDepth)
-                    endRow = stream.getCurrentTokenRow() - 1;
-                stackDepth += level == 2 ? 1 : - 1;
-                if (stackDepth < 0)
-                    break
-            } else if (level >= startLevel)
-                break;
-        }
-
-        if (!stackDepth)
-            endRow = stream.getCurrentTokenRow() - 1;
-
-        while (endRow > row && !/\S/.test(session.getLine(endRow)))
-            endRow--;
-
-        return new Range(
-            row, session.getLine(row).length,
-            endRow, session.getLine(endRow).length
-        );
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-less.js b/try/ace/mode-less.js
deleted file mode 100644
index c204884..0000000
--- a/try/ace/mode-less.js
+++ /dev/null
@@ -1,807 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/less', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/less_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var LessHighlightRules = require("./less_highlight_rules").LessHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var CssBehaviour = require("./behaviour/css").CssBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new LessHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CssBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-    
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        var match = line.match(/^.*\{\s*$/);
-        if (match) {
-            indent += tab;
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/less_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var LessHighlightRules = function() {
-    
-    var properties = lang.arrayToMap( (function () {
-
-        var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|");
-        
-        var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + 
-             "background-size|binding|border-bottom-colors|border-left-colors|" + 
-             "border-right-colors|border-top-colors|border-end|border-end-color|" + 
-             "border-end-style|border-end-width|border-image|border-start|" + 
-             "border-start-color|border-start-style|border-start-width|box-align|" + 
-             "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + 
-             "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + 
-             "column-rule-width|column-rule-style|column-rule-color|float-edge|" + 
-             "font-feature-settings|font-language-override|force-broken-image-icon|" + 
-             "image-region|margin-end|margin-start|opacity|outline|outline-color|" + 
-             "outline-offset|outline-radius|outline-radius-bottomleft|" + 
-             "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + 
-             "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + 
-             "tab-size|text-blink|text-decoration-color|text-decoration-line|" + 
-             "text-decoration-style|transform|transform-origin|transition|" + 
-             "transition-delay|transition-duration|transition-property|" + 
-             "transition-timing-function|user-focus|user-input|user-modify|user-select|" +
-             "window-shadow|border-radius").split("|");
-        
-        var properties = ("azimuth|background-attachment|background-color|background-image|" +
-            "background-position|background-repeat|background|border-bottom-color|" +
-            "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
-            "border-color|border-left-color|border-left-style|border-left-width|" +
-            "border-left|border-right-color|border-right-style|border-right-width|" +
-            "border-right|border-spacing|border-style|border-top-color|" +
-            "border-top-style|border-top-width|border-top|border-width|border|" +
-            "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
-            "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
-            "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
-            "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
-            "letter-spacing|line-height|list-style-image|list-style-position|" +
-            "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
-            "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
-            "min-width|opacity|orphans|outline-color|" +
-            "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
-            "padding-left|padding-right|padding-top|padding|page-break-after|" +
-            "page-break-before|page-break-inside|page|pause-after|pause-before|" +
-            "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" +
-            "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
-            "stress|table-layout|text-align|text-decoration|text-indent|" +
-            "text-shadow|text-transform|top|unicode-bidi|vertical-align|" +
-            "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
-            "z-index").split("|");
-        var ret = [];
-        for (var i=0, ln=browserPrefix.length; i<ln; i++) {
-            Array.prototype.push.apply(
-                ret,
-                (( browserPrefix[i] + prefixProperties.join("|" + browserPrefix[i]) ).split("|"))
-            );
-        }
-        Array.prototype.push.apply(ret, prefixProperties);
-        Array.prototype.push.apply(ret, properties);
-        
-        return ret;
-        
-    })() );
-    
-
-
-    var functions = lang.arrayToMap(
-        ("hsl|hsla|rgb|rgba|url|attr|counter|counters|lighten|darken|saturate|" +
-        "desaturate|fadein|fadeout|fade|spin|mix|hue|saturation|lightness|" +
-        "alpha|round|ceil|floor|percentage|color|iscolor|isnumber|isstring|" +
-        "iskeyword|isurl|ispixel|ispercentage|isem").split("|")
-    );
-
-    var constants = lang.arrayToMap(
-        ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
-        "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
-        "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
-        "decimal-leading-zero|decimal|default|disabled|disc|" +
-        "distribute-all-lines|distribute-letter|distribute-space|" +
-        "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
-        "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
-        "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
-        "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
-        "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
-        "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
-        "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
-        "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
-        "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
-        "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
-        "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
-        "solid|square|static|strict|super|sw-resize|table-footer-group|" +
-        "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
-        "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
-        "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
-        "zero").split("|")
-    );
-
-    var colors = lang.arrayToMap(
-        ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
-        "purple|red|silver|teal|white|yellow").split("|")
-    );
-    
-    var keywords = lang.arrayToMap(
-        ("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|" +
-        "@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|" +
-        "def|end|declare|when|not|and").split("|")
-    );
-    
-    var tags = lang.arrayToMap(
-        ("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|" + 
-         "big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|" + 
-         "command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|" + 
-         "figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|" + 
-         "header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|" + 
-         "link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|" + 
-         "option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|" + 
-         "small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|" + 
-         "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|")
-    );
-
-    var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "\\/\\/.*$"
-            },
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "constant.numeric",
-                regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
-            }, {
-                token : "constant.numeric", // hex6 color
-                regex : "#[a-f0-9]{6}"
-            }, {
-                token : "constant.numeric", // hex3 color
-                regex : "#[a-f0-9]{3}"
-            }, {
-                token : "constant.numeric",
-                regex : numRe
-            }, {
-                token : function(value) {
-                    if (keywords.hasOwnProperty(value))
-                        return "keyword";
-                    else
-                        return "variable";
-                },
-                regex : "@[a-z0-9_\\-@]*\\b"
-            }, {
-                token : function(value) {
-                    if (properties.hasOwnProperty(value.toLowerCase()))
-                        return "support.type";
-                    else if (keywords.hasOwnProperty(value))
-                        return "keyword";
-                    else if (constants.hasOwnProperty(value))
-                        return "constant.language";
-                    else if (functions.hasOwnProperty(value))
-                        return "support.function";
-                    else if (colors.hasOwnProperty(value.toLowerCase()))
-                        return "support.constant.color";
-                    else if (tags.hasOwnProperty(value.toLowerCase()))
-                        return "variable.language";
-                    else
-                        return "text";
-                },
-                regex : "\\-?[@a-z_][@a-z0-9_\\-]*"
-            }, {
-                token: "variable.language",
-                regex: "#[a-z0-9-_]+"
-            }, {
-                token: "variable.language",
-                regex: "\\.[a-z0-9-_]+"
-            }, {
-                token: "variable.language",
-                regex: ":[a-z0-9-_]+"
-            }, {
-                token: "constant",
-                regex: "[a-z0-9-_]+"
-            }, {
-                token : "keyword.operator",
-                regex : "<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }, {
-                caseInsensitive: true
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ]
-    };
-};
-
-oop.inherits(LessHighlightRules, TextHighlightRules);
-
-exports.LessHighlightRules = LessHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-var CssBehaviour = function () {
-
-    this.inherit(CstyleBehaviour);
-
-    this.add("colon", "insertion", function (state, action, editor, session, text) {
-        if (text === ':') {
-            var cursor = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, cursor.row, cursor.column);
-            var token = iterator.getCurrentToken();
-            if (token && token.value.match(/\s+/)) {
-                token = iterator.stepBackward();
-            }
-            if (token && token.type === 'support.type') {
-                var line = session.doc.getLine(cursor.row);
-                var rightChar = line.substring(cursor.column, cursor.column + 1);
-                if (rightChar === ':') {
-                    return {
-                       text: '',
-                       selection: [1, 1]
-                    }
-                }
-                if (!line.substring(cursor.column).match(/^\s*;/)) {
-                    return {
-                       text: ':;',
-                       selection: [1, 1]
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("colon", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected === ':') {
-            var cursor = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, cursor.row, cursor.column);
-            var token = iterator.getCurrentToken();
-            if (token && token.value.match(/\s+/)) {
-                token = iterator.stepBackward();
-            }
-            if (token && token.type === 'support.type') {
-                var line = session.doc.getLine(range.start.row);
-                var rightChar = line.substring(range.end.column, range.end.column + 1);
-                if (rightChar === ';') {
-                    range.end.column ++;
-                    return range;
-                }
-            }
-        }
-    });
-
-    this.add("semicolon", "insertion", function (state, action, editor, session, text) {
-        if (text === ';') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar === ';') {
-                return {
-                   text: '',
-                   selection: [1, 1]
-                }
-            }
-        }
-    });
-
-}
-oop.inherits(CssBehaviour, CstyleBehaviour);
-
-exports.CssBehaviour = CssBehaviour;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-lisp.js b/try/ace/mode-lisp.js
deleted file mode 100644
index 65f44ab..0000000
--- a/try/ace/mode-lisp.js
+++ /dev/null
@@ -1,138 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/lisp', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/lisp_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var LispHighlightRules = require("./lisp_highlight_rules").LispHighlightRules;
-
-var Mode = function() {
-    var highlighter = new LispHighlightRules();
-    
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-       
-    this.lineCommentStart = ";";
-    
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-
-define('ace/mode/lisp_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var LispHighlightRules = function() {
-    var keywordControl = "case|do|let|loop|if|else|when";
-    var keywordOperator = "eq|neq|and|or";
-    var constantLanguage = "null|nil";
-    var supportFunctions = "cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn";
-
-    var keywordMapper = this.createKeywordMapper({
-        "keyword.control": keywordControl,
-        "keyword.operator": keywordOperator,
-        "constant.language": constantLanguage,
-        "support.function": supportFunctions
-    }, "identifier", true);
-
-    this.$rules = 
-        {
-    "start": [
-        {
-            token : "comment",
-            regex : ";.*$"
-        },
-        {
-            token: ["storage.type.function-type.lisp", "text", "entity.name.function.lisp"],
-            regex: "(?:\\b(?:(defun|defmethod|defmacro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)"
-        },
-        {
-            token: ["punctuation.definition.constant.character.lisp", "constant.character.lisp"],
-            regex: "(#)((?:\\w|[\\\\+-=<>'\"&#])+)"
-        },
-        {
-            token: ["punctuation.definition.variable.lisp", "variable.other.global.lisp", "punctuation.definition.variable.lisp"],
-            regex: "(\\*)(\\S*)(\\*)"
-        },
-        {
-            token : "constant.numeric", // hex
-            regex : "0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
-        }, 
-        {
-            token : "constant.numeric", // float
-            regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"
-        },
-        {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        },
-        {
-            token : "string",
-            regex : '"(?=.)',
-            next  : "qqstring"
-        }
-    ],
-    "qqstring": [
-        {
-            token: "constant.character.escape.lisp",
-            regex: "\\\\."
-        },
-        {
-            token : "string",
-            regex : '[^"\\\\]+'
-        }, {
-            token : "string",
-            regex : "\\\\$",
-            next  : "qqstring"
-        }, {
-            token : "string",
-            regex : '"|$',
-            next  : "start"
-        }
-    ]
-}
-
-};
-
-oop.inherits(LispHighlightRules, TextHighlightRules);
-
-exports.LispHighlightRules = LispHighlightRules;
-});
diff --git a/try/ace/mode-livescript.js b/try/ace/mode-livescript.js
deleted file mode 100644
index 1ebf1f0..0000000
--- a/try/ace/mode-livescript.js
+++ /dev/null
@@ -1,288 +0,0 @@
-define('ace/mode/livescript', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/text'], function(require, exports, module) {
-  var identifier, LiveScriptMode, keywordend, stringfill;
-  identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*';
-  exports.Mode = LiveScriptMode = (function(superclass){
-    var indenter, prototype = extend$((import$(LiveScriptMode, superclass).displayName = 'LiveScriptMode', LiveScriptMode), superclass).prototype, constructor = LiveScriptMode;
-    function LiveScriptMode(){
-      var that;
-      this.$tokenizer = new (require('../tokenizer')).Tokenizer(LiveScriptMode.Rules);
-      if (that = require('../mode/matching_brace_outdent')) {
-        this.$outdent = new that.MatchingBraceOutdent;
-      }
-    }
-    indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$');
-    prototype.getNextLineIndent = function(state, line, tab){
-      var indent, tokens;
-      indent = this.$getIndent(line);
-      tokens = this.$tokenizer.getLineTokens(line, state).tokens;
-      if (!(tokens.length && tokens[tokens.length - 1].type === 'comment')) {
-        if (state === 'start' && indenter.test(line)) {
-          indent += tab;
-        }
-      }
-      return indent;
-    };
-    prototype.toggleCommentLines = function(state, doc, startRow, endRow){
-      var comment, range, i$, i, out, line;
-      comment = /^(\s*)#/;
-      range = new (require('../range')).Range(0, 0, 0, 0);
-      for (i$ = startRow; i$ <= endRow; ++i$) {
-        i = i$;
-        if (out = comment.test(line = doc.getLine(i))) {
-          line = line.replace(comment, '$1');
-        } else {
-          line = line.replace(/^\s*/, '$&#');
-        }
-        range.end.row = range.start.row = i;
-        range.end.column = line.length + 1;
-        doc.replace(range, line);
-      }
-      return 1 - out * 2;
-    };
-    prototype.checkOutdent = function(state, line, input){
-      var ref$;
-      return (ref$ = this.$outdent) != null ? ref$.checkOutdent(line, input) : void 8;
-    };
-    prototype.autoOutdent = function(state, doc, row){
-      var ref$;
-      return (ref$ = this.$outdent) != null ? ref$.autoOutdent(doc, row) : void 8;
-    };
-    return LiveScriptMode;
-  }(require('../mode/text').Mode));
-  keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))';
-  stringfill = {
-    token: 'string',
-    regex: '.+'
-  };
-  LiveScriptMode.Rules = {
-    start: [
-      {
-        token: 'keyword',
-        regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend
-      }, {
-        token: 'constant.language',
-        regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend
-      }, {
-        token: 'invalid.illegal',
-        regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend
-      }, {
-        token: 'language.support.class',
-        regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend
-      }, {
-        token: 'language.support.function',
-        regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend
-      }, {
-        token: 'variable.language',
-        regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend
-      }, {
-        token: 'identifier',
-        regex: identifier + '\\s*:(?![:=])'
-      }, {
-        token: 'variable',
-        regex: identifier
-      }, {
-        token: 'keyword.operator',
-        regex: '(?:\\.{3}|\\s+\\?)'
-      }, {
-        token: 'keyword.variable',
-        regex: '(?:@+|::|\\.\\.)',
-        next: 'key'
-      }, {
-        token: 'keyword.operator',
-        regex: '\\.\\s*',
-        next: 'key'
-      }, {
-        token: 'string',
-        regex: '\\\\\\S[^\\s,;)}\\]]*'
-      }, {
-        token: 'string.doc',
-        regex: '\'\'\'',
-        next: 'qdoc'
-      }, {
-        token: 'string.doc',
-        regex: '"""',
-        next: 'qqdoc'
-      }, {
-        token: 'string',
-        regex: '\'',
-        next: 'qstring'
-      }, {
-        token: 'string',
-        regex: '"',
-        next: 'qqstring'
-      }, {
-        token: 'string',
-        regex: '`',
-        next: 'js'
-      }, {
-        token: 'string',
-        regex: '<\\[',
-        next: 'words'
-      }, {
-        token: 'string.regex',
-        regex: '//',
-        next: 'heregex'
-      }, {
-        token: 'comment.doc',
-        regex: '/\\*',
-        next: 'comment'
-      }, {
-        token: 'comment',
-        regex: '#.*'
-      }, {
-        token: 'string.regex',
-        regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}',
-        next: 'key'
-      }, {
-        token: 'constant.numeric',
-        regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)'
-      }, {
-        token: 'lparen',
-        regex: '[({[]'
-      }, {
-        token: 'rparen',
-        regex: '[)}\\]]',
-        next: 'key'
-      }, {
-        token: 'keyword.operator',
-        regex: '\\S+'
-      }, {
-        token: 'text',
-        regex: '\\s+'
-      }
-    ],
-    heregex: [
-      {
-        token: 'string.regex',
-        regex: '.*?//[gimy$?]{0,4}',
-        next: 'start'
-      }, {
-        token: 'string.regex',
-        regex: '\\s*#{'
-      }, {
-        token: 'comment.regex',
-        regex: '\\s+(?:#.*)?'
-      }, {
-        token: 'string.regex',
-        regex: '\\S+'
-      }
-    ],
-    key: [
-      {
-        token: 'keyword.operator',
-        regex: '[.?@!]+'
-      }, {
-        token: 'identifier',
-        regex: identifier,
-        next: 'start'
-      }, {
-        token: 'text',
-        regex: '.',
-        next: 'start'
-      }
-    ],
-    comment: [
-      {
-        token: 'comment.doc',
-        regex: '.*?\\*/',
-        next: 'start'
-      }, {
-        token: 'comment.doc',
-        regex: '.+'
-      }
-    ],
-    qdoc: [
-      {
-        token: 'string',
-        regex: ".*?'''",
-        next: 'key'
-      }, stringfill
-    ],
-    qqdoc: [
-      {
-        token: 'string',
-        regex: '.*?"""',
-        next: 'key'
-      }, stringfill
-    ],
-    qstring: [
-      {
-        token: 'string',
-        regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'',
-        next: 'key'
-      }, stringfill
-    ],
-    qqstring: [
-      {
-        token: 'string',
-        regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
-        next: 'key'
-      }, stringfill
-    ],
-    js: [
-      {
-        token: 'string',
-        regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`',
-        next: 'key'
-      }, stringfill
-    ],
-    words: [
-      {
-        token: 'string',
-        regex: '.*?\\]>',
-        next: 'key'
-      }, stringfill
-    ]
-  };
-function extend$(sub, sup){
-  function fun(){} fun.prototype = (sub.superclass = sup).prototype;
-  (sub.prototype = new fun).constructor = sub;
-  if (typeof sup.extended == 'function') sup.extended(sub);
-  return sub;
-}
-function import$(obj, src){
-  var own = {}.hasOwnProperty;
-  for (var key in src) if (own.call(src, key)) obj[key] = src[key];
-  return obj;
-}
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-logiql.js b/try/ace/mode-logiql.js
deleted file mode 100644
index 60c2949..0000000
--- a/try/ace/mode-logiql.js
+++ /dev/null
@@ -1,664 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/logiql', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/logiql_highlight_rules', 'ace/mode/folding/coffee', 'ace/token_iterator', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/matching_brace_outdent'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var LogiQLHighlightRules = require("./logiql_highlight_rules").LogiQLHighlightRules;
-var FoldMode = require("./folding/coffee").FoldMode;
-var TokenIterator = require("../token_iterator").TokenIterator;
-var Range = require("../range").Range;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-
-var Mode = function() {
-    var highlighter = new LogiQLHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-        var endState = tokenizedLine.state;
-        if (/comment|string/.test(endState))  
-            return indent;
-        if (tokens.length && tokens[tokens.length - 1].type == "comment.single")
-            return indent;
-
-        var match = line.match();
-        if (/(-->|<--|<-|->|{)\s*$/.test(line))
-            indent += tab;
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        if (this.$outdent.checkOutdent(line, input))
-            return true;
-
-        if (input !== "\n" && input !== "\r\n")
-            return false;
-            
-        if (!/^\s+/.test(line))
-            return false;
-
-        return true;
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        if (this.$outdent.autoOutdent(doc, row))
-            return;
-        var prevLine = doc.getLine(row);
-        var match = prevLine.match(/^\s+/);
-        var column = prevLine.lastIndexOf(".") + 1;
-        if (!match || !row || !column) return 0;
-
-        var line = doc.getLine(row + 1);
-        var startRange = this.getMatching(doc, {row: row, column: column});
-        if (!startRange || startRange.start.row == row) return 0;
-
-        column = match[0].length;
-        var indent = this.$getIndent(doc.getLine(startRange.start.row));
-        doc.replace(new Range(row + 1, 0, row + 1, column), indent);
-    };
-
-    this.getMatching = function(session, row, column) {
-        if (row == undefined)
-            row = session.selection.lead
-        if (typeof row == "object") {
-            column = row.column;
-            row = row.row;
-        }
-
-        var startToken = session.getTokenAt(row, column);
-        var KW_START = "keyword.start", KW_END = "keyword.end";
-        var tok;
-        if (!startToken)
-            return;
-        if (startToken.type == KW_START) {
-            var it = new TokenIterator(session, row, column);
-            it.step = it.stepForward;
-        } else if (startToken.type == KW_END) {
-            var it = new TokenIterator(session, row, column);
-            it.step = it.stepBackward;
-        } else
-            return;
-
-        while (tok = it.step()) {
-            if (tok.type == KW_START || tok.type == KW_END)
-                break;
-        }
-        if (!tok || tok.type == startToken.type)
-            return;
-
-        var col = it.getCurrentTokenColumn();
-        var row = it.getCurrentTokenRow();
-        return new Range(row, col, row, col + tok.value.length);
-    };
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/logiql_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var LogiQLHighlightRules = function() {
-
-    this.$rules = { start: 
-       [ { token: 'comment.block',
-           regex: '/\\*',
-           push: 
-            [ { token: 'comment.block', regex: '\\*/', next: 'pop' },
-              { defaultToken: 'comment.block' } ],
-            },
-         { token: 'comment.single',
-           regex: '//.*',
-            },
-         { token: 'constant.numeric',
-           regex: '\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?',
-            },
-         { token: 'string',
-           regex: '"',
-           push: 
-            [ { token: 'string', regex: '"', next: 'pop' },
-              { defaultToken: 'string' } ],
-            },
-         { token: 'constant.language',
-           regex: '\\b(true|false)\\b',
-            },
-         { token: 'entity.name.type.logicblox',
-           regex: '`[a-zA-Z_:]+(\\d|\\a)*\\b',
-            },
-         { token: 'keyword.start', regex: '->',  comment: 'Constraint' },
-         { token: 'keyword.start', regex: '-->', comment: 'Level 1 Constraint'},
-         { token: 'keyword.start', regex: '<-',  comment: 'Rule' },
-         { token: 'keyword.start', regex: '<--', comment: 'Level 1 Rule' },
-         { token: 'keyword.end',   regex: '\\.', comment: 'Terminator' },
-         { token: 'keyword.other', regex: '!',   comment: 'Negation' },
-         { token: 'keyword.other', regex: ',',   comment: 'Conjunction' },
-         { token: 'keyword.other', regex: ';',   comment: 'Disjunction' },
-         { token: 'keyword.operator', regex: '<=|>=|!=|<|>', comment: 'Equality'},
-         { token: 'keyword.other', regex: '@', comment: 'Equality' },
-         { token: 'keyword.operator', regex: '\\+|-|\\*|/', comment: 'Arithmetic operations'},
-         { token: 'keyword', regex: '::', comment: 'Colon colon' },
-         { token: 'support.function',
-           regex: '\\b(agg\\s*<<)',
-           push: 
-            [ { include: '$self' },
-              { token: 'support.function',
-                regex: '>>',
-                next: 'pop' } ],
-            },
-         { token: 'storage.modifier',
-           regex: '\\b(lang:[\\w:]*)',
-            },
-         { token: [ 'storage.type', 'text' ],
-           regex: '(export|sealed|clauses|block|alias)(\\s*\\()(?=`)',
-            },
-         { token: 'entity.name',
-           regex: '[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\(|\\[))',
-            },
-         { token: 'variable.parameter',
-           regex: '([a-zA-Z][a-zA-Z_0-9]*|_)\\s*(?=(,|\\.|<-|->|\\)|\\]|=))',
-            } ] }
-    
-    this.normalizeRules();
-};
-
-oop.inherits(LogiQLHighlightRules, TextHighlightRules);
-
-exports.LogiQLHighlightRules = LogiQLHighlightRules;
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-lsl.js b/try/ace/mode-lsl.js
deleted file mode 100644
index d6f7584..0000000
--- a/try/ace/mode-lsl.js
+++ /dev/null
@@ -1,832 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2013, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/lsl', ['require', 'exports', 'module' , 'ace/tokenizer', 'ace/mode/lsl_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/text', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle', 'ace/lib/oop'], function(require, exports, module) {
-
-
-var Tokenizer = require("../tokenizer").Tokenizer;
-var Rules = require("./lsl_highlight_rules").LSLHighlightRules;
-var Outdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-var TextMode = require("./text").Mode;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-var oop = require("../lib/oop");
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new Rules().getRules());
-    this.$outdent = new Outdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = ["//"];
-
-    this.blockComment = {
-        start: "/*",
-        end: "*/"
-    };
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-        var endState = tokenizedLine.state;
-
-        if (tokens.length && tokens[tokens.length-1].type === "comment.block.lsl") {
-            return indent;
-        }
-
-        if (state === "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/lsl_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-oop.inherits(LSLHighlightRules, TextHighlightRules);
-
-function LSLHighlightRules() {
-    var keywordMapper = this.createKeywordMapper({
-        "constant.language.float.lsl" : "DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI",
-        "constant.language.integer.lsl": "ACTIVE|ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|" +
-            "AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|" +
-            "AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|" +
-            "AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|" +
-            "AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|" +
-            "ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|" +
-            "ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|" +
-            "ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|" +
-            "ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|" +
-            "ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|" +
-            "ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|" +
-            "ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|" +
-            "ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|" +
-            "CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|" +
-            "CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|" +
-            "CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|" +
-            "CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|" +
-            "CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|" +
-            "CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|" +
-            "CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|" +
-            "CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|" +
-            "CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|" +
-            "CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|" +
-            "CHARACTER_RADIUS|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|" +
-            "CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|" +
-            "CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|" +
-            "CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|" +
-            "CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|" +
-            "CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|" +
-            "CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|" +
-            "CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|" +
-            "DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|" +
-            "DENSITY|DEBUG_CHANNEL|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|" +
-            "ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|" +
-            "ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|" +
-            "FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|" +
-            "HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|" +
-            "HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|" +
-            "HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|" +
-            "INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|" +
-            "INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|" +
-            "INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|" +
-            "KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|" +
-            "KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|" +
-            "KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|" +
-            "LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|" +
-            "LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|" +
-            "LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|" +
-            "LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|" +
-            "MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_CREATOR|OBJECT_DESC|" +
-            "OBJECT_GROUP|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHYSICS_COST|" +
-            "OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|" +
-            "OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|" +
-            "OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|" +
-            "OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|" +
-            "OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|" +
-            "PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|" +
-            "PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|" +
-            "PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|" +
-            "PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|" +
-            "PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|" +
-            "PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|" +
-            "PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|" +
-            "PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|" +
-            "PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|" +
-            "PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|" +
-            "PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|" +
-            "PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|" +
-            "PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|" +
-            "PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|" +
-            "PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|" +
-            "PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|" +
-            "PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|" +
-            "PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|" +
-            "PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|" +
-            "PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|" +
-            "PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|" +
-            "PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|" +
-            "PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|" +
-            "PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|" +
-            "PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_LIGHT|" +
-            "PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|" +
-            "PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|" +
-            "PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_STANDARD|" +
-            "PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|" +
-            "PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|" +
-            "PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|" +
-            "PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|" +
-            "PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|" +
-            "PRIM_MEDIA_WIDTH_PIXELS|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|" +
-            "PRIM_NAME|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|" +
-            "PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|" +
-            "PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|" +
-            "PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|" +
-            "PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|" +
-            "PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|" +
-            "PRIM_SLICE|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|" +
-            "PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|" +
-            "PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|" +
-            "PROFILE_SCRIPT_MEMORY|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|" +
-            "PSYS_PART_END_COLOR|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|" +
-            "PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|" +
-            "PSYS_PART_MAX_AGE|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_SCALE|" +
-            "PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|" +
-            "PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|" +
-            "PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|" +
-            "PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|" +
-            "PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|" +
-            "PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|" +
-            "PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|" +
-            "PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|" +
-            "PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|" +
-            "PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|" +
-            "PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|" +
-            "RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|" +
-            "RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|" +
-            "RC_REJECT_TYPES|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|" +
-            "REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|" +
-            "REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|" +
-            "REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|" +
-            "REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|" +
-            "RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|" +
-            "STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|" +
-            "STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|" +
-            "STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|" +
-            "STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|" +
-            "STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|" +
-            "TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|" +
-            "TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|" +
-            "TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|" +
-            "VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|" +
-            "VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|" +
-            "VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|" +
-            "VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|" +
-            "VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|" +
-            "VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|" +
-            "VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|" +
-            "VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|" +
-            "VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|" +
-            "VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|" +
-            "VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|" +
-            "VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|" +
-            "VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS",
-        "constant.language.integer.boolean.lsl" : "FALSE|TRUE",
-        "constant.language.quaternion.lsl" : "ZERO_ROTATION",
-        "constant.language.string.lsl" : "EOF|JSON_ARRAY|JSON_FALSE|JSON_INVALID|" +
-            "JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|" +
-            "TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|" +
-            "TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED",
-        "constant.language.vector.lsl" : "TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR",
-        "invalid.deprecated.lsl" : "llCloud|llCollisionSprite|llGodLikeRezObject|llMakeExplosion|" +
-            "llMakeFountain|llMakeSmoke|llMakeFire|llPointAt|llStopPointAt|llRefreshPrimURL|" +
-            "llSetPrimURL|llReleaseCamera|llTakeCamera|llRemoteDataSetRegion|llRemoteLoadScript|" +
-            "llSetInventoryPermMask|llSound|llSoundPreload|llXorBase64Strings|AGENT|" +
-            "CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|" +
-            "DATA_RATING|LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH|PERMISSION_CHANGE_JOINTS|" +
-            "PERMISSION_CHANGE_PERMISSIONS|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|" +
-            "PRIM_CAST_SHADOWS|PRIM_PHYSICS_MATERIAL|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|" +
-            "PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP",
-        "invalid.illegal.lsl" : "event|print",
-        "keyword.control.lsl" : "do|else|for|if|jump|return|while",
-        "storage.type.lsl" : "float|integer|key|list|quaternion|rotation|string|vector",
-        "support.function.lsl": "llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|" +
-            "llAdjustSoundVolume|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|" +
-            "llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|" +
-            "llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|" +
-            "llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCastRay|" +
-            "llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|" +
-            "llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateLink|" +
-            "llCSV2List|llDeleteCharacter|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|" +
-            "llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|" +
-            "llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|" +
-            "llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|" +
-            "llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|" +
-            "llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llExecCharacterCmd|" +
-            "llEvade|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|" +
-            "llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|" +
-            "llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|" +
-            "llGetAttached|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|" +
-            "llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|" +
-            "llGetEnergy|llGetEnv|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGeometricCenter|" +
-            "llGetGMTclock|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|" +
-            "llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|" +
-            "llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|" +
-            "llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|" +
-            "llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMemoryLimit|" +
-            "llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|" +
-            "llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|" +
-            "llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|" +
-            "llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|" +
-            "llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|" +
-            "llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimitiveParams|" +
-            "llGetPrimMediaParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFlags|" +
-            "llGetRegionFPS|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|" +
-            "llGetRootRotation|llGetRot|llGetScale|llGetScriptName|llGetScriptState|" +
-            "llGetSimStats|llGetSimulatorHostname|llGetSPMaxMemory|llGetStartParameter|" +
-            "llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|" +
-            "llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|" +
-            "llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|" +
-            "llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|" +
-            "llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|" +
-            "llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|" +
-            "llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|" +
-            "llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|" +
-            "llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|" +
-            "llList2String|llList2Vector|llListen|llListenControl|llListenRemove|" +
-            "llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|" +
-            "llListStatistics|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|" +
-            "llLoopSoundSlave|llManageEstateAccess|llMapDestination|llMD5String|llMessageLinked|" +
-            "llMinEventDelay|llModifyLand|llModPow|llMoveToTarget|llNavigateTo|llOffsetTexture|" +
-            "llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|" +
-            "llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|" +
-            "llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|" +
-            "llPow|llPreloadSound|llPursue|llPushObject|llRegionSay|llRegionSayTo|" +
-            "llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|" +
-            "llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|" +
-            "llRequestAgentData|llRequestDisplayName|llRequestInventoryData|llRequestPermissions|" +
-            "llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|" +
-            "llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|" +
-            "llResetScript|llResetTime|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|" +
-            "llRot2Fwd|llRot2Left|llRot2Up|llRotateTexture|llRotBetween|llRotLookAt|" +
-            "llRotTarget|llRotTargetRemove|llRound|llSameGroup|llSay|llScaleTexture|" +
-            "llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|" +
-            "llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|" +
-            "llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|" +
-            "llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|" +
-            "llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|" +
-            "llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|" +
-            "llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|" +
-            "llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimitiveParams|llSetPrimMediaParams|" +
-            "llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|" +
-            "llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|" +
-            "llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|" +
-            "llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|" +
-            "llSetVehicleVectorParam|llSetVelocity|llSHA1String|llShout|llSin|llSitTarget|" +
-            "llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|" +
-            "llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|" +
-            "llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|" +
-            "llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|" +
-            "llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|" +
-            "llUnescapeURL|llUnSit|llUpdateCharacter|llVecDist|llVecMag|llVecNorm|" +
-            "llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64StringsCorrect",
-        "support.function.event.lsl" : "at_rot_target|at_target|attach|changed|collision|" +
-            "collision_end|collision_start|control|dataserver|email|http_request|" +
-            "http_response|land_collision|land_collision_end|land_collision_start|" +
-            "link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|" +
-            "not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|" +
-            "sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result"
-        }, "identifier");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment.line.double-slash.lsl",
-                regex : "\\/\\/.*$"
-            }, {
-                token : "comment.block.lsl",
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string.quoted.double.lsl",
-                start : '"',
-                end : '"',
-                next : [{
-                    token : "constant.language.escape.lsl", regex : /\\[tn"\\]/
-                }]
-            }, {
-                token : "constant.numeric.lsl",
-                regex : "(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\b"
-            }, {
-                token : "entity.name.state.lsl",
-                regex : "\\b((state)\\s+\\w+|default)\\b"
-            }, {
-                token : keywordMapper,
-                regex : "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b"
-            }, {
-                token : "support.function.user-defined.lsl",
-                regex : /\b([a-zA-Z_]\w*)(?=\(.*?\))/
-            }, {
-                token : "keyword.operator.lsl",
-                regex : "\\+\\+|\\-\\-|<<|>>|&&?|\\|\\|?|\\^|~|[!%<>=*+\\-\\/]=?"
-            }, {
-                token : "punctuation.operator.lsl",
-                regex : "\\,|\\;"
-            }, {
-                token : "paren.lparen.lsl",
-                regex : "[\\[\\(\\{]"
-            }, {
-                token : "paren.rparen.lsl",
-                regex : "[\\]\\)\\}]"
-            }, {
-                token : "text.lsl",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment.block.lsl",
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment.block.lsl",
-                regex : ".+"
-            }
-        ]
-    };
-    this.normalizeRules();
-}
-
-exports.LSLHighlightRules = LSLHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-lua.js b/try/ace/mode-lua.js
deleted file mode 100644
index 265daa7..0000000
--- a/try/ace/mode-lua.js
+++ /dev/null
@@ -1,455 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/lua', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/lua_highlight_rules', 'ace/mode/folding/lua', 'ace/range', 'ace/worker/worker_client'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;
-var LuaFoldMode = require("./folding/lua").FoldMode;
-var Range = require("../range").Range;
-var WorkerClient = require("../worker/worker_client").WorkerClient;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new LuaHighlightRules().getRules());
-    this.foldingRules = new LuaFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-   
-    this.lineCommentStart = "--";
-    this.blockComment = {start: "--[", end: "]--"};
-    
-    var indentKeywords = {
-        "function": 1,
-        "then": 1,
-        "do": 1,
-        "else": 1,
-        "elseif": 1,
-        "repeat": 1,
-        "end": -1,
-        "until": -1
-    };
-    var outdentKeywords = [
-        "else",
-        "elseif",
-        "end",
-        "until"
-    ];
-
-    function getNetIndentLevel(tokens) {
-        var level = 0;
-        for (var i = 0; i < tokens.length; i++) {
-            var token = tokens[i];
-            if (token.type == "keyword") {
-                if (token.value in indentKeywords) {
-                    level += indentKeywords[token.value];
-                }
-            } else if (token.type == "paren.lparen") {
-                level ++;
-            } else if (token.type == "paren.rparen") {
-                level --;
-            }
-        }
-        if (level < 0) {
-            return -1;
-        } else if (level > 0) {
-            return 1;
-        } else {
-            return 0;
-        }
-    }
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        var level = 0;
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (state == "start") {
-            level = getNetIndentLevel(tokens);
-        }
-        if (level > 0) {
-            return indent + tab;
-        } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {
-            if (!this.checkOutdent(state, line, "\n")) {
-                return indent.substr(0, indent.length - tab.length);
-            }
-        }
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        if (input != "\n" && input != "\r" && input != "\r\n")
-            return false;
-
-        if (line.match(/^\s*[\)\}\]]$/))
-            return true;
-
-        var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;
-
-        if (!tokens || !tokens.length)
-            return false;
-
-        return (tokens[0].type == "keyword" && outdentKeywords.indexOf(tokens[0].value) != -1);
-    };
-
-    this.autoOutdent = function(state, session, row) {
-        var prevLine = session.getLine(row - 1);
-        var prevIndent = this.$getIndent(prevLine).length;
-        var prevTokens = this.$tokenizer.getLineTokens(prevLine, "start").tokens;
-        var tabLength = session.getTabString().length;
-        var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);
-        var curIndent = this.$getIndent(session.getLine(row)).length;
-        if (curIndent < expectedIndent) {
-            return;
-        }
-        session.outdentRows(new Range(row, 0, row + 2, 0));
-    };
-
-    this.createWorker = function(session) {
-        var worker = new WorkerClient(["ace"], "ace/mode/lua_worker", "Worker");
-        worker.attachToDocument(session.getDocument());
-        
-        worker.on("error", function(e) {
-            session.setAnnotations([e.data]);
-        });
-        
-        worker.on("ok", function(e) {
-            session.clearAnnotations();
-        });
-        
-        return worker;
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/lua_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var LuaHighlightRules = function() {
-
-    var keywords = (
-        "break|do|else|elseif|end|for|function|if|in|local|repeat|"+
-         "return|then|until|while|or|and|not"
-    );
-
-    var builtinConstants = ("true|false|nil|_G|_VERSION");
-
-    var functions = (
-        "string|xpcall|package|tostring|print|os|unpack|require|"+
-        "getfenv|setmetatable|next|assert|tonumber|io|rawequal|"+
-        "collectgarbage|getmetatable|module|rawset|math|debug|"+
-        "pcall|table|newproxy|type|coroutine|_G|select|gcinfo|"+
-        "pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|"+
-        "load|error|loadfile|"+
-
-        "sub|upper|len|gfind|rep|find|match|char|dump|gmatch|"+
-        "reverse|byte|format|gsub|lower|preload|loadlib|loaded|"+
-        "loaders|cpath|config|path|seeall|exit|setlocale|date|"+
-        "getenv|difftime|remove|time|clock|tmpname|rename|execute|"+
-        "lines|write|close|flush|open|output|type|read|stderr|"+
-        "stdin|input|stdout|popen|tmpfile|log|max|acos|huge|"+
-        "ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|"+
-        "frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|"+
-        "atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|"+
-        "gethook|setmetatable|setlocal|traceback|setfenv|getinfo|"+
-        "setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|"+
-        "foreachi|maxn|foreach|concat|sort|remove|resume|yield|"+
-        "status|wrap|create|running|"+
-        "__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|"+
-         "__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber"
-    );
-
-    var stdLibaries = ("string|package|os|io|math|debug|table|coroutine");
-
-    var futureReserved = "";
-
-    var deprecatedIn5152 = ("setn|foreach|foreachi|gcinfo|log10|maxn");
-
-    var keywordMapper = this.createKeywordMapper({
-        "keyword": keywords,
-        "support.function": functions,
-        "invalid.deprecated": deprecatedIn5152,
-        "constant.library": stdLibaries,
-        "constant.language": builtinConstants,
-        "invalid.illegal": futureReserved,
-        "variable.language": "this"
-    }, "identifier");
-
-    var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
-    var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
-    var integer = "(?:" + decimalInteger + "|" + hexInteger + ")";
-
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var floatNumber = "(?:" + pointFloat + ")";
-
-    this.$rules = {
-        "start" : [{
-            stateName: "bracketedComment",
-            onMatch : function(value, currentState, stack){
-                stack.unshift(this.next, value.length, currentState);
-                return "comment";
-            },
-            regex : /\-\-\[=*\[/,
-            next  : [
-                {
-                    onMatch : function(value, currentState, stack) {
-                        if (value.length == stack[1]) {
-                            stack.shift();
-                            stack.shift();
-                            this.next = stack.shift();
-                        } else {
-                            this.next = "";
-                        }
-                        return "comment";
-                    },
-                    regex : /(?:[^\\]|\\.)*?\]=*\]/,
-                    next  : "start"
-                }, {
-                    defaultToken : "comment"
-                }
-            ]
-        },
-
-        {
-            token : "comment",
-            regex : "\\-\\-.*$"
-        },
-        {
-            stateName: "bracketedString",
-            onMatch : function(value, currentState, stack){
-                stack.unshift(this.next, value.length, currentState);
-                return "comment";
-            },
-            regex : /\[=*\[/,
-            next  : [
-                {
-                    onMatch : function(value, currentState, stack) {
-                        if (value.length == stack[1]) {
-                            stack.shift();
-                            stack.shift();
-                            this.next = stack.shift();
-                        } else {
-                            this.next = "";
-                        }
-                        return "comment";
-                    },
-                    
-                    regex : /(?:[^\\]|\\.)*?\]=*\]/,
-                    next  : "start"
-                }, {
-                    defaultToken : "comment"
-                }
-            ]
-        },
-        {
-            token : "string",           // " string
-            regex : '"(?:[^\\\\]|\\\\.)*?"'
-        }, {
-            token : "string",           // ' string
-            regex : "'(?:[^\\\\]|\\\\.)*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : floatNumber
-        }, {
-            token : "constant.numeric", // integer
-            regex : integer + "\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\*|\\/|%|\\#|\\^|~|<|>|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."
-        }, {
-            token : "paren.lparen",
-            regex : "[\\[\\(\\{]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\]\\)\\}]"
-        }, {
-            token : "text",
-            regex : "\\s+|\\w+"
-        } ]
-    };
-    
-    this.normalizeRules();
-}
-
-oop.inherits(LuaHighlightRules, TextHighlightRules);
-
-exports.LuaHighlightRules = LuaHighlightRules;
-});
-
-define('ace/mode/folding/lua', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-
-var FoldMode = exports.FoldMode = function() {};
-
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /\b(function|then|do|repeat)\b|{\s*$|(\[=*\[)/;
-    this.foldingStopMarker = /\bend\b|^\s*}|\]=*\]/;
-
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var isStart = this.foldingStartMarker.test(line);
-        var isEnd = this.foldingStopMarker.test(line);
-
-        if (isStart && !isEnd) {
-            var match = line.match(this.foldingStartMarker);
-            if (match[1] == "then" && /\belseif\b/.test(line))
-                return;
-            if (match[1]) {
-                if (session.getTokenAt(row, match.index + 1).type === "keyword")
-                    return "start";
-            } else if (match[2]) {
-                var type = session.bgTokenizer.getState(row) || "";
-                if (type[0] == "bracketedComment" || type[0] == "bracketedString")
-                    return "start";
-            } else {
-                return "start";
-            }
-        }
-        if (foldStyle != "markbeginend" || !isEnd || isStart && isEnd)
-            return "";
-
-        var match = line.match(this.foldingStopMarker);
-        if (match[0] === "end") {
-            if (session.getTokenAt(row, match.index + 1).type === "keyword")
-                return "end";
-        } else if (match[0][0] === "]") {
-            var type = session.bgTokenizer.getState(row - 1) || "";
-            if (type[0] == "bracketedComment" || type[0] == "bracketedString")
-                return "end";
-        } else
-            return "end";
-    };
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.doc.getLine(row);
-        var match = this.foldingStartMarker.exec(line);
-        if (match) {
-            if (match[1])
-                return this.luaBlock(session, row, match.index + 1);
-
-            if (match[2])
-                return session.getCommentFoldRange(row, match.index + 1);
-
-            return this.openingBracketBlock(session, "{", row, match.index);
-        }
-
-        var match = this.foldingStopMarker.exec(line);
-        if (match) {
-            if (match[0] === "end") {
-                if (session.getTokenAt(row, match.index + 1).type === "keyword")
-                    return this.luaBlock(session, row, match.index + 1);
-            }
-
-            if (match[0][0] === "]")
-                return session.getCommentFoldRange(row, match.index + 1);
-
-            return this.closingBracketBlock(session, "}", row, match.index + match[0].length);
-        }
-    };
-
-    this.luaBlock = function(session, row, column) {
-        var stream = new TokenIterator(session, row, column);
-        var indentKeywords = {
-            "function": 1,
-            "do": 1,
-            "then": 1,
-            "elseif": -1,
-            "end": -1,
-            "repeat": 1,
-            "until": -1
-        };
-
-        var token = stream.getCurrentToken();
-        if (!token || token.type != "keyword")
-            return;
-
-        var val = token.value;
-        var stack = [val];
-        var dir = indentKeywords[val];
-
-        if (!dir)
-            return;
-
-        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;
-        var startRow = row;
-
-        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;
-        while(token = stream.step()) {
-            if (token.type !== "keyword")
-                continue;
-            var level = dir * indentKeywords[token.value];
-
-            if (level > 0) {
-                stack.unshift(token.value);
-            } else if (level <= 0) {
-                stack.shift();
-                if (!stack.length && token.value != "elseif")
-                    break;
-                if (level === 0)
-                    stack.unshift(token.value);
-            }
-        }
-
-        var row = stream.getCurrentTokenRow();
-        if (dir === -1)
-            return new Range(row, session.getLine(row).length, startRow, startColumn);
-        else
-            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-lucene.js b/try/ace/mode-lucene.js
deleted file mode 100644
index 6b9c2e6..0000000
--- a/try/ace/mode-lucene.js
+++ /dev/null
@@ -1,64 +0,0 @@
-define('ace/mode/lucene', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/lucene_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var LuceneHighlightRules = require("./lucene_highlight_rules").LuceneHighlightRules;
-
-var Mode = function() {
-    this.$tokenizer =  new Tokenizer(new LuceneHighlightRules().getRules());
-};
-
-oop.inherits(Mode, TextMode);
-
-exports.Mode = Mode;
-});define('ace/mode/lucene_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var LuceneHighlightRules = function() {
-    this.$rules = {
-        "start" : [
-            {
-                token : "constant.character.negation",
-                regex : "[\\-]"
-            }, {
-                token : "constant.character.interro",
-                regex : "[\\?]"
-            }, {
-                token : "constant.character.asterisk",
-                regex : "[\\*]"
-            }, {
-                token: 'constant.character.proximity',
-                regex: '~[0-9]+\\b'
-            }, {
-                token : 'keyword.operator',
-                regex: '(?:AND|OR|NOT)\\b'
-            }, {
-                token : "paren.lparen",
-                regex : "[\\(]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\)]"
-            }, {
-                token : "keyword",
-                regex : "[\\S]+:"
-            }, {
-                token : "string",           // " string
-                regex : '".*?"'
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ]
-    };
-};
-
-oop.inherits(LuceneHighlightRules, TextHighlightRules);
-
-exports.LuceneHighlightRules = LuceneHighlightRules;
-});
diff --git a/try/ace/mode-makefile.js b/try/ace/mode-makefile.js
deleted file mode 100644
index 32b81a5..0000000
--- a/try/ace/mode-makefile.js
+++ /dev/null
@@ -1,313 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- * 
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/makefile', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/makefile_highlight_rules', 'ace/mode/folding/coffee'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var MakefileHighlightRules = require("./makefile_highlight_rules").MakefileHighlightRules;
-var FoldMode = require("./folding/coffee").FoldMode;
-
-var Mode = function() {
-    var highlighter = new MakefileHighlightRules();
-    this.foldingRules = new FoldMode();
-    
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-       
-    this.lineCommentStart = "#";
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});define('ace/mode/makefile_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules', 'ace/mode/sh_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var ShHighlightFile = require("./sh_highlight_rules");
-
-var MakefileHighlightRules = function() {
-
-    var keywordMapper = this.createKeywordMapper({
-        "keyword": ShHighlightFile.reservedKeywords,
-        "support.function.builtin": ShHighlightFile.languageConstructs,
-        "invalid.deprecated": "debugger"
-    }, "string");
-
-    this.$rules = 
-        {
-    "start": [
-        {
-            token: "string.interpolated.backtick.makefile",
-            regex: "`",
-            next: "shell-start"
-        },
-        {
-            token: "punctuation.definition.comment.makefile",
-            regex: /#(?=.)/,
-            next: "comment"
-        },
-        {
-            token: [ "keyword.control.makefile"],
-            regex: "^(?:\\s*\\b)(\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\b)"
-        },
-        {// ^([^\t ]+(\s[^\t ]+)*:(?!\=))\s*.*
-            token: ["entity.name.function.makefile", "text"],
-            regex: "^([^\\t ]+(?:\\s[^\\t ]+)*:)(\\s*.*)"
-        }
-    ],
-    "comment": [
-        {
-            token : "punctuation.definition.comment.makefile",
-            regex : /.+\\/
-        },
-        {
-            token : "punctuation.definition.comment.makefile",
-            regex : ".+",
-            next  : "start"
-        }
-    ],
-    "shell-start": [
-        {
-            token: keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, 
-        {
-            token: "string",
-            regex : "\\w+"
-        }, 
-        {
-            token : "string.interpolated.backtick.makefile",
-            regex : "`",
-            next  : "start"
-        }
-    ]
-}
-
-};
-
-oop.inherits(MakefileHighlightRules, TextHighlightRules);
-
-exports.MakefileHighlightRules = MakefileHighlightRules;
-});
-
-define('ace/mode/sh_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var reservedKeywords = exports.reservedKeywords = (
-        '!|{|}|case|do|done|elif|else|'+
-        'esac|fi|for|if|in|then|until|while|'+
-        '&|;|export|local|read|typeset|unset|'+
-        'elif|select|set'
-    );
-
-var languageConstructs = exports.languageConstructs = (
-    '[|]|alias|bg|bind|break|builtin|'+
-     'cd|command|compgen|complete|continue|'+
-     'dirs|disown|echo|enable|eval|exec|'+
-     'exit|fc|fg|getopts|hash|help|history|'+
-     'jobs|kill|let|logout|popd|printf|pushd|'+
-     'pwd|return|set|shift|shopt|source|'+
-     'suspend|test|times|trap|type|ulimit|'+
-     'umask|unalias|wait'
-);
-
-var ShHighlightRules = function() {
-    var keywordMapper = this.createKeywordMapper({
-        "keyword": reservedKeywords,
-        "support.function.builtin": languageConstructs,
-        "invalid.deprecated": "debugger"
-    }, "identifier");
-
-    var integer = "(?:(?:[1-9]\\d*)|(?:0))";
-
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + ")";
-    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
-    var fileDescriptor = "(?:&" + intPart + ")";
-
-    var variableName = "[a-zA-Z][a-zA-Z0-9_]*";
-    var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))";
-
-    var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))";
-
-    var func = "(?:" + variableName + "\\s*\\(\\))";
-
-    this.$rules = {
-        "start" : [ {
-            token : ["text", "comment"],
-            regex : /(^|\s)(#.*)$/
-        }, {
-            token : "string",           // " string
-            regex : '"(?:[^\\\\]|\\\\.)*?"'
-        }, {
-            token : "variable.language",
-            regex : builtinVariable
-        }, {
-            token : "variable",
-            regex : variable
-        }, {
-            token : "support.function",
-            regex : func
-        }, {
-            token : "support.function",
-            regex : fileDescriptor
-        }, {
-            token : "string",           // ' string
-            regex : "'(?:[^\\\\]|\\\\.)*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : floatNumber
-        }, {
-            token : "constant.numeric", // integer
-            regex : integer + "\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\[\\(\\{]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\]\\)\\}]"
-        } ]
-    };
-};
-
-oop.inherits(ShHighlightRules, TextHighlightRules);
-
-exports.ShHighlightRules = ShHighlightRules;
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-matlab.js b/try/ace/mode-matlab.js
deleted file mode 100644
index ab2f23f..0000000
--- a/try/ace/mode-matlab.js
+++ /dev/null
@@ -1,229 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/matlab', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/matlab_highlight_rules', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var MatlabHighlightRules = require("./matlab_highlight_rules").MatlabHighlightRules;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new MatlabHighlightRules().getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "%";
-    this.blockComment = {start: "%{", end: "%}"};
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/matlab_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var MatlabHighlightRules = function() {
-
-var keywords = (
-        "break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while"
-    );
-
-    var builtinConstants = (
-        "true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout"
-    );
-
-    var builtinFunctions = (
-        "abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|"+
-		"airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|" +
-		"audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|"+
-		"bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|"+
-		"bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|"+
-		"camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:\.(?:close|closeVar|"+
-		"computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|"+
-		"getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|"+
-		"getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|"+
-		"getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|"+
-		"getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|"+
-		"hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|"+
-		"renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|"+
-		"setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|"+
-		"cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|"+
-		"clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|"+
-		"commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers\.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|"+
-		"copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|"+
-		"cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|"+
-		"dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|"+
-		"demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|"+
-		"dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|"+
-		"erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event\.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|"+
-		"expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|"+
-		"fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|"+
-		"findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|"+
-		"frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|"+
-		"get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|"+
-		"guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|"+
-		"hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|"+
-		"hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|"+
-		"ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|"+
-		"1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|"+
-		"isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|"+
-		"isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|"+
-		"isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|"+
-		"lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|"+
-		"linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|"+
-		"lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab\.io\.MatFile|matlab\.mixin\.(?:Copyable|Heterogeneous(?:\.getDefaultScalarElement)?)|matlabrc|"+
-		"matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta\.(?:class(?:\.fromName)?|DynamicProperty|EnumeratedValue|event|"+
-		"MetaData|method|package(?:\.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:\.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|"+
-		"minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|"+
-		"multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|"+
-		"ncwriteschema|ndgrid|ndims|ne|NET(?:\.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|"+
-		"NetException|setStaticProperty))?|netcdf\.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|"+
-		"getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|"+
-		"inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|"+
-		"setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|"+
-		"ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|"+
-		"orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|"+
-		"permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|"+
-		"polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|"+
-		"PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:\.(?:create|"+
-		"getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|"+
-		"rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|"+
-		"restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|"+
-		"saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|"+
-		"setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|"+
-		"spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|"+
-		"str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|"+
-		"strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|"+
-		"support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|"+
-		"textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:\.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|"+
-		"transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|"+
-		"uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|"+
-		"uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|"+
-		"userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:\.isPlatformSupported)?|VideoWriter(?:\.getProfiles)?|"+
-		"view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|"+
-		"what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|"+
-		"ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|"+
-		"pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|"+
-		"cholcov|Classification(?:BaggedEnsemble|Discriminant(?:\.(?:fit|make|template))?|Ensemble|KNN(?:\.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:\.(?:fit|"+
-		"template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|"+
-		"controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|"+
-		"dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|"+
-		"fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:\.fit)?|geo(?:cdf|inv|mean|"+
-		"pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:\.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|"+
-		"gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|"+
-		"jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|"+
-		"LinearModel(?:\.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|"+
-		"mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:\.fit)?|nan(?:cov|max|mean|median|min|std|"+
-		"sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|"+
-		"nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:\.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|"+
-		"pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|"+
-		"Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|"+
-		"rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:\.(?:fit|template))?)|regstats|relieff|ridge|"+
-		"robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|"+
-		"statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|"+
-		"ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest"+
-		"adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|"+
-		"bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|"+
-		"cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|"+
-		"entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|"+
-		"getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|"+
-		"iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|"+
-		"imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|"+
-		"imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|"+
-		"imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|"+
-		"imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|"+
-		"imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|"+
-		"iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|"+
-		"isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|"+
-		"medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|"+
-		"reflect|regionprops|registration\.metric\.(?:MattesMutualInformation|MeanSquares)|registration\.optimizer\.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|"+
-		"rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|"+
-		"warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|"+
-		"linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog"
-    );
-    var storageType = (
-        "cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse"
-    );
-    var keywordMapper = this.createKeywordMapper({
-        "storage.type": storageType,
-        "support.function": builtinFunctions,
-        "keyword": keywords,
-        "constant.language": builtinConstants
-    }, "identifier", true);
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment",
-            regex : "^%[^\r\n]*"
-        }, {
-             token : "string",           // " string
-            regex : '".*?"'
-        }, {
-            token : "string",           // ' string
-            regex : "'.*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-             token : "punctuation.operator",
-             regex : "\\?|\\:|\\,|\\;|\\."
-        }, {
-            token : "paren.lparen",
-            regex : "[\\(]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\)]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ]
-    };
-};
-
-oop.inherits(MatlabHighlightRules, TextHighlightRules);
-
-exports.MatlabHighlightRules = MatlabHighlightRules;
-});
\ No newline at end of file
diff --git a/try/ace/mode-mushcode.js b/try/ace/mode-mushcode.js
deleted file mode 100644
index d344c1e..0000000
--- a/try/ace/mode-mushcode.js
+++ /dev/null
@@ -1,704 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/mushcode', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/mushcode_high_rules', 'ace/mode/folding/pythonic', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var MushCodeRules = require("./mushcode_high_rules").MushCodeRules;
-var PythonFoldMode = require("./folding/pythonic").FoldMode;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new MushCodeRules().getRules());
-    this.foldingRules = new PythonFoldMode("\\:");
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "#";
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[\:]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-   var outdents = {
-        "pass": 1,
-        "return": 1,
-        "raise": 1,
-        "break": 1,
-        "continue": 1
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        if (input !== "\r\n" && input !== "\r" && input !== "\n")
-            return false;
-
-        var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;
-
-        if (!tokens)
-            return false;
-        do {
-            var last = tokens.pop();
-        } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
-
-        if (!last)
-            return false;
-
-        return (last.type == "keyword" && outdents[last.value]);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-
-        row += 1;
-        var indent = this.$getIndent(doc.getLine(row));
-        var tab = doc.getTabString();
-        if (indent.slice(-tab.length) == tab)
-            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/mushcode_high_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var MushCodeRules = function() {
-
-
-    var keywords = (
- "@if|"+
- "@ifelse|"+
- "@switch|"+
- "@halt|"+
- "@dolist|"+
- "@create|"+
- "@scent|"+
- "@sound|"+
- "@touch|"+
- "@ataste|"+
- "@osound|"+
- "@ahear|"+
- "@aahear|"+
- "@amhear|"+
- "@otouch|"+
- "@otaste|"+
- "@drop|"+
- "@odrop|"+
- "@adrop|"+
- "@dropfail|"+
- "@odropfail|"+
- "@smell|"+
- "@oemit|"+
- "@emit|"+
- "@pemit|"+
- "@parent|"+
- "@clone|"+
- "@taste|"+
- "whisper|"+
- "page|"+
- "say|"+
- "pose|"+
- "semipose|"+
- "teach|"+
- "touch|"+
- "taste|"+
- "smell|"+
- "listen|"+
- "look|"+
- "move|"+
- "go|"+
- "home|"+
- "follow|"+
- "unfollow|"+
- "desert|"+
- "dismiss|"+
- "@tel"
-    );
-
-    var builtinConstants = (
-        "=#0"
-    );
-
-    var builtinFunctions = (
- "default|"+
- "edefault|"+
- "eval|"+
- "get_eval|"+
- "get|"+
- "grep|"+
- "grepi|"+
- "hasattr|"+
- "hasattrp|"+
- "hasattrval|"+
- "hasattrpval|"+
- "lattr|"+
- "nattr|"+
- "poss|"+
- "udefault|"+
- "ufun|"+
- "u|"+
- "v|"+
- "uldefault|"+
- "xget|"+
- "zfun|"+
- "band|"+
- "bnand|"+
- "bnot|"+
- "bor|"+
- "bxor|"+
- "shl|"+
- "shr|"+
- "and|"+
- "cand|"+
- "cor|"+
- "eq|"+
- "gt|"+
- "gte|"+
- "lt|"+
- "lte|"+
- "nand|"+
- "neq|"+
- "nor|"+
- "not|"+
- "or|"+
- "t|"+
- "xor|"+
- "con|"+
- "entrances|"+
- "exit|"+
- "followers|"+
- "home|"+
- "lcon|"+
- "lexits|"+
- "loc|"+
- "locate|"+
- "lparent|"+
- "lsearch|"+
- "next|"+
- "num|"+
- "owner|"+
- "parent|"+
- "pmatch|"+
- "rloc|"+
- "rnum|"+
- "room|"+
- "where|"+
- "zone|"+
- "worn|"+
- "held|"+
- "carried|"+
- "acos|"+
- "asin|"+
- "atan|"+
- "ceil|"+
- "cos|"+
- "e|"+
- "exp|"+
- "fdiv|"+
- "fmod|"+
- "floor|"+
- "log|"+
- "ln|"+
- "pi|"+
- "power|"+
- "round|"+
- "sin|"+
- "sqrt|"+
- "tan|"+
- "aposs|"+
- "andflags|"+
- "conn|"+
- "commandssent|"+
- "controls|"+
- "doing|"+
- "elock|"+
- "findable|"+
- "flags|"+
- "fullname|"+
- "hasflag|"+
- "haspower|"+
- "hastype|"+
- "hidden|"+
- "idle|"+
- "isbaker|"+
- "lock|"+
- "lstats|"+
- "money|"+
- "who|"+
- "name|"+
- "nearby|"+
- "obj|"+
- "objflags|"+
- "photo|"+
- "poll|"+
- "powers|"+
- "pendingtext|"+
- "receivedtext|"+
- "restarts|"+
- "restarttime|"+
- "subj|"+
- "shortestpath|"+
- "tmoney|"+
- "type|"+
- "visible|"+
- "cat|"+
- "element|"+
- "elements|"+
- "extract|"+
- "filter|"+
- "filterbool|"+
- "first|"+
- "foreach|"+
- "fold|"+
- "grab|"+
- "graball|"+
- "index|"+
- "insert|"+
- "itemize|"+
- "items|"+
- "iter|"+
- "last|"+
- "ldelete|"+
- "map|"+
- "match|"+
- "matchall|"+
- "member|"+
- "mix|"+
- "munge|"+
- "pick|"+
- "remove|"+
- "replace|"+
- "rest|"+
- "revwords|"+
- "setdiff|"+
- "setinter|"+
- "setunion|"+
- "shuffle|"+
- "sort|"+
- "sortby|"+
- "splice|"+
- "step|"+
- "wordpos|"+
- "words|"+
- "add|"+
- "lmath|"+
- "max|"+
- "mean|"+
- "median|"+
- "min|"+
- "mul|"+
- "percent|"+
- "sign|"+
- "stddev|"+
- "sub|"+
- "val|"+
- "bound|"+
- "abs|"+
- "inc|"+
- "dec|"+
- "dist2d|"+
- "dist3d|"+
- "div|"+
- "floordiv|"+
- "mod|"+
- "modulo|"+
- "remainder|"+
- "vadd|"+
- "vdim|"+
- "vdot|"+
- "vmag|"+
- "vmax|"+
- "vmin|"+
- "vmul|"+
- "vsub|"+
- "vunit|"+
- "regedit|"+
- "regeditall|"+
- "regeditalli|"+
- "regediti|"+
- "regmatch|"+
- "regmatchi|"+
- "regrab|"+
- "regraball|"+
- "regraballi|"+
- "regrabi|"+
- "regrep|"+
- "regrepi|"+
- "after|"+
- "alphamin|"+
- "alphamax|"+
- "art|"+
- "before|"+
- "brackets|"+
- "capstr|"+
- "case|"+
- "caseall|"+
- "center|"+
- "containsfansi|"+
- "comp|"+
- "decompose|"+
- "decrypt|"+
- "delete|"+
- "edit|"+
- "encrypt|"+
- "escape|"+
- "if|"+
- "ifelse|"+
- "lcstr|"+
- "left|"+
- "lit|"+
- "ljust|"+
- "merge|"+
- "mid|"+
- "ostrlen|"+
- "pos|"+
- "repeat|"+
- "reverse|"+
- "right|"+
- "rjust|"+
- "scramble|"+
- "secure|"+
- "space|"+
- "spellnum|"+
- "squish|"+
- "strcat|"+
- "strmatch|"+
- "strinsert|"+
- "stripansi|"+
- "stripfansi|"+
- "strlen|"+
- "switch|"+
- "switchall|"+
- "table|"+
- "tr|"+
- "trim|"+
- "ucstr|"+
- "unsafe|"+
- "wrap|"+
- "ctitle|"+
- "cwho|"+
- "channels|"+
- "clock|"+
- "cflags|"+
- "ilev|"+
- "itext|"+
- "inum|"+
- "convsecs|"+
- "convutcsecs|"+
- "convtime|"+
- "ctime|"+
- "etimefmt|"+
- "isdaylight|"+
- "mtime|"+
- "secs|"+
- "msecs|"+
- "starttime|"+
- "time|"+
- "timefmt|"+
- "timestring|"+
- "utctime|"+
- "atrlock|"+
- "clone|"+
- "create|"+
- "cook|"+
- "dig|"+
- "emit|"+
- "lemit|"+
- "link|"+
- "oemit|"+
- "open|"+
- "pemit|"+
- "remit|"+
- "set|"+
- "tel|"+
- "wipe|"+
- "zemit|"+
- "fbcreate|"+
- "fbdestroy|"+
- "fbwrite|"+
- "fbclear|"+
- "fbcopy|"+
- "fbcopyto|"+
- "fbclip|"+
- "fbdump|"+
- "fbflush|"+
- "fbhset|"+
- "fblist|"+
- "fbstats|"+
- "qentries|"+
- "qentry|"+
- "play|"+
- "ansi|"+
- "break|"+
- "c|"+
- "asc|"+
- "die|"+
- "isdbref|"+
- "isint|"+
- "isnum|"+
- "isletters|"+
- "linecoords|"+
- "localize|"+
- "lnum|"+
- "nameshort|"+
- "null|"+
- "objeval|"+
- "r|"+
- "rand|"+
- "s|"+
- "setq|"+
- "setr|"+
- "soundex|"+
- "soundslike|"+
- "valid|"+
- "vchart|"+
- "vchart2|"+
- "vlabel|"+
- "@@|"+
- "bakerdays|"+
- "bodybuild|"+
- "box|"+
- "capall|"+
- "catalog|"+
- "children|"+
- "ctrailer|"+
- "darttime|"+
- "debt|"+
- "detailbar|"+
- "exploredroom|"+
- "fansitoansi|"+
- "fansitoxansi|"+
- "fullbar|"+
- "halfbar|"+
- "isdarted|"+
- "isnewbie|"+
- "isword|"+
- "lambda|"+
- "lobjects|"+
- "lplayers|"+
- "lthings|"+
- "lvexits|"+
- "lvobjects|"+
- "lvplayers|"+
- "lvthings|"+
- "newswrap|"+
- "numsuffix|"+
- "playerson|"+
- "playersthisweek|"+
- "randomad|"+
- "randword|"+
- "realrandword|"+
- "replacechr|"+
- "second|"+
- "splitamount|"+
- "strlenall|"+
- "text|"+
- "third|"+
- "tofansi|"+
- "totalac|"+
- "unique|"+
- "getaddressroom|"+
- "listpropertycomm|"+
- "listpropertyres|"+
- "lotowner|"+
- "lotrating|"+
- "lotratingcount|"+
- "lotvalue|"+
- "boughtproduct|"+
- "companyabb|"+
- "companyicon|"+
- "companylist|"+
- "companyname|"+
- "companyowners|"+
- "companyvalue|"+
- "employees|"+
- "invested|"+
- "productlist|"+
- "productname|"+
- "productowners|"+
- "productrating|"+
- "productratingcount|"+
- "productsoldat|"+
- "producttype|"+
- "ratedproduct|"+
- "soldproduct|"+
- "topproducts|"+
- "totalspentonproduct|"+
- "totalstock|"+
- "transfermoney|"+
- "uniquebuyercount|"+
- "uniqueproductsbought|"+
- "validcompany|"+
- "deletepicture|"+
- "fbsave|"+
- "getpicturesecurity|"+
- "haspicture|"+
- "listpictures|"+
- "picturesize|"+
- "replacecolor|"+
- "rgbtocolor|"+
- "savepicture|"+
- "setpicturesecurity|"+
- "showpicture|"+
- "piechart|"+
- "piechartlabel|"+
- "createmaze|"+
- "drawmaze|"+
- "drawwireframe"
-    );
-    var keywordMapper = this.createKeywordMapper({
-        "invalid.deprecated": "debugger",
-        "support.function": builtinFunctions,
-        "constant.language": builtinConstants,
-        "keyword": keywords
-    }, "identifier");
-
-    var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?";
-
-    var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
-    var octInteger = "(?:0[oO]?[0-7]+)";
-    var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
-    var binInteger = "(?:0[bB][01]+)";
-    var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
-
-    var exponent = "(?:[eE][+-]?\\d+)";
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + exponent + ")";
-    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
-
-    this.$rules = {
-        "start" : [
-         {
-                token : "variable", // mush substitution register
-                regex : "%[0-9]{1}"
-         },
-         {
-                token : "variable", // mush substitution register
-                regex : "%q[0-9A-Za-z]{1}"
-         },
-         {
-                token : "variable", // mush special character register
-                regex : "%[a-zA-Z]{1}"
-         },
-         {
-                token: "variable.language",
-                regex: "%[a-z0-9-_]+"
-         },
-        {
-            token : "constant.numeric", // imaginary
-            regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b"
-        }, {
-            token : "constant.numeric", // float
-            regex : floatNumber
-        }, {
-            token : "constant.numeric", // long integer
-            regex : integer + "[lL]\\b"
-        }, {
-            token : "constant.numeric", // integer
-            regex : integer + "\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|#|%|<<|>>|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\[\\(\\{]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\]\\)\\}]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ],
-    };
-};
-
-oop.inherits(MushCodeRules, TextHighlightRules);
-
-exports.MushCodeRules = MushCodeRules;
-});
-
-define('ace/mode/folding/pythonic', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(markers) {
-    this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$");
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, match.index);
-            if (match[2])
-                return this.indentationBlock(session, row, match.index + match[2].length);
-            return this.indentationBlock(session, row);
-        }
-    }
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-mushcode_high_rules.js b/try/ace/mode-mushcode_high_rules.js
deleted file mode 100644
index 1776fe8..0000000
--- a/try/ace/mode-mushcode_high_rules.js
+++ /dev/null
@@ -1,569 +0,0 @@
-/*
- * MUSHCodeMode
- */
-
-define('ace/mode/mushcode_high_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var MushCodeRules = function() {
-
-
-    var keywords = (
- "@if|"+
- "@ifelse|"+
- "@switch|"+
- "@halt|"+
- "@dolist|"+
- "@create|"+
- "@scent|"+
- "@sound|"+
- "@touch|"+
- "@ataste|"+
- "@osound|"+
- "@ahear|"+
- "@aahear|"+
- "@amhear|"+
- "@otouch|"+
- "@otaste|"+
- "@drop|"+
- "@odrop|"+
- "@adrop|"+
- "@dropfail|"+
- "@odropfail|"+
- "@smell|"+
- "@oemit|"+
- "@emit|"+
- "@pemit|"+
- "@parent|"+
- "@clone|"+
- "@taste|"+
- "whisper|"+
- "page|"+
- "say|"+
- "pose|"+
- "semipose|"+
- "teach|"+
- "touch|"+
- "taste|"+
- "smell|"+
- "listen|"+
- "look|"+
- "move|"+
- "go|"+
- "home|"+
- "follow|"+
- "unfollow|"+
- "desert|"+
- "dismiss|"+
- "@tel"
-    );
-
-    var builtinConstants = (
-        "=#0"
-    );
-
-    var builtinFunctions = (
- "default|"+
- "edefault|"+
- "eval|"+
- "get_eval|"+
- "get|"+
- "grep|"+
- "grepi|"+
- "hasattr|"+
- "hasattrp|"+
- "hasattrval|"+
- "hasattrpval|"+
- "lattr|"+
- "nattr|"+
- "poss|"+
- "udefault|"+
- "ufun|"+
- "u|"+
- "v|"+
- "uldefault|"+
- "xget|"+
- "zfun|"+
- "band|"+
- "bnand|"+
- "bnot|"+
- "bor|"+
- "bxor|"+
- "shl|"+
- "shr|"+
- "and|"+
- "cand|"+
- "cor|"+
- "eq|"+
- "gt|"+
- "gte|"+
- "lt|"+
- "lte|"+
- "nand|"+
- "neq|"+
- "nor|"+
- "not|"+
- "or|"+
- "t|"+
- "xor|"+
- "con|"+
- "entrances|"+
- "exit|"+
- "followers|"+
- "home|"+
- "lcon|"+
- "lexits|"+
- "loc|"+
- "locate|"+
- "lparent|"+
- "lsearch|"+
- "next|"+
- "num|"+
- "owner|"+
- "parent|"+
- "pmatch|"+
- "rloc|"+
- "rnum|"+
- "room|"+
- "where|"+
- "zone|"+
- "worn|"+
- "held|"+
- "carried|"+
- "acos|"+
- "asin|"+
- "atan|"+
- "ceil|"+
- "cos|"+
- "e|"+
- "exp|"+
- "fdiv|"+
- "fmod|"+
- "floor|"+
- "log|"+
- "ln|"+
- "pi|"+
- "power|"+
- "round|"+
- "sin|"+
- "sqrt|"+
- "tan|"+
- "aposs|"+
- "andflags|"+
- "conn|"+
- "commandssent|"+
- "controls|"+
- "doing|"+
- "elock|"+
- "findable|"+
- "flags|"+
- "fullname|"+
- "hasflag|"+
- "haspower|"+
- "hastype|"+
- "hidden|"+
- "idle|"+
- "isbaker|"+
- "lock|"+
- "lstats|"+
- "money|"+
- "who|"+
- "name|"+
- "nearby|"+
- "obj|"+
- "objflags|"+
- "photo|"+
- "poll|"+
- "powers|"+
- "pendingtext|"+
- "receivedtext|"+
- "restarts|"+
- "restarttime|"+
- "subj|"+
- "shortestpath|"+
- "tmoney|"+
- "type|"+
- "visible|"+
- "cat|"+
- "element|"+
- "elements|"+
- "extract|"+
- "filter|"+
- "filterbool|"+
- "first|"+
- "foreach|"+
- "fold|"+
- "grab|"+
- "graball|"+
- "index|"+
- "insert|"+
- "itemize|"+
- "items|"+
- "iter|"+
- "last|"+
- "ldelete|"+
- "map|"+
- "match|"+
- "matchall|"+
- "member|"+
- "mix|"+
- "munge|"+
- "pick|"+
- "remove|"+
- "replace|"+
- "rest|"+
- "revwords|"+
- "setdiff|"+
- "setinter|"+
- "setunion|"+
- "shuffle|"+
- "sort|"+
- "sortby|"+
- "splice|"+
- "step|"+
- "wordpos|"+
- "words|"+
- "add|"+
- "lmath|"+
- "max|"+
- "mean|"+
- "median|"+
- "min|"+
- "mul|"+
- "percent|"+
- "sign|"+
- "stddev|"+
- "sub|"+
- "val|"+
- "bound|"+
- "abs|"+
- "inc|"+
- "dec|"+
- "dist2d|"+
- "dist3d|"+
- "div|"+
- "floordiv|"+
- "mod|"+
- "modulo|"+
- "remainder|"+
- "vadd|"+
- "vdim|"+
- "vdot|"+
- "vmag|"+
- "vmax|"+
- "vmin|"+
- "vmul|"+
- "vsub|"+
- "vunit|"+
- "regedit|"+
- "regeditall|"+
- "regeditalli|"+
- "regediti|"+
- "regmatch|"+
- "regmatchi|"+
- "regrab|"+
- "regraball|"+
- "regraballi|"+
- "regrabi|"+
- "regrep|"+
- "regrepi|"+
- "after|"+
- "alphamin|"+
- "alphamax|"+
- "art|"+
- "before|"+
- "brackets|"+
- "capstr|"+
- "case|"+
- "caseall|"+
- "center|"+
- "containsfansi|"+
- "comp|"+
- "decompose|"+
- "decrypt|"+
- "delete|"+
- "edit|"+
- "encrypt|"+
- "escape|"+
- "if|"+
- "ifelse|"+
- "lcstr|"+
- "left|"+
- "lit|"+
- "ljust|"+
- "merge|"+
- "mid|"+
- "ostrlen|"+
- "pos|"+
- "repeat|"+
- "reverse|"+
- "right|"+
- "rjust|"+
- "scramble|"+
- "secure|"+
- "space|"+
- "spellnum|"+
- "squish|"+
- "strcat|"+
- "strmatch|"+
- "strinsert|"+
- "stripansi|"+
- "stripfansi|"+
- "strlen|"+
- "switch|"+
- "switchall|"+
- "table|"+
- "tr|"+
- "trim|"+
- "ucstr|"+
- "unsafe|"+
- "wrap|"+
- "ctitle|"+
- "cwho|"+
- "channels|"+
- "clock|"+
- "cflags|"+
- "ilev|"+
- "itext|"+
- "inum|"+
- "convsecs|"+
- "convutcsecs|"+
- "convtime|"+
- "ctime|"+
- "etimefmt|"+
- "isdaylight|"+
- "mtime|"+
- "secs|"+
- "msecs|"+
- "starttime|"+
- "time|"+
- "timefmt|"+
- "timestring|"+
- "utctime|"+
- "atrlock|"+
- "clone|"+
- "create|"+
- "cook|"+
- "dig|"+
- "emit|"+
- "lemit|"+
- "link|"+
- "oemit|"+
- "open|"+
- "pemit|"+
- "remit|"+
- "set|"+
- "tel|"+
- "wipe|"+
- "zemit|"+
- "fbcreate|"+
- "fbdestroy|"+
- "fbwrite|"+
- "fbclear|"+
- "fbcopy|"+
- "fbcopyto|"+
- "fbclip|"+
- "fbdump|"+
- "fbflush|"+
- "fbhset|"+
- "fblist|"+
- "fbstats|"+
- "qentries|"+
- "qentry|"+
- "play|"+
- "ansi|"+
- "break|"+
- "c|"+
- "asc|"+
- "die|"+
- "isdbref|"+
- "isint|"+
- "isnum|"+
- "isletters|"+
- "linecoords|"+
- "localize|"+
- "lnum|"+
- "nameshort|"+
- "null|"+
- "objeval|"+
- "r|"+
- "rand|"+
- "s|"+
- "setq|"+
- "setr|"+
- "soundex|"+
- "soundslike|"+
- "valid|"+
- "vchart|"+
- "vchart2|"+
- "vlabel|"+
- "@@|"+
- "bakerdays|"+
- "bodybuild|"+
- "box|"+
- "capall|"+
- "catalog|"+
- "children|"+
- "ctrailer|"+
- "darttime|"+
- "debt|"+
- "detailbar|"+
- "exploredroom|"+
- "fansitoansi|"+
- "fansitoxansi|"+
- "fullbar|"+
- "halfbar|"+
- "isdarted|"+
- "isnewbie|"+
- "isword|"+
- "lambda|"+
- "lobjects|"+
- "lplayers|"+
- "lthings|"+
- "lvexits|"+
- "lvobjects|"+
- "lvplayers|"+
- "lvthings|"+
- "newswrap|"+
- "numsuffix|"+
- "playerson|"+
- "playersthisweek|"+
- "randomad|"+
- "randword|"+
- "realrandword|"+
- "replacechr|"+
- "second|"+
- "splitamount|"+
- "strlenall|"+
- "text|"+
- "third|"+
- "tofansi|"+
- "totalac|"+
- "unique|"+
- "getaddressroom|"+
- "listpropertycomm|"+
- "listpropertyres|"+
- "lotowner|"+
- "lotrating|"+
- "lotratingcount|"+
- "lotvalue|"+
- "boughtproduct|"+
- "companyabb|"+
- "companyicon|"+
- "companylist|"+
- "companyname|"+
- "companyowners|"+
- "companyvalue|"+
- "employees|"+
- "invested|"+
- "productlist|"+
- "productname|"+
- "productowners|"+
- "productrating|"+
- "productratingcount|"+
- "productsoldat|"+
- "producttype|"+
- "ratedproduct|"+
- "soldproduct|"+
- "topproducts|"+
- "totalspentonproduct|"+
- "totalstock|"+
- "transfermoney|"+
- "uniquebuyercount|"+
- "uniqueproductsbought|"+
- "validcompany|"+
- "deletepicture|"+
- "fbsave|"+
- "getpicturesecurity|"+
- "haspicture|"+
- "listpictures|"+
- "picturesize|"+
- "replacecolor|"+
- "rgbtocolor|"+
- "savepicture|"+
- "setpicturesecurity|"+
- "showpicture|"+
- "piechart|"+
- "piechartlabel|"+
- "createmaze|"+
- "drawmaze|"+
- "drawwireframe"
-    );
-    var keywordMapper = this.createKeywordMapper({
-        "invalid.deprecated": "debugger",
-        "support.function": builtinFunctions,
-        "constant.language": builtinConstants,
-        "keyword": keywords
-    }, "identifier");
-
-    var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?";
-
-    var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
-    var octInteger = "(?:0[oO]?[0-7]+)";
-    var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
-    var binInteger = "(?:0[bB][01]+)";
-    var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
-
-    var exponent = "(?:[eE][+-]?\\d+)";
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + exponent + ")";
-    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
-
-    this.$rules = {
-        "start" : [
-         {
-                token : "variable", // mush substitution register
-                regex : "%[0-9]{1}"
-         },
-         {
-                token : "variable", // mush substitution register
-                regex : "%q[0-9A-Za-z]{1}"
-         },
-         {
-                token : "variable", // mush special character register
-                regex : "%[a-zA-Z]{1}"
-         },
-         {
-                token: "variable.language",
-                regex: "%[a-z0-9-_]+"
-         },
-        {
-            token : "constant.numeric", // imaginary
-            regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b"
-        }, {
-            token : "constant.numeric", // float
-            regex : floatNumber
-        }, {
-            token : "constant.numeric", // long integer
-            regex : integer + "[lL]\\b"
-        }, {
-            token : "constant.numeric", // integer
-            regex : integer + "\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|#|%|<<|>>|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\[\\(\\{]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\]\\)\\}]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ],
-    };
-};
-
-oop.inherits(MushCodeRules, TextHighlightRules);
-
-exports.MushCodeRules = MushCodeRules;
-});
diff --git a/try/ace/mode-ocaml.js b/try/ace/mode-ocaml.js
deleted file mode 100644
index aa48110..0000000
--- a/try/ace/mode-ocaml.js
+++ /dev/null
@@ -1,443 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/ocaml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/ocaml_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var OcamlHighlightRules = require("./ocaml_highlight_rules").OcamlHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new OcamlHighlightRules().getRules());
-    this.$outdent   = new MatchingBraceOutdent();
-};
-oop.inherits(Mode, TextMode);
-
-var indenter = /(?:[({[=:]|[-=]>|\b(?:else|try|with))\s*$/;
-
-(function() {
-
-    this.toggleCommentLines = function(state, doc, startRow, endRow) {
-        var i, line;
-        var outdent = true;
-        var re = /^\s*\(\*(.*)\*\)/;
-
-        for (i=startRow; i<= endRow; i++) {
-            if (!re.test(doc.getLine(i))) {
-                outdent = false;
-                break;
-            }
-        }
-
-        var range = new Range(0, 0, 0, 0);
-        for (i=startRow; i<= endRow; i++) {
-            line = doc.getLine(i);
-            range.start.row  = i;
-            range.end.row    = i;
-            range.end.column = line.length;
-
-            doc.replace(range, outdent ? line.match(re)[1] : "(*" + line + "*)");
-        }
-    };
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
-
-        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&
-            state === 'start' && indenter.test(line))
-            indent += tab;
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/ocaml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var OcamlHighlightRules = function() {
-
-    var keywords = (
-        "and|as|assert|begin|class|constraint|do|done|downto|else|end|"  +
-        "exception|external|for|fun|function|functor|if|in|include|"     +
-        "inherit|initializer|lazy|let|match|method|module|mutable|new|"  +
-        "object|of|open|or|private|rec|sig|struct|then|to|try|type|val|" +
-        "virtual|when|while|with"
-    );
-
-    var builtinConstants = ("true|false");
-
-    var builtinFunctions = (
-        "abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|" +
-        "add_available_units|add_big_int|add_buffer|add_channel|add_char|" +
-        "add_initializer|add_int_big_int|add_interfaces|add_num|add_string|" +
-        "add_substitute|add_substring|alarm|allocated_bytes|allow_only|" +
-        "allow_unsafe_modules|always|append|appname_get|appname_set|" +
-        "approx_num_exp|approx_num_fix|arg|argv|arith_status|array|" +
-        "array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|" +
-        "assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|" +
-        "beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|" +
-        "bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|" +
-        "bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|" +
-        "bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|" +
-        "cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|" +
-        "chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|" +
-        "chown|chr|chroot|classify_float|clear|clear_available_units|" +
-        "clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|" +
-        "close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|" +
-        "close_out|close_out_noerr|close_process|close_process|" +
-        "close_process_full|close_process_in|close_process_out|close_subwindow|" +
-        "close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|" +
-        "combine|combine|command|compact|compare|compare_big_int|compare_num|" +
-        "complex32|complex64|concat|conj|connect|contains|contains_from|contents|" +
-        "copy|cos|cosh|count|count|counters|create|create_alarm|create_image|" +
-        "create_matrix|create_matrix|create_matrix|create_object|" +
-        "create_object_and_run_initializers|create_object_opt|create_process|" +
-        "create_process|create_process_env|create_process_env|create_table|" +
-        "current|current_dir_name|current_point|current_x|current_y|curveto|" +
-        "custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|" +
-        "delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|" +
-        "dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|" +
-        "double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|" +
-        "draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|" +
-        "dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|" +
-        "environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|" +
-        "error_message|escaped|establish_server|executable_name|execv|execve|execvp|" +
-        "execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|" +
-        "file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|" +
-        "filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|" +
-        "float|float32|float64|float_of_big_int|float_of_bits|float_of_int|" +
-        "float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|" +
-        "flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|" +
-        "for_all|for_all2|force|force_newline|force_val|foreground|fork|" +
-        "format_of_string|formatter_of_buffer|formatter_of_out_channel|" +
-        "fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|" +
-        "from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|" +
-        "full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|" +
-        "genarray_of_array1|genarray_of_array2|genarray_of_array3|get|" +
-        "get_all_formatter_output_functions|get_approx_printing|get_copy|" +
-        "get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|" +
-        "get_formatter_output_functions|get_formatter_tag_functions|get_image|" +
-        "get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|" +
-        "get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|" +
-        "get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|" +
-        "getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|" +
-        "getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|" +
-        "getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|" +
-        "getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|" +
-        "getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|" +
-        "global_replace|global_substitute|gmtime|green|grid|group_beginning|" +
-        "group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|" +
-        "hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|" +
-        "incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|" +
-        "infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|" +
-        "input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|" +
-        "int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|" +
-        "int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|" +
-        "is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|" +
-        "is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|" +
-        "kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|" +
-        "lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|" +
-        "lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|" +
-        "loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|" +
-        "logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|" +
-        "lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|" +
-        "make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|" +
-        "marshal|match_beginning|match_end|matched_group|matched_string|max|" +
-        "max_array_length|max_big_int|max_elt|max_float|max_int|max_num|" +
-        "max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|" +
-        "min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|" +
-        "minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|" +
-        "mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|" +
-        "nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|" +
-        "new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|" +
-        "nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|" +
-        "num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|" +
-        "of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|" +
-        "of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|" +
-        "open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|" +
-        "open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|" +
-        "open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|" +
-        "open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|" +
-        "out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|" +
-        "output_char|output_string|output_value|over_max_boxes|pack|params|" +
-        "parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|" +
-        "place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|" +
-        "power_big_int_positive_big_int|power_big_int_positive_int|" +
-        "power_int_positive_big_int|power_int_positive_int|power_num|" +
-        "pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|" +
-        "pp_get_all_formatter_output_functions|pp_get_ellipsis_text|" +
-        "pp_get_formatter_output_functions|pp_get_formatter_tag_functions|" +
-        "pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|" +
-        "pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|" +
-        "pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|" +
-        "pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|" +
-        "pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|" +
-        "pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|" +
-        "pp_set_all_formatter_output_functions|pp_set_ellipsis_text|" +
-        "pp_set_formatter_out_channel|pp_set_formatter_output_functions|" +
-        "pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|" +
-        "pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|" +
-        "pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|" +
-        "prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|" +
-        "print_bool|print_break|print_char|print_cut|print_endline|print_float|" +
-        "print_flush|print_if_newline|print_int|print_newline|print_space|" +
-        "print_stat|print_string|print_tab|print_tbreak|printf|prohibit|" +
-        "public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|" +
-        "raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|" +
-        "read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|" +
-        "recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|" +
-        "regexp_string_case_fold|register|register_exception|rem|remember_mode|" +
-        "remove|remove_assoc|remove_assq|rename|replace|replace_first|" +
-        "replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|" +
-        "rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|" +
-        "rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|" +
-        "run_initializers|run_initializers_opt|scanf|search_backward|" +
-        "search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|" +
-        "set_all_formatter_output_functions|set_approx_printing|" +
-        "set_binary_mode_in|set_binary_mode_out|set_close_on_exec|" +
-        "set_close_on_exec|set_color|set_ellipsis_text|" +
-        "set_error_when_null_denominator|set_field|set_floating_precision|" +
-        "set_font|set_formatter_out_channel|set_formatter_output_functions|" +
-        "set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|" +
-        "set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|" +
-        "set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|" +
-        "set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|" +
-        "set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|" +
-        "setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|" +
-        "setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|" +
-        "shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|" +
-        "shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|" +
-        "shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|" +
-        "sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|" +
-        "sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|" +
-        "sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|" +
-        "sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|" +
-        "sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|" +
-        "slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|" +
-        "slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|" +
-        "split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|" +
-        "square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|" +
-        "stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|" +
-        "stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|" +
-        "str_formatter|string|string_after|string_before|string_match|" +
-        "string_of_big_int|string_of_bool|string_of_float|string_of_format|" +
-        "string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|" +
-        "string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|" +
-        "sub_right|subset|subset|substitute_first|substring|succ|succ|" +
-        "succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|" +
-        "symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|" +
-        "tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|" +
-        "tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|" +
-        "temp_file|text_size|time|time|time|timed_read|timed_write|times|times|" +
-        "tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|" +
-        "to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|" +
-        "to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|" +
-        "truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|" +
-        "uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|" +
-        "unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|" +
-        "update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|" +
-        "wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|" +
-        "wait_timed_read|wait_timed_write|wait_write|waitpid|white|" +
-        "widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|" +
-
-        "Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|" +
-        "Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|" +
-        "Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|" +
-        "Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|" +
-        "MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|" +
-        "Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|" +
-        "Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "variable.language": "this",
-        "keyword": keywords,
-        "constant.language": builtinConstants,
-        "support.function": builtinFunctions
-    }, "identifier");
-
-    var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
-    var octInteger = "(?:0[oO]?[0-7]+)";
-    var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
-    var binInteger = "(?:0[bB][01]+)";
-    var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
-
-    var exponent = "(?:[eE][+-]?\\d+)";
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + exponent + ")";
-    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : '\\(\\*.*?\\*\\)\\s*?$'
-            },
-            {
-                token : "comment",
-                regex : '\\(\\*.*',
-                next : "comment"
-            },
-            {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            },
-            {
-                token : "string", // single char
-                regex : "'.'"
-            },
-            {
-                token : "string", // " string
-                regex : '"',
-                next  : "qstring"
-            },
-            {
-                token : "constant.numeric", // imaginary
-                regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b"
-            },
-            {
-                token : "constant.numeric", // float
-                regex : floatNumber
-            },
-            {
-                token : "constant.numeric", // integer
-                regex : integer + "\\b"
-            },
-            {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            },
-            {
-                token : "keyword.operator",
-                regex : "\\+\\.|\\-\\.|\\*\\.|\\/\\.|#|;;|\\+|\\-|\\*|\\*\\*\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|<-|="
-            },
-            {
-                token : "paren.lparen",
-                regex : "[[({]"
-            },
-            {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            },
-            {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\)",
-                next : "start"
-            },
-            {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-
-        "qstring" : [
-            {
-                token : "string",
-                regex : '"',
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ]
-    };
-};
-
-oop.inherits(OcamlHighlightRules, TextHighlightRules);
-
-exports.OcamlHighlightRules = OcamlHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-perl.js b/try/ace/mode-perl.js
deleted file mode 100644
index 799bb89..0000000
--- a/try/ace/mode-perl.js
+++ /dev/null
@@ -1,316 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/perl', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/perl_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new PerlHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.foldingRules = new CStyleFoldMode({start: "^=(begin|item)\\b", end: "^=(cut)\\b"});
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "#";
-    this.blockComment = [
-        {start: "=begin", end: "=cut"},
-        {start: "=item", end: "=cut"}
-    ];
-
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[\:]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/perl_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var PerlHighlightRules = function() {
-
-    var keywords = (
-        "base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|" +
-         "no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars"
-    );
-
-    var buildinConstants = ("ARGV|ENV|INC|SIG");
-
-    var builtinFunctions = (
-        "getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|" +
-         "gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|" +
-         "getpeername|setpriority|getprotoent|setprotoent|getpriority|" +
-         "endprotoent|getservent|setservent|endservent|sethostent|socketpair|" +
-         "getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|" +
-         "localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|" +
-         "closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|" +
-         "shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|" +
-         "dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|" +
-         "setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|" +
-         "lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|" +
-         "waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|" +
-         "chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|" +
-         "unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|" +
-         "length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|" +
-         "undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|" +
-         "sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|" +
-         "BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|" +
-         "join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|" +
-         "keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|" +
-         "eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|" +
-         "map|die|uc|lc|do"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "keyword": keywords,
-        "constant.language": buildinConstants,
-        "support.function": builtinFunctions
-    }, "identifier");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "#.*$"
-            }, {
-                token : "comment.doc",
-                regex : "^=(?:begin|item)\\b",
-                next : "block_comment"
-            }, {
-                token : "string.regexp",
-                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // multi line string start
-                regex : '["].*\\\\$',
-                next : "qqstring"
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "string", // multi line string start
-                regex : "['].*\\\\$",
-                next : "qstring"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0x[0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                token : "keyword.operator",
-                regex : "\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"
-            }, {
-                token : "lparen",
-                regex : "[[({]"
-            }, {
-                token : "rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "qqstring" : [
-            {
-                token : "string",
-                regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ],
-        "qstring" : [
-            {
-                token : "string",
-                regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ],
-        "block_comment": [
-            {
-                token: "comment.doc", 
-                regex: "^=cut\\b",
-                next: "start"
-            },
-            {
-                defaultToken: "comment.doc"
-            }
-        ]
-    };
-};
-
-oop.inherits(PerlHighlightRules, TextHighlightRules);
-
-exports.PerlHighlightRules = PerlHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-pgsql.js b/try/ace/mode-pgsql.js
deleted file mode 100644
index f263a89..0000000
--- a/try/ace/mode-pgsql.js
+++ /dev/null
@@ -1,929 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/pgsql', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/pgsql_highlight_rules', 'ace/range'], function(require, exports, module) {
-
-var oop = require("../lib/oop");
-var TextMode = require("../mode/text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var PgsqlHighlightRules = require("./pgsql_highlight_rules").PgsqlHighlightRules;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new PgsqlHighlightRules().getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {       
-    this.lineCommentStart = "--";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) { 
-        if (state == "start" || state == "keyword.statementEnd") {
-            return "";
-        } else {
-            return this.$getIndent(line); // Keep whatever indent the previous line has
-        }
-    }
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/pgsql_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules', 'ace/mode/perl_highlight_rules', 'ace/mode/python_highlight_rules'], function(require, exports, module) {
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules;
-var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules;
-
-var PgsqlHighlightRules = function() {
-    var keywords = (
-        "abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|" +
-        "analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|array|as|asc|assertion|" +
-        "assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|" +
-        "binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|" +
-        "catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|" +
-        "cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|" +
-        "configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|" +
-        "create|cross|cstring|csv|current|current_catalog|current_date|current_role|" +
-        "current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|" +
-        "date|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|" +
-        "delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|" +
-        "drop|each|else|enable|encoding|encrypted|end|enum|escape|except|exclude|excluding|exclusive|" +
-        "execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|" +
-        "float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|" +
-        "global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|" +
-        "ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|" +
-        "inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|" +
-        "int4|int8|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|key|label|" +
-        "language|language_handler|large|last|lc_collate|lc_ctype|leading|least|left|level|like|" +
-        "limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|" +
-        "match|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|" +
-        "none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|object|of|off|offset|oid|oids|" +
-        "oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|" +
-        "owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|" +
-        "pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|" +
-        "position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|" +
-        "procedural|procedure|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|" +
-        "references|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|" +
-        "regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|" +
-        "restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|" +
-        "search|second|security|select|sequence|sequences|serializable|server|session|session_user|" +
-        "set|setof|share|show|similar|simple|smallint|smgr|some|stable|standalone|start|statement|" +
-        "statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|" +
-        "tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|" +
-        "tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsvector|" +
-        "txid_snapshot|type|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|" +
-        "unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|" +
-        "varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|" +
-        "with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|" +
-        "xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone"
-    );
-
-
-    var builtinFunctions = (
-        "RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|" +
-        "RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|" +
-        "RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|" +
-        "RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|" +
-        "abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|aclexplode|aclinsert|" +
-        "aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|" +
-        "anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|" +
-        "anynonarray_in|anynonarray_out|anytextcat|area|areajoinsel|areasel|array_agg|" +
-        "array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|" +
-        "array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|" +
-        "array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_send|" +
-        "array_smaller|array_to_string|array_upper|arraycontained|arraycontains|arrayoverlap|" +
-        "ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|" +
-        "big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|" +
-        "bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|" +
-        "bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|" +
-        "boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|" +
-        "box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|" +
-        "box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|" +
-        "box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|" +
-        "box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|" +
-        "bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|" +
-        "bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|" +
-        "bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|" +
-        "bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|" +
-        "bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|" +
-        "btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcharcmp|btcostestimate|" +
-        "btendscan|btfloat48cmp|btfloat4cmp|btfloat84cmp|btfloat8cmp|btgetbitmap|btgettuple|" +
-        "btinsert|btint24cmp|btint28cmp|btint2cmp|btint42cmp|btint48cmp|btint4cmp|btint82cmp|" +
-        "btint84cmp|btint8cmp|btmarkpos|btnamecmp|btoidcmp|btoidvectorcmp|btoptions|btrecordcmp|" +
-        "btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|" +
-        "bttintervalcmp|btvacuumcleanup|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|" +
-        "bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|" +
-        "cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|" +
-        "cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|" +
-        "cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|" +
-        "center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|" +
-        "charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|" +
-        "cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|" +
-        "circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|" +
-        "circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|" +
-        "circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|" +
-        "circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|" +
-        "clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|" +
-        "close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|" +
-        "convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|" +
-        "cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|" +
-        "current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|" +
-        "cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|" +
-        "database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|" +
-        "date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|" +
-        "date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|" +
-        "date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|" +
-        "date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|" +
-        "date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|" +
-        "date_trunc|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|" +
-        "diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|" +
-        "dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|" +
-        "dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|" +
-        "dsynonym_lexize|dtrunc|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|" +
-        "enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|" +
-        "enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|" +
-        "euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|" +
-        "euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|" +
-        "euc_tw_to_utf8|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|" +
-        "float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|" +
-        "float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|" +
-        "float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|" +
-        "float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|" +
-        "float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|" +
-        "float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|" +
-        "float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|" +
-        "float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|" +
-        "float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|" +
-        "float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|" +
-        "float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|" +
-        "flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|" +
-        "fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|" +
-        "generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|" +
-        "getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|" +
-        "gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|" +
-        "ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|" +
-        "gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|" +
-        "ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|" +
-        "gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|" +
-        "gist_circle_compress|gist_circle_consistent|gist_point_compress|" +
-        "gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|" +
-        "gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|" +
-        "gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|" +
-        "gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|" +
-        "gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|" +
-        "gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|" +
-        "gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|" +
-        "has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|" +
-        "has_function_privilege|has_language_privilege|has_schema_privilege|" +
-        "has_sequence_privilege|has_server_privilege|has_table_privilege|" +
-        "has_tablespace_privilege|hash_aclitem|hash_array|hash_numeric|hashbeginscan|" +
-        "hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|" +
-        "hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|" +
-        "hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|" +
-        "hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|" +
-        "hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|" +
-        "icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|" +
-        "inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|" +
-        "inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|" +
-        "int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|" +
-        "int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|" +
-        "int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|" +
-        "int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|" +
-        "int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|" +
-        "int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|" +
-        "int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|" +
-        "int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|" +
-        "int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|" +
-        "int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4recv|int4send|" +
-        "int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|" +
-        "int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|" +
-        "int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|" +
-        "int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|" +
-        "int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|" +
-        "int8or|int8out|int8pl|int8pl_inet|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|" +
-        "int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|" +
-        "interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|" +
-        "interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|" +
-        "interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|" +
-        "interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|" +
-        "interval_recv|interval_send|interval_smaller|interval_um|intervaltypmodin|" +
-        "intervaltypmodout|intinterval|isclosed|isfinite|ishorizontal|iso8859_1_to_utf8|" +
-        "iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|" +
-        "isperp|isvertical|johab_to_utf8|justify_days|justify_hours|justify_interval|" +
-        "koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|" +
-        "koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|" +
-        "latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|" +
-        "length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|" +
-        "line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|" +
-        "line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|" +
-        "lo_open|lo_tell|lo_truncate|lo_unlink|log|loread|lower|lowrite|lpad|lseg|lseg_center|" +
-        "lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|" +
-        "lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|" +
-        "lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|" +
-        "macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_out|macaddr_recv|macaddr_send|" +
-        "makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|" +
-        "mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|" +
-        "mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|" +
-        "min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|" +
-        "nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|" +
-        "namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|" +
-        "network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|" +
-        "network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|" +
-        "npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|" +
-        "numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|" +
-        "numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|" +
-        "numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|" +
-        "numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|" +
-        "numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_uminus|numeric_uplus|" +
-        "numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|" +
-        "obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|" +
-        "oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|" +
-        "oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|" +
-        "on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|" +
-        "path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|" +
-        "path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|" +
-        "path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|" +
-        "pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|" +
-        "pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|" +
-        "pg_available_extension_versions|pg_available_extensions|pg_backend_pid|" +
-        "pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_is_visible|" +
-        "pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|" +
-        "pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|" +
-        "pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|" +
-        "pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|" +
-        "pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|" +
-        "pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|" +
-        "pg_get_indexdef|pg_get_keywords|pg_get_ruledef|pg_get_serial_sequence|" +
-        "pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_indexes_size|" +
-        "pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|" +
-        "pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|" +
-        "pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|" +
-        "pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|" +
-        "pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|" +
-        "pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|" +
-        "pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|" +
-        "pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|" +
-        "pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|" +
-        "pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|" +
-        "pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|" +
-        "pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|" +
-        "pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|" +
-        "pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|" +
-        "pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|" +
-        "pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|" +
-        "pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|" +
-        "pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|" +
-        "pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|" +
-        "pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|" +
-        "pg_stat_get_buf_written_backend|pg_stat_get_db_blocks_fetched|" +
-        "pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|" +
-        "pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|" +
-        "pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|" +
-        "pg_stat_get_db_conflict_tablespace|pg_stat_get_db_numbackends|" +
-        "pg_stat_get_db_stat_reset_time|pg_stat_get_db_tuples_deleted|" +
-        "pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|" +
-        "pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|" +
-        "pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|" +
-        "pg_stat_get_function_calls|pg_stat_get_function_self_time|" +
-        "pg_stat_get_function_time|pg_stat_get_last_analyze_time|" +
-        "pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|" +
-        "pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|" +
-        "pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|" +
-        "pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|" +
-        "pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|" +
-        "pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|" +
-        "pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|" +
-        "pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_time|" +
-        "pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|" +
-        "pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|" +
-        "pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|" +
-        "pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|" +
-        "pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|" +
-        "pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|" +
-        "pg_tablespace_databases|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|" +
-        "pg_timezone_names|pg_total_relation_size|pg_try_advisory_lock|" +
-        "pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|" +
-        "pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|" +
-        "pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|" +
-        "pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|" +
-        "pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|" +
-        "point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|" +
-        "point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|" +
-        "point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|" +
-        "poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|" +
-        "poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|" +
-        "poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|" +
-        "postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|" +
-        "prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|" +
-        "query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|" +
-        "quote_nullable|radians|radius|random|rank|record_eq|record_ge|record_gt|record_in|" +
-        "record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|" +
-        "regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|" +
-        "regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|" +
-        "regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|" +
-        "regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|" +
-        "regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|" +
-        "regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|" +
-        "regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|" +
-        "regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|" +
-        "reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|" +
-        "reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|rpad|rtrim|" +
-        "scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|" +
-        "schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|" +
-        "set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|" +
-        "shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|" +
-        "similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|" +
-        "smgrout|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|" +
-        "string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|" +
-        "suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|" +
-        "table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|" +
-        "text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|" +
-        "texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|" +
-        "textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|" +
-        "thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|" +
-        "tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|" +
-        "time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|" +
-        "time_smaller|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|" +
-        "timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|" +
-        "timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|" +
-        "timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|" +
-        "timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|" +
-        "timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|" +
-        "timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|" +
-        "timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|" +
-        "timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|" +
-        "timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|" +
-        "timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|" +
-        "timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|" +
-        "timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|" +
-        "timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|" +
-        "timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|" +
-        "timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|" +
-        "timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|" +
-        "timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|" +
-        "timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|" +
-        "timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|" +
-        "timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|" +
-        "tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|" +
-        "tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|" +
-        "tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|" +
-        "tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|" +
-        "to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|" +
-        "trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|" +
-        "ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|" +
-        "ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|" +
-        "tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|" +
-        "tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsvector_cmp|" +
-        "tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|" +
-        "tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|" +
-        "tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|" +
-        "txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|" +
-        "txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|" +
-        "uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|" +
-        "upper|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|" +
-        "utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|" +
-        "utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|" +
-        "utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|" +
-        "uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|" +
-        "varbit_out|varbit_recv|varbit_send|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|" +
-        "varbitlt|varbitne|varbittypmodin|varbittypmodout|varcharin|varcharout|varcharrecv|" +
-        "varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|" +
-        "void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|" +
-        "win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|" +
-        "win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|" +
-        "xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|" +
-        "xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|" +
-        "xpath_exists"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": builtinFunctions,
-        "keyword": keywords
-    }, "identifier", true);
-
-
-    var sqlRules = [{
-            token : "string", // single line string -- assume dollar strings if multi-line for now
-            regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-        }, {
-            token : "variable.language", // pg identifier
-            regex : '".*?"'
-        }, {
-            token : "constant.numeric", // float
-            regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_][a-zA-Z0-9_$]*\\b" // TODO - Unicode in identifiers
-        }, {
-            token : "keyword.operator",
-            regex : "!|!!|!~|!~\\*|!~~|!~~\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\&|\\&\\&|\\&<|\\&<\\||\\&>|\\*|\\+|" +
-                    "\\-|/|<|<#>|<\\->|<<|<<=|<<\\||<=|<>|<\\?>|<@|<\\^|=|>|>=|>>|>>=|>\\^|\\?#|\\?\\-|\\?\\-\\||" +
-                    "\\?\\||\\?\\|\\||@|@\\-@|@>|@@|@@@|\\^|\\||\\|\\&>|\\|/|\\|>>|\\|\\||\\|\\|/|~|~\\*|~<=~|~<~|" +
-                    "~=|~>=~|~>~|~~|~~\\*"
-        }, {
-            token : "paren.lparen",
-            regex : "[\\(]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\)]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        }
-    ];
-
-
-    this.$rules = {
-        "start" : [{
-                token : "comment",
-                regex : "--.*$"
-            },
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi-line comment
-                regex : "\\/\\*",
-                next : "comment"
-            },{
-                token : "keyword.statementBegin",
-                regex : "^[a-zA-Z]+", // Could enumerate starting keywords but this allows things to work when new statements are added.
-                next : "statement"
-            },{
-                token : "support.buildin", // psql directive
-                regex : "^\\\\[\\S]+.*$"
-            }
-        ],
-
-        "statement" : [{
-                token : "comment",
-                regex : "--.*$"
-            }, {
-                token : "comment", // multi-line comment
-                regex : "\\/\\*",
-                next : "commentStatement"
-            }, {
-                token : "statementEnd",
-                regex : ";",
-                next : "start"
-            }, {
-                token : "string", // perl, python, tcl are in the pg default dist (no tcl highlighter)
-                regex : "\\$perl\\$",
-                next : "perl-start"
-            }, {
-                token : "string",
-                regex : "\\$python\\$",
-                next : "python-start"
-            },{
-                token : "string",
-                regex : "\\$[\\w_0-9]*\\$$", // dollar quote at the end of a line
-                next : "dollarSql"
-            }, {
-                token : "string",
-                regex : "\\$[\\w_0-9]*\\$",
-                next : "dollarStatementString"
-            }
-        ].concat(sqlRules),
-
-        "dollarSql" : [{
-                token : "comment",
-                regex : "--.*$"
-            }, {
-                token : "comment", // multi-line comment
-                regex : "\\/\\*",
-                next : "commentDollarSql"
-            }, {
-                token : "string", // end quoting with dollar at the start of a line
-                regex : "^\\$[\\w_0-9]*\\$",
-                next : "statement"
-            }, {
-                token : "string",
-                regex : "\\$[\\w_0-9]*\\$",
-                next : "dollarSqlString"
-            }
-        ].concat(sqlRules),
-
-        "comment" : [{
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-
-        "commentStatement" : [{
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "statement"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-
-        "commentDollarSql" : [{
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "dollarSql"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-
-        "dollarStatementString" : [{
-                token : "string", // closing dollarstring
-                regex : ".*?\\$[\\w_0-9]*\\$",
-                next : "statement"
-            }, {
-                token : "string", // dollarstring spanning whole line
-                regex : ".+"
-            }
-        ],
-
-        "dollarSqlString" : [{
-                token : "string", // closing dollarstring
-                regex : ".*?\\$[\\w_0-9]*\\$",
-                next : "dollarSql"
-            }, {
-                token : "string", // dollarstring spanning whole line
-                regex : ".+"
-            }
-        ]
-    };
-
-    this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]);
-    this.embedRules(PerlHighlightRules, "perl-", [{token : "string", regex : "\\$perl\\$", next : "statement"}]);
-    this.embedRules(PythonHighlightRules, "python-", [{token : "string", regex : "\\$python\\$", next : "statement"}]);
-};
-
-oop.inherits(PgsqlHighlightRules, TextHighlightRules);
-
-exports.PgsqlHighlightRules = PgsqlHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/perl_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var PerlHighlightRules = function() {
-
-    var keywords = (
-        "base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|" +
-         "no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars"
-    );
-
-    var buildinConstants = ("ARGV|ENV|INC|SIG");
-
-    var builtinFunctions = (
-        "getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|" +
-         "gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|" +
-         "getpeername|setpriority|getprotoent|setprotoent|getpriority|" +
-         "endprotoent|getservent|setservent|endservent|sethostent|socketpair|" +
-         "getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|" +
-         "localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|" +
-         "closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|" +
-         "shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|" +
-         "dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|" +
-         "setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|" +
-         "lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|" +
-         "waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|" +
-         "chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|" +
-         "unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|" +
-         "length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|" +
-         "undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|" +
-         "sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|" +
-         "BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|" +
-         "join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|" +
-         "keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|" +
-         "eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|" +
-         "map|die|uc|lc|do"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "keyword": keywords,
-        "constant.language": buildinConstants,
-        "support.function": builtinFunctions
-    }, "identifier");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "#.*$"
-            }, {
-                token : "comment.doc",
-                regex : "^=(?:begin|item)\\b",
-                next : "block_comment"
-            }, {
-                token : "string.regexp",
-                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // multi line string start
-                regex : '["].*\\\\$',
-                next : "qqstring"
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "string", // multi line string start
-                regex : "['].*\\\\$",
-                next : "qstring"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0x[0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                token : "keyword.operator",
-                regex : "\\.\\.\\.|\\|\\|=|>>=|<<=|<=>|&&=|=>|!~|\\^=|&=|\\|=|\\.=|x=|%=|\\/=|\\*=|\\-=|\\+=|=~|\\*\\*|\\-\\-|\\.\\.|\\|\\||&&|\\+\\+|\\->|!=|==|>=|<=|>>|<<|,|=|\\?\\:|\\^|\\||x|%|\\/|\\*|<|&|\\\\|~|!|>|\\.|\\-|\\+|\\-C|\\-b|\\-S|\\-u|\\-t|\\-p|\\-l|\\-d|\\-f|\\-g|\\-s|\\-z|\\-k|\\-e|\\-O|\\-T|\\-B|\\-M|\\-A|\\-X|\\-W|\\-c|\\-R|\\-o|\\-x|\\-w|\\-r|\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)"
-            }, {
-                token : "lparen",
-                regex : "[[({]"
-            }, {
-                token : "rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "qqstring" : [
-            {
-                token : "string",
-                regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ],
-        "qstring" : [
-            {
-                token : "string",
-                regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ],
-        "block_comment": [
-            {
-                token: "comment.doc", 
-                regex: "^=cut\\b",
-                next: "start"
-            },
-            {
-                defaultToken: "comment.doc"
-            }
-        ]
-    };
-};
-
-oop.inherits(PerlHighlightRules, TextHighlightRules);
-
-exports.PerlHighlightRules = PerlHighlightRules;
-});
-
-define('ace/mode/python_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var PythonHighlightRules = function() {
-
-    var keywords = (
-        "and|as|assert|break|class|continue|def|del|elif|else|except|exec|" +
-        "finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|" +
-        "raise|return|try|while|with|yield"
-    );
-
-    var builtinConstants = (
-        "True|False|None|NotImplemented|Ellipsis|__debug__"
-    );
-
-    var builtinFunctions = (
-        "abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|" +
-        "eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|" +
-        "binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|" +
-        "float|list|raw_input|unichr|callable|format|locals|reduce|unicode|" +
-        "chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|" +
-        "cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|" +
-        "__import__|complex|hash|min|set|apply|delattr|help|next|setattr|" +
-        "buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern"
-    );
-    var keywordMapper = this.createKeywordMapper({
-        "invalid.deprecated": "debugger",
-        "support.function": builtinFunctions,
-        "constant.language": builtinConstants,
-        "keyword": keywords
-    }, "identifier");
-
-    var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?";
-
-    var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
-    var octInteger = "(?:0[oO]?[0-7]+)";
-    var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
-    var binInteger = "(?:0[bB][01]+)";
-    var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
-
-    var exponent = "(?:[eE][+-]?\\d+)";
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + exponent + ")";
-    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
-
-    var stringEscape =  "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment",
-            regex : "#.*$"
-        }, {
-            token : "string",           // multi line """ string start
-            regex : strPre + '"{3}',
-            next : "qqstring3"
-        }, {
-            token : "string",           // " string
-            regex : strPre + '"(?=.)',
-            next : "qqstring"
-        }, {
-            token : "string",           // multi line ''' string start
-            regex : strPre + "'{3}",
-            next : "qstring3"
-        }, {
-            token : "string",           // ' string
-            regex : strPre + "'(?=.)",
-            next : "qstring"
-        }, {
-            token : "constant.numeric", // imaginary
-            regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b"
-        }, {
-            token : "constant.numeric", // float
-            regex : floatNumber
-        }, {
-            token : "constant.numeric", // long integer
-            regex : integer + "[lL]\\b"
-        }, {
-            token : "constant.numeric", // integer
-            regex : integer + "\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\[\\(\\{]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\]\\)\\}]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ],
-        "qqstring3" : [ {
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string", // multi line """ string end
-            regex : '"{3}',
-            next : "start"
-        }, {
-            defaultToken : "string"
-        } ],
-        "qstring3" : [ {
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string",  // multi line ''' string end
-            regex : "'{3}",
-            next : "start"
-        }, {
-            defaultToken : "string"
-        } ],
-        "qqstring" : [{
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string",
-            regex : "\\\\$",
-            next  : "qqstring"
-        }, {
-            token : "string",
-            regex : '"|$',
-            next  : "start"
-        }, {
-            defaultToken: "string"
-        }],
-        "qstring" : [{
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string",
-            regex : "\\\\$",
-            next  : "qstring"
-        }, {
-            token : "string",
-            regex : "'|$",
-            next  : "start"
-        }, {
-            defaultToken: "string"
-        }]
-    };
-};
-
-oop.inherits(PythonHighlightRules, TextHighlightRules);
-
-exports.PythonHighlightRules = PythonHighlightRules;
-});
diff --git a/try/ace/mode-php.js b/try/ace/mode-php.js
deleted file mode 100644
index 35f0401..0000000
--- a/try/ace/mode-php.js
+++ /dev/null
@@ -1,2291 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/php', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/php_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle', 'ace/unicode'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var PhpHighlightRules = require("./php_highlight_rules").PhpHighlightRules;
-var PhpLangHighlightRules = require("./php_highlight_rules").PhpLangHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-var WorkerClient = require("../worker/worker_client").WorkerClient;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-var unicode = require("../unicode");
-
-var Mode = function(opts) {
-    var inline = opts && opts.inline;
-    var HighlightRules = inline ? PhpLangHighlightRules : PhpHighlightRules;
-    this.$tokenizer = new Tokenizer(new HighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.tokenRe = new RegExp("^["
-        + unicode.packages.L
-        + unicode.packages.Mn + unicode.packages.Mc
-        + unicode.packages.Nd
-        + unicode.packages.Pc + "\_]+", "g"
-    );
-    
-    this.nonTokenRe = new RegExp("^(?:[^"
-        + unicode.packages.L
-        + unicode.packages.Mn + unicode.packages.Mc
-        + unicode.packages.Nd
-        + unicode.packages.Pc + "\_]|\s])+", "g"
-    );
-
-       
-    this.lineCommentStart = ["//", "#"];
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-        var endState = tokenizedLine.state;
-
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "php-start") {
-            var match = line.match(/^.*[\{\(\[\:]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        } else if (state == "php-doc-start") {
-            if (endState != "php-doc-start") {
-                return "";
-            }
-            var match = line.match(/^\s*(\/?)\*/);
-            if (match) {
-                if (match[1]) {
-                    indent += " ";
-                }
-                indent += "* ";
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-    this.createWorker = function(session) {
-        var worker = new WorkerClient(["ace"], "ace/mode/php_worker", "PhpWorker");
-        worker.attachToDocument(session.getDocument());
-
-        worker.on("error", function(e) {
-            session.setAnnotations(e.data);
-        });
-
-        worker.on("ok", function() {
-            session.clearAnnotations();
-        });
-
-        return worker;
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/php_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules', 'ace/mode/html_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
-
-var PhpLangHighlightRules = function() {
-    var docComment = DocCommentHighlightRules;
-    var builtinFunctions = lang.arrayToMap(
-        ('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|' +
-        'aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|' +
-        'apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|' +
-        'apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|' +
-        'apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|' +
-        'apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|' +
-        'apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|' +
-        'apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|' +
-        'array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|' +
-        'array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|' +
-        'array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|' +
-        'array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|' +
-        'array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|' +
-        'array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|' +
-        'atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|' +
-        'bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|' +
-        'bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|' +
-        'bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|' +
-        'bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|' +
-        'bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|' +
-        'cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|' +
-        'cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|' +
-        'cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|' +
-        'cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|' +
-        'cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|' +
-        'cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|' +
-        'cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|' +
-        'cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|' +
-        'cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|' +
-        'cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|' +
-        'cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|' +
-        'cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|' +
-        'cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|' +
-        'cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|' +
-        'cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|' +
-        'cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|' +
-        'cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|' +
-        'cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|' +
-        'cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|' +
-        'cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|' +
-        'cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|' +
-        'cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|' +
-        'cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|' +
-        'cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|' +
-        'cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|' +
-        'cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|' +
-        'cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|' +
-        'cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|' +
-        'chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|' +
-        'class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|' +
-        'classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|' +
-        'com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|' +
-        'com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|' +
-        'convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|' +
-        'counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|' +
-        'crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|' +
-        'ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|' +
-        'cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|' +
-        'cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|' +
-        'cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|' +
-        'cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|' +
-        'cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|' +
-        'cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|' +
-        'cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|' +
-        'cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|' +
-        'cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|' +
-        'cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|' +
-        'cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|' +
-        'curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|' +
-        'curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|' +
-        'curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|' +
-        'date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|' +
-        'date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|' +
-        'date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|' +
-        'dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|' +
-        'db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|' +
-        'db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|' +
-        'db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|' +
-        'db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|' +
-        'db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|' +
-        'db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|' +
-        'dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|' +
-        'dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|' +
-        'dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|' +
-        'dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|' +
-        'dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|' +
-        'dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|' +
-        'dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|' +
-        'dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|' +
-        'dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|' +
-        'define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|' +
-        'dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|' +
-        'dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|' +
-        'domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|' +
-        'domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|' +
-        'domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|' +
-        'domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|' +
-        'domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|' +
-        'domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|' +
-        'domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|' +
-        'domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|' +
-        'domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|' +
-        'domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|' +
-        'domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|' +
-        'domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|' +
-        'domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|' +
-        'domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|' +
-        'domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|' +
-        'domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|' +
-        'domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|' +
-        'enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|' +
-        'enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|' +
-        'enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|' +
-        'enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|' +
-        'eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|' +
-        'event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|' +
-        'event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|' +
-        'event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|' +
-        'event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|' +
-        'expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|' +
-        'fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|' +
-        'fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|' +
-        'fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|' +
-        'fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|' +
-        'fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|' +
-        'fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|' +
-        'fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|' +
-        'fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|' +
-        'fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|' +
-        'fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|' +
-        'fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|' +
-        'fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|' +
-        'fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|' +
-        'file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|' +
-        'filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|' +
-        'filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|' +
-        'finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|' +
-        'forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|' +
-        'ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|' +
-        'ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|' +
-        'ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|' +
-        'func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|' +
-        'gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|' +
-        'geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|' +
-        'geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|' +
-        'get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|' +
-        'get_declared_interfaces|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|' +
-        'get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|' +
-        'get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|' +
-        'getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|' +
-        'gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|' +
-        'getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|' +
-        'getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|' +
-        'gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|' +
-        'gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|' +
-        'gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|' +
-        'gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|' +
-        'gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|' +
-        'gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|' +
-        'gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|' +
-        'grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|' +
-        'gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|' +
-        'gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|' +
-        'gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|' +
-        'gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|' +
-        'gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|' +
-        'gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|' +
-        'gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|' +
-        'gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|' +
-        'gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|' +
-        'gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|' +
-        'halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|' +
-        'haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|' +
-        'harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|' +
-        'harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|' +
-        'harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|' +
-        'harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|' +
-        'harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|' +
-        'harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|' +
-        'harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|' +
-        'harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|' +
-        'haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|' +
-        'harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|' +
-        'harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|' +
-        'haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|' +
-        'haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|' +
-        'harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|' +
-        'harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|' +
-        'harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|' +
-        'harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|' +
-        'harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|' +
-        'harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|' +
-        'harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|' +
-        'harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|' +
-        'harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|' +
-        'harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|' +
-        'harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|' +
-        'harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|' +
-        'harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|' +
-        'harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|' +
-        'hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|' +
-        'header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|' +
-        'html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|' +
-        'http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|' +
-        'http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|' +
-        'http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|' +
-        'http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|' +
-        'http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|' +
-        'http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|' +
-        'http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|' +
-        'http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|' +
-        'httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|' +
-        'httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|' +
-        'httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|' +
-        'httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|' +
-        'httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|' +
-        'httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|' +
-        'httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|' +
-        'httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|' +
-        'httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|' +
-        'httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|' +
-        'httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|' +
-        'httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|' +
-        'httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|' +
-        'httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|' +
-        'httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|' +
-        'httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|' +
-        'httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|' +
-        'httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|' +
-        'httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|' +
-        'httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|' +
-        'httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|' +
-        'httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|' +
-        'httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|' +
-        'httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|' +
-        'httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|' +
-        'httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|' +
-        'httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|' +
-        'httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|' +
-        'httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|' +
-        'hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|' +
-        'hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|' +
-        'hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|' +
-        'hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|' +
-        'hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|' +
-        'hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|' +
-        'hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|' +
-        'hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|' +
-        'hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|' +
-        'hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|' +
-        'hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|' +
-        'hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|' +
-        'hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|' +
-        'hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|' +
-        'ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|' +
-        'ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|' +
-        'ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|' +
-        'ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|' +
-        'ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|' +
-        'ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|' +
-        'ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|' +
-        'iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|' +
-        'id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|' +
-        'idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|' +
-        'ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|' +
-        'ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|' +
-        'ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|' +
-        'ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|' +
-        'iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|' +
-        'iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|' +
-        'iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|' +
-        'imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|' +
-        'imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|' +
-        'imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|' +
-        'imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|' +
-        'imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|' +
-        'imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|' +
-        'imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|' +
-        'imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|' +
-        'imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|' +
-        'imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|' +
-        'imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|' +
-        'imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|' +
-        'imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|' +
-        'imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|' +
-        'imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|' +
-        'imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|' +
-        'imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|' +
-        'imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|' +
-        'imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|' +
-        'imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|' +
-        'imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|' +
-        'imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|' +
-        'imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|' +
-        'imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|' +
-        'imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|' +
-        'imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|' +
-        'imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|' +
-        'imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|' +
-        'imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|' +
-        'imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|' +
-        'imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|' +
-        'imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|' +
-        'imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|' +
-        'imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|' +
-        'imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|' +
-        'imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|' +
-        'imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|' +
-        'imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|' +
-        'imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|' +
-        'imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|' +
-        'imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|' +
-        'imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|' +
-        'imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|' +
-        'imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|' +
-        'imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|' +
-        'imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|' +
-        'imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|' +
-        'imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|' +
-        'imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|' +
-        'imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|' +
-        'imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|' +
-        'imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|' +
-        'imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|' +
-        'imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|' +
-        'imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|' +
-        'imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|' +
-        'imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|' +
-        'imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|' +
-        'imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|' +
-        'imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|' +
-        'imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|' +
-        'imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|' +
-        'imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|' +
-        'imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|' +
-        'imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|' +
-        'imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|' +
-        'imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|' +
-        'imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|' +
-        'imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|' +
-        'imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|' +
-        'imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|' +
-        'imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|' +
-        'imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|' +
-        'imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|' +
-        'imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|' +
-        'imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|' +
-        'imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|' +
-        'imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|' +
-        'imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|' +
-        'imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|' +
-        'imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|' +
-        'imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|' +
-        'imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|' +
-        'imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|' +
-        'imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|' +
-        'imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|' +
-        'imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|' +
-        'imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|' +
-        'imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|' +
-        'imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|' +
-        'imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|' +
-        'imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|' +
-        'imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|' +
-        'imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|' +
-        'imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|' +
-        'imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|' +
-        'imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|' +
-        'imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|' +
-        'imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|' +
-        'imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|' +
-        'imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|' +
-        'imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|' +
-        'imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|' +
-        'imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|' +
-        'imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|' +
-        'imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|' +
-        'imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|' +
-        'imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|' +
-        'imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|' +
-        'imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|' +
-        'include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|' +
-        'ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|' +
-        'ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|' +
-        'ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|' +
-        'ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|' +
-        'ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|' +
-        'inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|' +
-        'intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|' +
-        'is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|' +
-        'is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|' +
-        'iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|' +
-        'iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|' +
-        'jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|' +
-        'json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|' +
-        'kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|' +
-        'kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|' +
-        'ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|' +
-        'ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|' +
-        'ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|' +
-        'ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|' +
-        'ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|' +
-        'libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|' +
-        'limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|' +
-        'lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|' +
-        'm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|' +
-        'm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|' +
-        'm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|' +
-        'm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|' +
-        'mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|' +
-        'mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|' +
-        'mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|' +
-        'maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|' +
-        'maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|' +
-        'maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|' +
-        'maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|' +
-        'maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|' +
-        'maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|' +
-        'maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|' +
-        'maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|' +
-        'maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|' +
-        'maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|' +
-        'maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|' +
-        'maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|' +
-        'maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|' +
-        'maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|' +
-        'maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|' +
-        'mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|' +
-        'mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|' +
-        'mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|' +
-        'mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|' +
-        'mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|' +
-        'mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|' +
-        'mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|' +
-        'mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|' +
-        'mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|' +
-        'mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|' +
-        'mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|' +
-        'mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|' +
-        'mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|' +
-        'mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|' +
-        'mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|' +
-        'ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|' +
-        'mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|' +
-        'mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|' +
-        'mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|' +
-        'mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|' +
-        'mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|' +
-        'msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|' +
-        'msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|' +
-        'msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|' +
-        'msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|' +
-        'msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|' +
-        'msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|' +
-        'msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|' +
-        'mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|' +
-        'mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|' +
-        'mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|' +
-        'mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|' +
-        'mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|' +
-        'mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|' +
-        'mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|' +
-        'mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|' +
-        'mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|' +
-        'mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|' +
-        'mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|' +
-        'mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|' +
-        'mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|' +
-        'mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' +
-        'mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|' +
-        'mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|' +
-        'mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|' +
-        'ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|' +
-        'ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|' +
-        'ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|' +
-        'ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|' +
-        'ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|' +
-        'ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|' +
-        'ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|' +
-        'ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|' +
-        'ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|' +
-        'ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|' +
-        'ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|' +
-        'ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|' +
-        'ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|' +
-        'ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|' +
-        'ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|' +
-        'ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|' +
-        'ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|' +
-        'ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|' +
-        'ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|' +
-        'ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|' +
-        'ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|' +
-        'ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|' +
-        'newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|' +
-        'newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|' +
-        'newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|' +
-        'newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|' +
-        'newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|' +
-        'newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|' +
-        'newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|' +
-        'newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|' +
-        'newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|' +
-        'newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|' +
-        'newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|' +
-        'newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|' +
-        'newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|' +
-        'newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|' +
-        'newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|' +
-        'newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|' +
-        'newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|' +
-        'newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|' +
-        'newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|' +
-        'notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|' +
-        'notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|' +
-        'numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|' +
-        'ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|' +
-        'ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|' +
-        'oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|' +
-        'oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|' +
-        'oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|' +
-        'oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|' +
-        'oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|' +
-        'oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|' +
-        'oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|' +
-        'oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|' +
-        'oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|' +
-        'ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|' +
-        'ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|' +
-        'ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|' +
-        'ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|' +
-        'ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|' +
-        'octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|' +
-        'odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|' +
-        'odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|' +
-        'odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|' +
-        'odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|' +
-        'odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|' +
-        'openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|' +
-        'openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|' +
-        'openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|' +
-        'openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|' +
-        'openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|' +
-        'openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|' +
-        'openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|' +
-        'openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|' +
-        'openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|' +
-        'openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|' +
-        'openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|' +
-        'outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|' +
-        'ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|' +
-        'ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|' +
-        'ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|' +
-        'parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|' +
-        'pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|' +
-        'pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|' +
-        'pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|' +
-        'pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|' +
-        'pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|' +
-        'pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|' +
-        'pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|' +
-        'pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|' +
-        'pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|' +
-        'pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|' +
-        'pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|' +
-        'pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|' +
-        'pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|' +
-        'pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|' +
-        'pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|' +
-        'pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|' +
-        'pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|' +
-        'pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|' +
-        'pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|' +
-        'pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|' +
-        'pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|' +
-        'pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|' +
-        'pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|' +
-        'pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|' +
-        'pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|' +
-        'pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|' +
-        'pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|' +
-        'pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|' +
-        'pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|' +
-        'pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|' +
-        'pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|' +
-        'pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|' +
-        'pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|' +
-        'pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|' +
-        'pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|' +
-        'php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|' +
-        'png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|' +
-        'posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|' +
-        'posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|' +
-        'posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|' +
-        'preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|' +
-        'printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|' +
-        'printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|' +
-        'printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|' +
-        'printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|' +
-        'printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|' +
-        'ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|' +
-        'ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|' +
-        'ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|' +
-        'ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|' +
-        'ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|' +
-        'ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|' +
-        'ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|' +
-        'ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|' +
-        'ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|' +
-        'pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|' +
-        'pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|' +
-        'pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|' +
-        'px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|' +
-        'px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|' +
-        'px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|' +
-        'radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|' +
-        'radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|' +
-        'radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|' +
-        'radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|' +
-        'rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|' +
-        'readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|' +
-        'readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|' +
-        'readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|' +
-        'recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|' +
-        'recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|' +
-        'reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|' +
-        'regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|' +
-        'resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|' +
-        'rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|' +
-        'rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|' +
-        'runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|' +
-        'runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|' +
-        'runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|' +
-        'runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|' +
-        'samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|' +
-        'samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|' +
-        'sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|' +
-        'sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|' +
-        'sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|' +
-        'sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|' +
-        'sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|' +
-        'sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|' +
-        'sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|' +
-        'sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|' +
-        'sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|' +
-        'sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|' +
-        'sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|' +
-        'sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|' +
-        'sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|' +
-        'sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|' +
-        'sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|' +
-        'sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|' +
-        'sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|' +
-        'sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|' +
-        'sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|' +
-        'sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|' +
-        'session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|' +
-        'session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|' +
-        'session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|' +
-        'session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|' +
-        'set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|' +
-        'setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|' +
-        'shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|' +
-        'similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|' +
-        'snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|' +
-        'snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|' +
-        'snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|' +
-        'soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|' +
-        'socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|' +
-        'socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|' +
-        'socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|' +
-        'solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|' +
-        'solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|' +
-        'solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|' +
-        'spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|' +
-        'splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|' +
-        'splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|' +
-        'sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|' +
-        'sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|' +
-        'sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|' +
-        'sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|' +
-        'sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|' +
-        'sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|' +
-        'ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|' +
-        'ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|' +
-        'ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|' +
-        'ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|' +
-        'stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|' +
-        'stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|' +
-        'stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|' +
-        'stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|' +
-        'stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|' +
-        'stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|' +
-        'stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|' +
-        'stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|' +
-        'stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|' +
-        'stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|' +
-        'stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|' +
-        'stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|' +
-        'str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|' +
-        'stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|' +
-        'stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|' +
-        'stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|' +
-        'stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|' +
-        'stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|' +
-        'stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|' +
-        'stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|' +
-        'stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|' +
-        'stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|' +
-        'strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|' +
-        'svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|' +
-        'svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|' +
-        'svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|' +
-        'svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|' +
-        'svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|' +
-        'svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|' +
-        'swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|' +
-        'swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|' +
-        'swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|' +
-        'swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|' +
-        'swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|' +
-        'swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|' +
-        'swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|' +
-        'swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|' +
-        'swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|' +
-        'swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|' +
-        'swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|' +
-        'swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|' +
-        'swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|' +
-        'sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|' +
-        'sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|' +
-        'sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|' +
-        'sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|' +
-        'tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|' +
-        'tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|' +
-        'time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|' +
-        'timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|' +
-        'tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|' +
-        'ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|' +
-        'udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|' +
-        'udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|' +
-        'uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|' +
-        'urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|' +
-        'variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|' +
-        'variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|' +
-        'variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|' +
-        'vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|' +
-        'vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|' +
-        'vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|' +
-        'w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|' +
-        'wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|' +
-        'win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|' +
-        'win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|' +
-        'wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|' +
-        'wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|' +
-        'wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|' +
-        'wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|' +
-        'xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|' +
-        'xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|' +
-        'xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|' +
-        'xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|' +
-        'xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|' +
-        'xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|' +
-        'xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|' +
-        'xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|' +
-        'xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|' +
-        'xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|' +
-        'xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|' +
-        'xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|' +
-        'xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|' +
-        'xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|' +
-        'xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|' +
-        'xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|' +
-        'xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|' +
-        'xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|' +
-        'xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|' +
-        'xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|' +
-        'xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|' +
-        'xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|' +
-        'yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|' +
-        'yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|' +
-        'yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|' +
-        'yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|' +
-        'zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|' +
-        'ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|' +
-        'ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|' +
-        'ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|' +
-        'ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|' +
-        'ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|' +
-        'ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type').split('|')
-    );
-    var keywords = lang.arrayToMap(
-        ('abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|' +
-        'endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|' +
-        'public|static|switch|throw|try|use|var|while|xor').split('|')
-    );
-    var languageConstructs = lang.arrayToMap(
-        ('die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')
-    );
-
-    var builtinConstants = lang.arrayToMap(
-        ('true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__').split('|')
-    );
-
-    var builtinVariables = lang.arrayToMap(
-        ('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|' +
-        '$http_response_header|$argc|$argv').split('|')
-    );
-    var builtinFunctionsDeprecated = lang.arrayToMap(
-        ('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|' +
-        'com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|' +
-        'cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|' +
-        'hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|' +
-        'maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|' +
-        'mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|' +
-        'mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|' +
-        'mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|' +
-        'mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|' +
-        'mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' +
-        'mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|' +
-        'ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|' +
-        'ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|' +
-        'ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|' +
-        'ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|' +
-        'ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|' +
-        'PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|' +
-        'PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|' +
-        'PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|' +
-        'PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|' +
-        'PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|' +
-        'PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|' +
-        'PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|' +
-        'PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|' +
-        'px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister' +
-        'set_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|' +
-        'sql_regcase').split('|')
-    );
-
-    var keywordsDeprecated = lang.arrayToMap(
-        ('cfunction|old_function').split('|')
-    );
-
-    var futureReserved = lang.arrayToMap([]);
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : /(?:#|\/\/)(?:[^?]|\?[^>])*/
-            },
-            docComment.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string.regexp",
-                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"
-            }, {
-                token : "string", // " string start
-                regex : '"',
-                next : "qqstring"
-            }, {
-                token : "string", // ' string start
-                regex : "'",
-                next : "qstring"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0[xX][0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : "constant.language", // constants
-                regex : "\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|" +
-                        "ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|" +
-                        "HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|" +
-                        "L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|" +
-                        "VERSION))|__COMPILER_HALT_OFFSET__)\\b"
-            }, {
-                token : ["keyword", "text", "support.class"],
-                regex : "\\b(new)(\\s+)(\\w+)"
-            }, {
-                token : ["support.class", "keyword.operator"],
-                regex : "\\b(\\w+)(::)"
-            }, {
-                token : "constant.language", // constants
-                regex : "\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|" +
-                        "SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|" +
-                        "O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|" +
-                        "R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|" +
-                        "YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|" +
-                        "ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|" +
-                        "T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|" +
-                        "HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|" +
-                        "I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|" +
-                        "O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|" +
-                        "L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|" +
-                        "M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|" +
-                        "OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" +
-                        "P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" +
-                        "RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|" +
-                        "T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"
-            }, {
-                token : function(value) {
-                    if (keywords.hasOwnProperty(value))
-                        return "keyword";
-                    else if (builtinConstants.hasOwnProperty(value))
-                        return "constant.language";
-                    else if (builtinVariables.hasOwnProperty(value))
-                        return "variable.language";
-                    else if (futureReserved.hasOwnProperty(value))
-                        return "invalid.illegal";
-                    else if (builtinFunctions.hasOwnProperty(value))
-                        return "support.function";
-                    else if (value == "debugger")
-                        return "invalid.deprecated";
-                    else
-                        if(value.match(/^(\$[a-zA-Z][a-zA-Z0-9_]*|self|parent)$/))
-                            return "variable";
-                        return "identifier";
-                },
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                onMatch : function(value, currentSate, state) {
-                    value = value.substr(3);
-                    if (value[0] == "'" || value[0] == '"')
-                        value = value.slice(1, -1);
-                    state.unshift(this.next, value);
-                    return "markup.list";
-                },
-                regex : /<<<(?:\w+|'\w+'|"\w+")$/,
-                next: "heredoc"
-            }, {
-                token : "keyword.operator",
-                regex : "::|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "heredoc" : [
-            {
-                onMatch : function(value, currentSate, stack) {
-                    if (stack[1]  + ";" != value)
-                        return "string";
-                    stack.shift();
-                    stack.shift();
-                    return "markup.list"
-                },
-                regex : "^\\w+;$",
-                next: "start"
-            }, {
-                token: "string",
-                regex : ".*",
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-        "qqstring" : [
-            {
-                token : "constant.language.escape",
-                regex : '\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'
-            }, {
-                token : "constant.language.escape",
-                regex : /\$[\w]+(?:\[[\w\]+]|=>\w+)?/
-            }, {
-                token : "constant.language.escape",
-                regex : /\$\{[^"\}]+\}?/           // this is wrong but ok for now
-            },
-            {token : "string", regex : '"', next : "start"},
-            {defaultToken : "string"}
-        ],
-        "qstring" : [
-            {token : "constant.language.escape", regex : /\\['\\]/},
-            {token : "string", regex : "'", next : "start"},
-            {defaultToken : "string"}
-        ]
-    };
-
-    this.embedRules(DocCommentHighlightRules, "doc-",
-        [ DocCommentHighlightRules.getEndRule("start") ]);
-};
-
-oop.inherits(PhpLangHighlightRules, TextHighlightRules);
-
-
-var PhpHighlightRules = function() {
-    HtmlHighlightRules.call(this);
-
-    for (var i in this.$rules) {
-        this.$rules[i].unshift({
-            token : "support.php_tag", // php open tag
-            regex : "<\\?(?:php|=)?",
-            push  : "php-start"
-        });
-    }
-
-    this.embedRules(PhpLangHighlightRules, "php-");
-
-    this.$rules["php-start"].unshift({
-        token : "support.php_tag", // php close tag
-        regex : "\\?>",
-        next  : "pop"
-    });
-    this.normalizeRules();
-};
-
-oop.inherits(PhpHighlightRules, HtmlHighlightRules);
-
-exports.PhpHighlightRules = PhpHighlightRules;
-exports.PhpLangHighlightRules = PhpLangHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/html_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
-var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
-var xmlUtil = require("./xml_util");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var tagMap = lang.createMap({
-    a           : 'anchor',
-    button 	    : 'form',
-    form        : 'form',
-    img         : 'image',
-    input       : 'form',
-    label       : 'form',
-    script      : 'script',
-    select      : 'form',
-    textarea    : 'form',
-    style       : 'style',
-    table       : 'table',
-    tbody       : 'table',
-    td          : 'table',
-    tfoot       : 'table',
-    th          : 'table',
-    tr          : 'table'
-});
-
-var HtmlHighlightRules = function() {
-    this.$rules = {
-        start : [{
-            token : "text",
-            regex : "<\\!\\[CDATA\\[",
-            next : "cdata"
-        }, {
-            token : "xml-pe",
-            regex : "<\\?.*?\\?>"
-        }, {
-            token : "comment",
-            regex : "<\\!--",
-            next : "comment"
-        }, {
-            token : "xml-pe",
-            regex : "<\\!.*?>"
-        }, {
-            token : "meta.tag",
-            regex : "<(?=script\\b)",
-            next : "script"
-        }, {
-            token : "meta.tag",
-            regex : "<(?=style\\b)",
-            next : "style"
-        }, {
-            token : "meta.tag", // opening tag
-            regex : "<\\/?(?=\\S)",
-            next : "tag"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        }, {
-            token : "constant.character.entity",
-            regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
-        }],
-    
-        cdata : [ {
-            token : "text",
-            regex : "\\]\\]>",
-            next : "start"
-        } ],
-
-        comment : [ {
-            token : "comment",
-            regex : ".*?-->",
-            next : "start"
-        }, {
-            defaultToken : "comment"
-        } ]
-    };
-    
-    xmlUtil.tag(this.$rules, "tag", "start", tagMap);
-    xmlUtil.tag(this.$rules, "style", "css-start", tagMap);
-    xmlUtil.tag(this.$rules, "script", "js-start", tagMap);
-    
-    this.embedRules(JavaScriptHighlightRules, "js-", [{
-        token: "comment",
-        regex: "\\/\\/.*(?=<\\/script>)",
-        next: "tag"
-    }, {
-        token: "meta.tag",
-        regex: "<\\/(?=script)",
-        next: "tag"
-    }]);
-    
-    this.embedRules(CssHighlightRules, "css-", [{
-        token: "meta.tag",
-        regex: "<\\/(?=style)",
-        next: "tag"
-    }]);
-};
-
-oop.inherits(HtmlHighlightRules, TextHighlightRules);
-
-exports.HtmlHighlightRules = HtmlHighlightRules;
-});
-
-define('ace/mode/css_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index";
-var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
-var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";
-var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";
-var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
-
-var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
-var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
-var pseudoClasses  = exports.pseudoClasses =  "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
-
-var CssHighlightRules = function() {
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": supportFunction,
-        "support.constant": supportConstant,
-        "support.type": supportType,
-        "support.constant.color": supportConstantColor,
-        "support.constant.fonts": supportConstantFonts
-    }, "text", true);
-
-    var base_ruleset = [
-        {
-            token : "comment", // multi line comment
-            regex : "\\/\\*",
-            next : "ruleset_comment"
-        }, {
-            token : "string", // single line
-            regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-        }, {
-            token : "string", // single line
-            regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-        }, {
-            token : ["constant.numeric", "keyword"],
-            regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"
-        }, {
-            token : "constant.numeric",
-            regex : numRe
-        }, {
-            token : "constant.numeric",  // hex6 color
-            regex : "#[a-f0-9]{6}"
-        }, {
-            token : "constant.numeric", // hex3 color
-            regex : "#[a-f0-9]{3}"
-        }, {
-            token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
-            regex : pseudoElements
-        }, {
-            token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
-            regex : pseudoClasses
-        }, {
-            token : ["support.function", "string", "support.function"],
-            regex : "(url\\()(.*)(\\))"
-        }, {
-            token : keywordMapper,
-            regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
-        }, {
-            caseInsensitive: true
-        }
-      ];
-
-    var ruleset = lang.copyArray(base_ruleset);
-    ruleset.unshift({
-        token : "paren.rparen",
-        regex : "\\}",
-        next:   "start"
-    });
-
-    var media_ruleset = lang.copyArray( base_ruleset );
-    media_ruleset.unshift({
-        token : "paren.rparen",
-        regex : "\\}",
-        next:   "media"
-    });
-
-    var base_comment = [{
-          token : "comment", // comment spanning whole line
-          regex : ".+"
-    }];
-
-    var comment = lang.copyArray(base_comment);
-    comment.unshift({
-          token : "comment", // closing comment
-          regex : ".*?\\*\\/",
-          next : "start"
-    });
-
-    var media_comment = lang.copyArray(base_comment);
-    media_comment.unshift({
-          token : "comment", // closing comment
-          regex : ".*?\\*\\/",
-          next : "media"
-    });
-
-    var ruleset_comment = lang.copyArray(base_comment);
-    ruleset_comment.unshift({
-          token : "comment", // closing comment
-          regex : ".*?\\*\\/",
-          next : "ruleset"
-    });
-
-    this.$rules = {
-        "start" : [{
-            token : "comment", // multi line comment
-            regex : "\\/\\*",
-            next : "comment"
-        }, {
-            token: "paren.lparen",
-            regex: "\\{",
-            next:  "ruleset"
-        }, {
-            token: "string",
-            regex: "@.*?{",
-            next:  "media"
-        },{
-            token: "keyword",
-            regex: "#[a-z0-9-_]+"
-        },{
-            token: "variable",
-            regex: "\\.[a-z0-9-_]+"
-        },{
-            token: "string",
-            regex: ":[a-z0-9-_]+"
-        },{
-            token: "constant",
-            regex: "[a-z0-9-_]+"
-        },{
-            caseInsensitive: true
-        }],
-
-        "media" : [ {
-            token : "comment", // multi line comment
-            regex : "\\/\\*",
-            next : "media_comment"
-        }, {
-            token: "paren.lparen",
-            regex: "\\{",
-            next:  "media_ruleset"
-        },{
-            token: "string",
-            regex: "\\}",
-            next:  "start"
-        },{
-            token: "keyword",
-            regex: "#[a-z0-9-_]+"
-        },{
-            token: "variable",
-            regex: "\\.[a-z0-9-_]+"
-        },{
-            token: "string",
-            regex: ":[a-z0-9-_]+"
-        },{
-            token: "constant",
-            regex: "[a-z0-9-_]+"
-        },{
-            caseInsensitive: true
-        }],
-
-        "comment" : comment,
-
-        "ruleset" : ruleset,
-        "ruleset_comment" : ruleset_comment,
-
-        "media_ruleset" : media_ruleset,
-        "media_comment" : media_comment
-    };
-};
-
-oop.inherits(CssHighlightRules, TextHighlightRules);
-
-exports.CssHighlightRules = CssHighlightRules;
-
-});
-
-define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var JavaScriptHighlightRules = function() {
-    var keywordMapper = this.createKeywordMapper({
-        "variable.language":
-            "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|"  + // Constructors
-            "Namespace|QName|XML|XMLList|"                                             + // E4X
-            "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|"   +
-            "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|"                    +
-            "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|"   + // Errors
-            "SyntaxError|TypeError|URIError|"                                          +
-            "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
-            "isNaN|parseFloat|parseInt|"                                               +
-            "JSON|Math|"                                                               + // Other
-            "this|arguments|prototype|window|document"                                 , // Pseudo
-        "keyword":
-            "const|yield|import|get|set|" +
-            "break|case|catch|continue|default|delete|do|else|finally|for|function|" +
-            "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
-            "__parent__|__count__|escape|unescape|with|__proto__|" +
-            "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",
-        "storage.type":
-            "const|let|var|function",
-        "constant.language":
-            "null|Infinity|NaN|undefined",
-        "support.function":
-            "alert",
-        "constant.language.boolean": "true|false"
-    }, "identifier");
-    var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
-    var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
-
-    var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
-        "u[0-9a-fA-F]{4}|" + // unicode
-        "[0-2][0-7]{0,2}|" + // oct
-        "3[0-6][0-7]?|" + // oct
-        "37[0-7]?|" + // oct
-        "[4-7][0-7]?|" + //oct
-        ".)";
-
-    this.$rules = {
-        "no_regex" : [
-            {
-                token : "comment",
-                regex : /\/\/.*$/
-            },
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : /\/\*/,
-                next : "comment"
-            }, {
-                token : "string",
-                regex : "'(?=.)",
-                next  : "qstring"
-            }, {
-                token : "string",
-                regex : '"(?=.)',
-                next  : "qqstring"
-            }, {
-                token : "constant.numeric", // hex
-                regex : /0[xX][0-9a-fA-F]+\b/
-            }, {
-                token : "constant.numeric", // float
-                regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "support.function",
-                    "punctuation.operator", "entity.name.function", "text","keyword.operator"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "entity.name.function", "text",
-                    "keyword.operator", "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "entity.name.function", "text", "keyword.operator", "text", "storage.type",
-                    "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "entity.name.function", "text",
-                    "keyword.operator", "text",
-                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
-                ],
-                regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "entity.name.function", "text", "punctuation.operator",
-                    "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "text", "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(:)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : "keyword",
-                regex : "(?:" + kwBeforeRe + ")\\b",
-                next : "start"
-            }, {
-                token : ["punctuation.operator", "support.function"],
-                regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
-            }, {
-                token : ["punctuation.operator", "support.function.dom"],
-                regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
-            }, {
-                token : ["punctuation.operator", "support.constant"],
-                regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
-            }, {
-                token : ["storage.type", "punctuation.operator", "support.function.firebug"],
-                regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/
-            }, {
-                token : keywordMapper,
-                regex : identifierRe
-            }, {
-                token : "keyword.operator",
-                regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/,
-                next  : "start"
-            }, {
-                token : "punctuation.operator",
-                regex : /\?|\:|\,|\;|\./,
-                next  : "start"
-            }, {
-                token : "paren.lparen",
-                regex : /[\[({]/,
-                next  : "start"
-            }, {
-                token : "paren.rparen",
-                regex : /[\])}]/
-            }, {
-                token : "keyword.operator",
-                regex : /\/=?/,
-                next  : "start"
-            }, {
-                token: "comment",
-                regex: /^#!.*$/
-            }
-        ],
-        "start": [
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment_regex_allowed"
-            }, {
-                token : "comment",
-                regex : "\\/\\/.*$",
-                next : "start"
-            }, {
-                token: "string.regexp",
-                regex: "\\/",
-                next: "regex"
-            }, {
-                token : "text",
-                regex : "\\s+|^$",
-                next : "start"
-            }, {
-                token: "empty",
-                regex: "",
-                next: "no_regex"
-            }
-        ],
-        "regex": [
-            {
-                token: "regexp.keyword.operator",
-                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
-            }, {
-                token: "string.regexp",
-                regex: "/\\w*",
-                next: "no_regex"
-            }, {
-                token : "invalid",
-                regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
-            }, {
-                token : "constant.language.escape",
-                regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?]/
-            }, {
-                token : "constant.language.delimiter",
-                regex: /\|/
-            }, {
-                token: "constant.language.escape",
-                regex: /\[\^?/,
-                next: "regex_character_class"
-            }, {
-                token: "empty",
-                regex: "$",
-                next: "no_regex"
-            }, {
-                defaultToken: "string.regexp"
-            }
-        ],
-        "regex_character_class": [
-            {
-                token: "regexp.keyword.operator",
-                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
-            }, {
-                token: "constant.language.escape",
-                regex: "]",
-                next: "regex"
-            }, {
-                token: "constant.language.escape",
-                regex: "-"
-            }, {
-                token: "empty",
-                regex: "$",
-                next: "no_regex"
-            }, {
-                defaultToken: "string.regexp.charachterclass"
-            }
-        ],
-        "function_arguments": [
-            {
-                token: "variable.parameter",
-                regex: identifierRe
-            }, {
-                token: "punctuation.operator",
-                regex: "[, ]+"
-            }, {
-                token: "punctuation.operator",
-                regex: "$"
-            }, {
-                token: "empty",
-                regex: "",
-                next: "no_regex"
-            }
-        ],
-        "comment_regex_allowed" : [
-            {token : "comment", regex : "\\*\\/", next : "start"},
-            {defaultToken : "comment"}
-        ],
-        "comment" : [
-            {token : "comment", regex : "\\*\\/", next : "no_regex"},
-            {defaultToken : "comment"}
-        ],
-        "qqstring" : [
-            {
-                token : "constant.language.escape",
-                regex : escapedRe
-            }, {
-                token : "string",
-                regex : "\\\\$",
-                next  : "qqstring"
-            }, {
-                token : "string",
-                regex : '"|$',
-                next  : "no_regex"
-            }, {
-                defaultToken: "string"
-            }
-        ],
-        "qstring" : [
-            {
-                token : "constant.language.escape",
-                regex : escapedRe
-            }, {
-                token : "string",
-                regex : "\\\\$",
-                next  : "qstring"
-            }, {
-                token : "string",
-                regex : "'|$",
-                next  : "no_regex"
-            }, {
-                defaultToken: "string"
-            }
-        ]
-    };
-
-    this.embedRules(DocCommentHighlightRules, "doc-",
-        [ DocCommentHighlightRules.getEndRule("no_regex") ]);
-};
-
-oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
-
-exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
-});
-
-define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-function string(state) {
-    return [{
-        token : "string",
-        regex : '"',
-        next : state + "_qqstring"
-    }, {
-        token : "string",
-        regex : "'",
-        next : state + "_qstring"
-    }];
-}
-
-function multiLineString(quote, state) {
-    return [
-        {token : "string", regex : quote, next : state},
-        {
-            token : "constant.language.escape",
-            regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" 
-        },
-        {defaultToken : "string"}
-    ];
-}
-
-exports.tag = function(states, name, nextState, tagMap) {
-    states[name] = [{
-        token : "text",
-        regex : "\\s+"
-    }, {
-        
-    token : !tagMap ? "meta.tag.tag-name" : function(value) {
-            if (tagMap[value])
-                return "meta.tag.tag-name." + tagMap[value];
-            else
-                return "meta.tag.tag-name";
-        },
-        regex : "[-_a-zA-Z0-9:]+",
-        next : name + "_embed_attribute_list" 
-    }, {
-        token: "empty",
-        regex: "",
-        next : name + "_embed_attribute_list"
-    }];
-
-    states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list");
-    states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list");
-    
-    states[name + "_embed_attribute_list"] = [{
-        token : "meta.tag.r",
-        regex : "/?>",
-        next : nextState
-    }, {
-        token : "keyword.operator",
-        regex : "="
-    }, {
-        token : "entity.other.attribute-name",
-        regex : "[-_a-zA-Z0-9:]+"
-    }, {
-        token : "constant.numeric", // float
-        regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-    }, {
-        token : "text",
-        regex : "\\s+"
-    }].concat(string(name));
-};
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-powershell.js b/try/ace/mode-powershell.js
deleted file mode 100644
index 4684f14..0000000
--- a/try/ace/mode-powershell.js
+++ /dev/null
@@ -1,618 +0,0 @@
-define('ace/mode/powershell', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/powershell_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var PowershellHighlightRules = require("./powershell_highlight_rules").PowershellHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new PowershellHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode({start: "^\\s*(<#)", end: "^[#\\s]>\\s*$"});
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "#";
-    this.blockComment = {start: "<#", end: "#>"};
-    
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-      
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-
-    this.createWorker = function(session) {
-        return null;
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-define('ace/mode/powershell_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var PowershellHighlightRules = function() {
-
-    var keywords = (
-      "function|if|else|elseif|switch|while|default|for|do|until|break|continue|" +
-       "foreach|return|filter|in|trap|throw|param|begin|process|end"
-    );
-
-    var builtinFunctions = (
-      "Get-Alias|Import-Alias|New-Alias|Set-Alias|Get-AuthenticodeSignature|Set-AuthenticodeSignature|" +
-       "Set-Location|Get-ChildItem|Clear-Item|Get-Command|Measure-Command|Trace-Command|" +
-       "Add-Computer|Checkpoint-Computer|Remove-Computer|Restart-Computer|Restore-Computer|Stop-Computer|" +
-       "Reset-ComputerMachinePassword|Test-ComputerSecureChannel|Add-Content|Get-Content|Set-Content|Clear-Content|" +
-       "Get-Command|Invoke-Command|Enable-ComputerRestore|Disable-ComputerRestore|Get-ComputerRestorePoint|Test-Connection|" +
-       "ConvertFrom-CSV|ConvertTo-CSV|ConvertTo-Html|ConvertTo-Xml|ConvertFrom-SecureString|ConvertTo-SecureString|" +
-       "Copy-Item|Export-Counter|Get-Counter|Import-Counter|Get-Credential|Get-Culture|" +
-       "Get-ChildItem|Get-Date|Set-Date|Remove-Item|Compare-Object|Get-Event|" +
-       "Get-WinEvent|New-Event|Remove-Event|Unregister-Event|Wait-Event|Clear-EventLog|" +
-       "Get-Eventlog|Limit-EventLog|New-Eventlog|Remove-EventLog|Show-EventLog|Write-EventLog|" +
-       "Get-EventSubscriber|Register-EngineEvent|Register-ObjectEvent|Register-WmiEvent|Get-ExecutionPolicy|Set-ExecutionPolicy|" +
-       "Export-Alias|Export-Clixml|Export-Console|Export-Csv|ForEach-Object|Format-Custom|" +
-       "Format-List|Format-Table|Format-Wide|Export-FormatData|Get-FormatData|Get-Item|" +
-       "Get-ChildItem|Get-Help|Add-History|Clear-History|Get-History|Invoke-History|" +
-       "Get-Host|Read-Host|Write-Host|Get-HotFix|Import-Clixml|Import-Csv|" +
-       "Invoke-Command|Invoke-Expression|Get-Item|Invoke-Item|New-Item|Remove-Item|" +
-       "Set-Item|Clear-ItemProperty|Copy-ItemProperty|Get-ItemProperty|Move-ItemProperty|New-ItemProperty|" +
-       "Remove-ItemProperty|Rename-ItemProperty|Set-ItemProperty|Get-Job|Receive-Job|Remove-Job|" +
-       "Start-Job|Stop-Job|Wait-Job|Stop-Process|Update-List|Get-Location|" +
-       "Pop-Location|Push-Location|Set-Location|Send-MailMessage|Add-Member|Get-Member|" +
-       "Move-Item|Compare-Object|Group-Object|Measure-Object|New-Object|Select-Object|" +
-       "Sort-Object|Where-Object|Out-Default|Out-File|Out-GridView|Out-Host|" +
-       "Out-Null|Out-Printer|Out-String|Convert-Path|Join-Path|Resolve-Path|" +
-       "Split-Path|Test-Path|Get-Pfxcertificate|Pop-Location|Push-Location|Get-Process|" +
-       "Start-Process|Stop-Process|Wait-Process|Enable-PSBreakpoint|Disable-PSBreakpoint|Get-PSBreakpoint|" +
-       "Set-PSBreakpoint|Remove-PSBreakpoint|Get-PSDrive|New-PSDrive|Remove-PSDrive|Get-PSProvider|" +
-       "Set-PSdebug|Enter-PSSession|Exit-PSSession|Export-PSSession|Get-PSSession|Import-PSSession|" +
-       "New-PSSession|Remove-PSSession|Disable-PSSessionConfiguration|Enable-PSSessionConfiguration|Get-PSSessionConfiguration|Register-PSSessionConfiguration|" +
-       "Set-PSSessionConfiguration|Unregister-PSSessionConfiguration|New-PSSessionOption|Add-PsSnapIn|Get-PsSnapin|Remove-PSSnapin|" +
-       "Get-Random|Read-Host|Remove-Item|Rename-Item|Rename-ItemProperty|Select-Object|" +
-       "Select-XML|Send-MailMessage|Get-Service|New-Service|Restart-Service|Resume-Service|" +
-       "Set-Service|Start-Service|Stop-Service|Suspend-Service|Sort-Object|Start-Sleep|" +
-       "ConvertFrom-StringData|Select-String|Tee-Object|New-Timespan|Trace-Command|Get-Tracesource|" +
-       "Set-Tracesource|Start-Transaction|Complete-Transaction|Get-Transaction|Use-Transaction|Undo-Transaction|" +
-       "Start-Transcript|Stop-Transcript|Add-Type|Update-TypeData|Get-Uiculture|Get-Unique|" +
-       "Update-Formatdata|Update-Typedata|Clear-Variable|Get-Variable|New-Variable|Remove-Variable|" +
-       "Set-Variable|New-WebServiceProxy|Where-Object|Write-Debug|Write-Error|Write-Host|" +
-       "Write-Output|Write-Progress|Write-Verbose|Write-Warning|Set-WmiInstance|Invoke-WmiMethod|" +
-       "Get-WmiObject|Remove-WmiObject|Connect-WSMan|Disconnect-WSMan|Test-WSMan|Invoke-WSManAction|" +
-       "Disable-WSManCredSSP|Enable-WSManCredSSP|Get-WSManCredSSP|New-WSManInstance|Get-WSManInstance|Set-WSManInstance|" +
-       "Remove-WSManInstance|Set-WSManQuickConfig|New-WSManSessionOption"
-       );
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": builtinFunctions,
-        "keyword": keywords
-    }, "identifier");
-
-    var binaryOperatorsRe = "eq|ne|ge|gt|lt|le|like|notlike|match|notmatch|replace|contains|notcontains|" +
-                            "ieq|ine|ige|igt|ile|ilt|ilike|inotlike|imatch|inotmatch|ireplace|icontains|inotcontains|" +
-                            "is|isnot|as|" +
-                            "and|or|band|bor|not";
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "#.*$"
-            }, {
-                token : "comment.start",
-                regex : "<#",
-                next : "comment"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0[xX][0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-                token : "constant.language.boolean",
-                regex : "[$](?:[Tt]rue|[Ff]alse)\\b"
-            }, {
-                token : "constant.language",
-                regex : "[$][Nn]ull\\b"
-            }, {
-                token : "variable.instance",
-                regex : "[$][a-zA-Z][a-zA-Z0-9_]*\\b"
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$\\-]*\\b"
-            }, {
-                token : "keyword.operator",
-                regex : "\\-(?:" + binaryOperatorsRe + ")"
-            }, {
-                token : "keyword.operator",
-                regex : "&|\\*|\\+|\\-|\\=|\\+=|\\-="
-            }, {
-                token : "lparen",
-                regex : "[[({]"
-            }, {
-                token : "rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment.end",
-                regex : "#>",
-                next : "start"
-            }, {
-                token : "doc.comment.tag",
-                regex : "^\\.\\w+"
-            }, {
-                token : "comment",
-                regex : "\\w+"
-            }, {
-                token : "comment",
-                regex : "."
-            }
-        ]
-    };
-};
-
-oop.inherits(PowershellHighlightRules, TextHighlightRules);
-
-exports.PowershellHighlightRules = PowershellHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-properties.js b/try/ace/mode-properties.js
deleted file mode 100644
index f0fd15c..0000000
--- a/try/ace/mode-properties.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/properties', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/properties_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var PropertiesHighlightRules = require("./properties_highlight_rules").PropertiesHighlightRules;
-
-var Mode = function() {
-    var highlighter = new PropertiesHighlightRules();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/properties_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var PropertiesHighlightRules = function() {
-
-    var escapeRe = /\\u[0-9a-fA-F]{4}|\\/;
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : /[!#].*$/
-            }, {
-                token : "keyword",
-                regex : /[=:]$/
-            }, {
-                token : "keyword",
-                regex : /[=:]/,
-                next  : "value"
-            }, {
-                token : "constant.language.escape",
-                regex : escapeRe,
-            }, {
-                defaultToken: "variable"
-            }
-        ],
-        "value" : [
-            {
-                regex : /\\$/,
-                token : "string",
-                next : "value"
-            }, {
-                regex : /$/,
-                token : "string",
-                next : "start"
-            }, {
-                token : "constant.language.escape",
-                regex : escapeRe
-            }, {
-                defaultToken: "string"
-            }
-        ]
-    };
-
-};
-
-oop.inherits(PropertiesHighlightRules, TextHighlightRules);
-
-exports.PropertiesHighlightRules = PropertiesHighlightRules;
-});
-
diff --git a/try/ace/mode-python.js b/try/ace/mode-python.js
deleted file mode 100644
index 8954624..0000000
--- a/try/ace/mode-python.js
+++ /dev/null
@@ -1,294 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/python', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/python_highlight_rules', 'ace/mode/folding/pythonic', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules;
-var PythonFoldMode = require("./folding/pythonic").FoldMode;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new PythonHighlightRules().getRules());
-    this.foldingRules = new PythonFoldMode("\\:");
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "#";
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[\:]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    var outdents = {
-        "pass": 1,
-        "return": 1,
-        "raise": 1,
-        "break": 1,
-        "continue": 1
-    };
-    
-    this.checkOutdent = function(state, line, input) {
-        if (input !== "\r\n" && input !== "\r" && input !== "\n")
-            return false;
-
-        var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;
-        
-        if (!tokens)
-            return false;
-        do {
-            var last = tokens.pop();
-        } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
-        
-        if (!last)
-            return false;
-        
-        return (last.type == "keyword" && outdents[last.value]);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        
-        row += 1;
-        var indent = this.$getIndent(doc.getLine(row));
-        var tab = doc.getTabString();
-        if (indent.slice(-tab.length) == tab)
-            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/python_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var PythonHighlightRules = function() {
-
-    var keywords = (
-        "and|as|assert|break|class|continue|def|del|elif|else|except|exec|" +
-        "finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|" +
-        "raise|return|try|while|with|yield"
-    );
-
-    var builtinConstants = (
-        "True|False|None|NotImplemented|Ellipsis|__debug__"
-    );
-
-    var builtinFunctions = (
-        "abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|" +
-        "eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|" +
-        "binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|" +
-        "float|list|raw_input|unichr|callable|format|locals|reduce|unicode|" +
-        "chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|" +
-        "cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|" +
-        "__import__|complex|hash|min|set|apply|delattr|help|next|setattr|" +
-        "buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern"
-    );
-    var keywordMapper = this.createKeywordMapper({
-        "invalid.deprecated": "debugger",
-        "support.function": builtinFunctions,
-        "constant.language": builtinConstants,
-        "keyword": keywords
-    }, "identifier");
-
-    var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?";
-
-    var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
-    var octInteger = "(?:0[oO]?[0-7]+)";
-    var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
-    var binInteger = "(?:0[bB][01]+)";
-    var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
-
-    var exponent = "(?:[eE][+-]?\\d+)";
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + exponent + ")";
-    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
-
-    var stringEscape =  "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment",
-            regex : "#.*$"
-        }, {
-            token : "string",           // multi line """ string start
-            regex : strPre + '"{3}',
-            next : "qqstring3"
-        }, {
-            token : "string",           // " string
-            regex : strPre + '"(?=.)',
-            next : "qqstring"
-        }, {
-            token : "string",           // multi line ''' string start
-            regex : strPre + "'{3}",
-            next : "qstring3"
-        }, {
-            token : "string",           // ' string
-            regex : strPre + "'(?=.)",
-            next : "qstring"
-        }, {
-            token : "constant.numeric", // imaginary
-            regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b"
-        }, {
-            token : "constant.numeric", // float
-            regex : floatNumber
-        }, {
-            token : "constant.numeric", // long integer
-            regex : integer + "[lL]\\b"
-        }, {
-            token : "constant.numeric", // integer
-            regex : integer + "\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\[\\(\\{]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\]\\)\\}]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ],
-        "qqstring3" : [ {
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string", // multi line """ string end
-            regex : '"{3}',
-            next : "start"
-        }, {
-            defaultToken : "string"
-        } ],
-        "qstring3" : [ {
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string",  // multi line ''' string end
-            regex : "'{3}",
-            next : "start"
-        }, {
-            defaultToken : "string"
-        } ],
-        "qqstring" : [{
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string",
-            regex : "\\\\$",
-            next  : "qqstring"
-        }, {
-            token : "string",
-            regex : '"|$',
-            next  : "start"
-        }, {
-            defaultToken: "string"
-        }],
-        "qstring" : [{
-            token : "constant.language.escape",
-            regex : stringEscape
-        }, {
-            token : "string",
-            regex : "\\\\$",
-            next  : "qstring"
-        }, {
-            token : "string",
-            regex : "'|$",
-            next  : "start"
-        }, {
-            defaultToken: "string"
-        }]
-    };
-};
-
-oop.inherits(PythonHighlightRules, TextHighlightRules);
-
-exports.PythonHighlightRules = PythonHighlightRules;
-});
-
-define('ace/mode/folding/pythonic', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(markers) {
-    this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$");
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, match.index);
-            if (match[2])
-                return this.indentationBlock(session, row, match.index + match[2].length);
-            return this.indentationBlock(session, row);
-        }
-    }
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-r.js b/try/ace/mode-r.js
deleted file mode 100644
index d14aa4f..0000000
--- a/try/ace/mode-r.js
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * r.js
- *
- * Copyright (C) 2009-11 by RStudio, Inc.
- *
- * The Initial Developer of the Original Code is
- * Ajax.org B.V.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * This program is licensed to you under the terms of version 3 of the
- * GNU Affero General Public License. This program is distributed WITHOUT
- * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
- * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
- *
- */
-define('ace/mode/r', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/r_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/unicode'], function(require, exports, module) {
-   
-
-   var Range = require("../range").Range;
-   var oop = require("../lib/oop");
-   var TextMode = require("./text").Mode;
-   var Tokenizer = require("../tokenizer").Tokenizer;
-   var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-   var RHighlightRules = require("./r_highlight_rules").RHighlightRules;
-   var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-   var unicode = require("../unicode");
-
-   var Mode = function()
-   {
-      this.$tokenizer = new Tokenizer(new RHighlightRules().getRules());
-      this.$outdent = new MatchingBraceOutdent();
-   };
-   oop.inherits(Mode, TextMode);
-
-   (function()
-   {
-      this.lineCommentStart = "#";
-   }).call(Mode.prototype);
-   exports.Mode = Mode;
-});
-define('ace/mode/r_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules', 'ace/mode/tex_highlight_rules'], function(require, exports, module) {
-
-   var oop = require("../lib/oop");
-   var lang = require("../lib/lang");
-   var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-   var TexHighlightRules = require("./tex_highlight_rules").TexHighlightRules;
-
-   var RHighlightRules = function()
-   {
-
-      var keywords = lang.arrayToMap(
-            ("function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass")
-                  .split("|")
-            );
-
-      var buildinConstants = lang.arrayToMap(
-            ("NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|" +
-             "NA_complex_").split("|")
-            );
-
-      this.$rules = {
-         "start" : [
-            {
-               token : "comment.sectionhead",
-               regex : "#+(?!').*(?:----|====|####)\\s*$"
-            },
-            {
-               token : "comment",
-               regex : "#+'",
-               next : "rd-start"
-            },
-            {
-               token : "comment",
-               regex : "#.*$"
-            },
-            {
-               token : "string", // multi line string start
-               regex : '["]',
-               next : "qqstring"
-            },
-            {
-               token : "string", // multi line string start
-               regex : "[']",
-               next : "qstring"
-            },
-            {
-               token : "constant.numeric", // hex
-               regex : "0[xX][0-9a-fA-F]+[Li]?\\b"
-            },
-            {
-               token : "constant.numeric", // explicit integer
-               regex : "\\d+L\\b"
-            },
-            {
-               token : "constant.numeric", // number
-               regex : "\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b"
-            },
-            {
-               token : "constant.numeric", // number with leading decimal
-               regex : "\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b"
-            },
-            {
-               token : "constant.language.boolean",
-               regex : "(?:TRUE|FALSE|T|F)\\b"
-            },
-            {
-               token : "identifier",
-               regex : "`.*?`"
-            },
-            {
-               onMatch : function(value) {
-                  if (keywords[value])
-                     return "keyword";
-                  else if (buildinConstants[value])
-                     return "constant.language";
-                  else if (value == '...' || value.match(/^\.\.\d+$/))
-                     return "variable.language";
-                  else
-                     return "identifier";
-               },
-               regex : "[a-zA-Z.][a-zA-Z0-9._]*\\b"
-            },
-            {
-               token : "keyword.operator",
-               regex : "%%|>=|<=|==|!=|\\->|<\\-|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||~|\\$|:"
-            },
-            {
-               token : "keyword.operator", // infix operators
-               regex : "%.*?%"
-            },
-            {
-               token : "paren.keyword.operator",
-               regex : "[[({]"
-            },
-            {
-               token : "paren.keyword.operator",
-               regex : "[\\])}]"
-            },
-            {
-               token : "text",
-               regex : "\\s+"
-            }
-         ],
-         "qqstring" : [
-            {
-               token : "string",
-               regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
-               next : "start"
-            },
-            {
-               token : "string",
-               regex : '.+'
-            }
-         ],
-         "qstring" : [
-            {
-               token : "string",
-               regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
-               next : "start"
-            },
-            {
-               token : "string",
-               regex : '.+'
-            }
-         ]
-      };
-
-      var rdRules = new TexHighlightRules("comment").getRules();
-      for (var i = 0; i < rdRules["start"].length; i++) {
-         rdRules["start"][i].token += ".virtual-comment";
-      }
-
-      this.addRules(rdRules, "rd-");
-      this.$rules["rd-start"].unshift({
-          token: "text",
-          regex: "^",
-          next: "start"
-      });
-      this.$rules["rd-start"].unshift({
-         token : "keyword",
-         regex : "@(?!@)[^ ]*"
-      });
-      this.$rules["rd-start"].unshift({
-         token : "comment",
-         regex : "@@"
-      });
-      this.$rules["rd-start"].push({
-         token : "comment",
-         regex : "[^%\\\\[({\\])}]+"
-      });
-   };
-
-   oop.inherits(RHighlightRules, TextHighlightRules);
-
-   exports.RHighlightRules = RHighlightRules;
-});
-define('ace/mode/tex_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var TexHighlightRules = function(textClass) {
-
-    if (!textClass)
-        textClass = "text";
-
-    this.$rules = {
-        "start" : [
-	        {
-	            token : "comment",
-	            regex : "%.*$"
-	        }, {
-	            token : textClass, // non-command
-	            regex : "\\\\[$&%#\\{\\}]"
-	        }, {
-	            token : "keyword", // command
-	            regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b",
-               next : "nospell"
-	        }, {
-	            token : "keyword", // command
-	            regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])"
-	        }, {
-               token : "paren.keyword.operator",
-	            regex : "[[({]"
-	        }, {
-               token : "paren.keyword.operator",
-	            regex : "[\\])}]"
-	        }, {
-	            token : textClass,
-	            regex : "\\s+"
-	        }
-        ],
-        "nospell" : [
-           {
-               token : "comment",
-               regex : "%.*$",
-               next : "start"
-           }, {
-               token : "nospell." + textClass, // non-command
-               regex : "\\\\[$&%#\\{\\}]"
-           }, {
-               token : "keyword", // command
-               regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b"
-           }, {
-               token : "keyword", // command
-               regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])",
-               next : "start"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "[[({]"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "[\\])]"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "}",
-               next : "start"
-           }, {
-               token : "nospell." + textClass,
-               regex : "\\s+"
-           }, {
-               token : "nospell." + textClass,
-               regex : "\\w+"
-           }
-        ]
-    };
-};
-
-oop.inherits(TexHighlightRules, TextHighlightRules);
-
-exports.TexHighlightRules = TexHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-rdoc.js b/try/ace/mode-rdoc.js
deleted file mode 100644
index d79775b..0000000
--- a/try/ace/mode-rdoc.js
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * rdoc.js
- *
- * Copyright (C) 2009-11 by RStudio, Inc.
- *
- * This program is licensed to you under the terms of version 3 of the
- * GNU Affero General Public License. This program is distributed WITHOUT
- * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
- * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
- *
- */
-define('ace/mode/rdoc', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/rdoc_highlight_rules', 'ace/mode/matching_brace_outdent'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var RDocHighlightRules = require("./rdoc_highlight_rules").RDocHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-
-var Mode = function(suppressHighlighting) {
-	this.$tokenizer = new Tokenizer(new RDocHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.getNextLineIndent = function(state, line, tab) {
-        return this.$getIndent(line);
-    };
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-define('ace/mode/rdoc_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules', 'ace/mode/latex_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var LaTeXHighlightRules = require("./latex_highlight_rules");
-
-var RDocHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [
-	        {
-	            token : "comment",
-	            regex : "%.*$"
-	        }, {
-	            token : "text", // non-command
-	            regex : "\\\\[$&%#\\{\\}]"
-	        }, {
-	            token : "keyword", // command
-	            regex : "\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\b",
-               next : "nospell"
-	        }, {
-	            token : "keyword", // command
-	            regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])"
-	        }, {
-               token : "paren.keyword.operator",
-	            regex : "[[({]"
-	        }, {
-               token : "paren.keyword.operator",
-	            regex : "[\\])}]"
-	        }, {
-	            token : "text",
-	            regex : "\\s+"
-	        }
-        ],
-        "nospell" : [
-           {
-               token : "comment",
-               regex : "%.*$",
-               next : "start"
-           }, {
-               token : "nospell.text", // non-command
-               regex : "\\\\[$&%#\\{\\}]"
-           }, {
-               token : "keyword", // command
-               regex : "\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\b"
-           }, {
-               token : "keyword", // command
-               regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])",
-               next : "start"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "[[({]"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "[\\])]"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "}",
-               next : "start"
-           }, {
-               token : "nospell.text",
-               regex : "\\s+"
-           }, {
-               token : "nospell.text",
-               regex : "\\w+"
-           }
-        ]
-    };
-};
-
-oop.inherits(RDocHighlightRules, TextHighlightRules);
-
-exports.RDocHighlightRules = RDocHighlightRules;
-});
-define('ace/mode/latex_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var LatexHighlightRules = function() {   
-    this.$rules = {
-        "start" : [{
-            token : "keyword",
-            regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)"
-        }, {
-            token : "lparen",
-            regex : "[[({]"
-        }, {
-            token : "rparen",
-            regex : "[\\])}]"
-        }, {
-            token : "string",
-            regex : "\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"
-        }, {
-            token : "comment",
-            regex : "%.*$"
-        }]
-    };
-};
-
-oop.inherits(LatexHighlightRules, TextHighlightRules);
-
-exports.LatexHighlightRules = LatexHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-ruby.js b/try/ace/mode-ruby.js
deleted file mode 100644
index f0f26dc..0000000
--- a/try/ace/mode-ruby.js
+++ /dev/null
@@ -1,431 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/ruby', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/ruby_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/folding/coffee'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var RubyHighlightRules = require("./ruby_highlight_rules").RubyHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-var FoldMode = require("./folding/coffee").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new RubyHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.foldingRules = new FoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-
-    this.lineCommentStart = "#";
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            var startingClassOrMethod = line.match(/^\s*(class|def)\s.*$/);
-            var startingDoBlock = line.match(/.*do(\s*|\s+\|.*\|\s*)$/);
-            var startingConditional = line.match(/^\s*(if|else)\s*/)
-            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return /^\s+end$/.test(line + input) || /^\s+}$/.test(line + input) || /^\s+else$/.test(line + input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        var indent = this.$getIndent(doc.getLine(row));
-        var tab = doc.getTabString();
-        if (indent.slice(-tab.length) == tab)
-            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/ruby_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var constantOtherSymbol = exports.constantOtherSymbol = {
-    token : "constant.other.symbol.ruby", // symbol
-    regex : "[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"
-};
-
-var qString = exports.qString = {
-    token : "string", // single line
-    regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-};
-
-var qqString = exports.qqString = {
-    token : "string", // single line
-    regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-};
-
-var tString = exports.tString = {
-    token : "string", // backtick string
-    regex : "[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"
-};
-
-var constantNumericHex = exports.constantNumericHex = {
-    token : "constant.numeric", // hex
-    regex : "0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"
-};
-
-var constantNumericFloat = exports.constantNumericFloat = {
-    token : "constant.numeric", // float
-    regex : "[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"
-};
-
-var RubyHighlightRules = function() {
-
-    var builtinFunctions = (
-        "abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|" +
-        "assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|" +
-        "assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|" +
-        "assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|" +
-        "assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|" +
-        "assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|" +
-        "attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|" +
-        "caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|" +
-        "exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|" +
-        "gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|" +
-        "link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|" +
-        "p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|" +
-        "raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|" +
-        "set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|" +
-        "throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|" +
-        "render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|" +
-        "content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|" +
-        "fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|" +
-        "time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|" +
-        "select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|" +
-        "file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|" +
-        "protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|" +
-        "send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|" +
-        "validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|" +
-        "validates_inclusion_of|validates_numericality_of|validates_with|validates_each|" +
-        "authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|" +
-        "filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|" +
-        "translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|" +
-        "cache|expire_fragment|expire_cache_for|observe|cache_sweeper|" +
-        "has_many|has_one|belongs_to|has_and_belongs_to_many"
-    );
-
-    var keywords = (
-        "alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|" +
-        "__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|" +
-        "redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield"
-    );
-
-    var buildinConstants = (
-        "true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|" +
-        "RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING"
-    );
-
-    var builtinVariables = (
-        "\$DEBUG|\$defout|\$FILENAME|\$LOAD_PATH|\$SAFE|\$stdin|\$stdout|\$stderr|\$VERBOSE|" +
-        "$!|root_url|flash|session|cookies|params|request|response|logger|self"
-    );
-
-    var keywordMapper = this.$keywords = this.createKeywordMapper({
-        "keyword": keywords,
-        "constant.language": buildinConstants,
-        "variable.language": builtinVariables,
-        "support.function": builtinFunctions,
-        "invalid.deprecated": "debugger" // TODO is this a remnant from js mode?
-    }, "identifier");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "#.*$"
-            }, {
-                token : "comment", // multi line comment
-                regex : "^=begin(?:$|\\s.*$)",
-                next : "comment"
-            }, {
-                token : "string.regexp",
-                regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"
-            },
-
-            qString,
-            qqString,
-            tString,
-
-            {
-                token : "text", // namespaces aren't symbols
-                regex : "::"
-            }, {
-                token : "variable.instance", // instance variable
-                regex : "@{1,2}[a-zA-Z_\\d]+"
-            }, {
-                token : "support.class", // class name
-                regex : "[A-Z][a-zA-Z_\\d]+"
-            },
-
-            constantOtherSymbol,
-            constantNumericHex,
-            constantNumericFloat,
-
-            {
-                token : "constant.language.boolean",
-                regex : "(?:true|false)\\b"
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                token : "punctuation.separator.key-value",
-                regex : "=>"
-            }, {
-                stateName: "heredoc",
-                onMatch : function(value, currentState, stack) {
-                    var next = value[2] == '-' ? "indentedHeredoc" : "heredoc";
-                    var tokens = value.split(this.splitRegex);
-                    stack.push(next, tokens[3]);
-                    return [
-                        {type:"constant", value: tokens[1]},
-                        {type:"string", value: tokens[2]},
-                        {type:"support.class", value: tokens[3]},
-                        {type:"string", value: tokens[4]}
-                    ];
-                },
-                regex : "(<<-?)(['\"`]?)([\\w]+)(['\"`]?)",
-                rules: {
-                    heredoc: [{
-                        onMatch:  function(value, currentState, stack) {
-                            if (value == stack[1]) {
-                                stack.shift();
-                                stack.shift();
-                                return "support.class";
-                            }
-                            return "string";
-                        },
-                        regex: ".*$",
-                        next: "start"
-                    }],
-                    indentedHeredoc: [{
-                        token: "string",
-                        regex: "^ +"
-                    }, {
-                        onMatch:  function(value, currentState, stack) {
-                            if (value == stack[1]) {
-                                stack.shift();
-                                stack.shift();
-                                return "support.class";
-                            }
-                            return "string";
-                        },
-                        regex: ".*$",
-                        next: "start"
-                    }]
-                }
-            }, {
-                token : "keyword.operator",
-                regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : "^=end(?:$|\\s.*$)",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ]
-    };
-
-    this.normalizeRules();
-};
-
-oop.inherits(RubyHighlightRules, TextHighlightRules);
-
-exports.RubyHighlightRules = RubyHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-rust.js b/try/ace/mode-rust.js
deleted file mode 100644
index 759bca0..0000000
--- a/try/ace/mode-rust.js
+++ /dev/null
@@ -1,204 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- *
- *
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/rust', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/rust_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var RustHighlightRules = require("./rust_highlight_rules").RustHighlightRules;
-var FoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    var highlighter = new RustHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "/\\*";
-    this.blockComment = {start: "/*", end: "*/"};
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/rust_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var RustHighlightRules = function() {
-
-    this.$rules = { start: 
-       [ { token: 'variable.other.source.rust',
-           regex: '\'[a-zA-Z_][a-zA-Z0-9_]*[^\\\']' },
-         { token: 'string.quoted.single.source.rust',
-           regex: '\'',
-           push: 
-            [ { token: 'string.quoted.single.source.rust',
-                regex: '\'',
-                next: 'pop' },
-              { include: '#rust_escaped_character' },
-              { defaultToken: 'string.quoted.single.source.rust' } ] },
-         { token: 'string.quoted.double.source.rust',
-           regex: '"',
-           push: 
-            [ { token: 'string.quoted.double.source.rust',
-                regex: '"',
-                next: 'pop' },
-              { include: '#rust_escaped_character' },
-              { defaultToken: 'string.quoted.double.source.rust' } ] },
-         { token: [ 'keyword.source.rust', 'meta.function.source.rust',
-              'entity.name.function.source.rust', 'meta.function.source.rust' ],
-           regex: '\\b(fn)(\\s+)([a-zA-Z_][a-zA-Z0-9_][\\w\\:,+ \\\'<>]*)(\\s*\\()' },
-         { token: 'support.constant', regex: '\\b[a-zA-Z_][\\w\\d]*::' },
-         { token: 'keyword.source.rust',
-           regex: '\\b(?:as|assert|break|claim|const|copy|Copy|do|drop|else|extern|fail|for|if|impl|in|let|log|loop|match|mod|module|move|mut|Owned|priv|pub|pure|ref|return|unchecked|unsafe|use|while|mod|Send|static|trait|class|struct|enum|type)\\b' },
-         { token: 'storage.type.source.rust',
-           regex: '\\b(?:Self|m32|m64|m128|f80|f16|f128|int|uint|float|char|bool|u8|u16|u32|u64|f32|f64|i8|i16|i32|i64|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\b' },
-         { token: 'variable.language.source.rust', regex: '\\bself\\b' },
-         { token: 'keyword.operator',
-            regex: '!|\\$|\\*|\\-\\-|\\-|\\+\\+|\\+|-->|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|/=|%=|\\+=|\\-=|&=|\\^=|,|;' },
-         { token: 'constant.language.source.rust',
-           regex: '\\b(?:true|false|Some|None|Left|Right|Ok|Err)\\b' },
-         { token: 'support.constant.source.rust',
-           regex: '\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\b' },
-         { token: 'meta.preprocessor.source.rust',
-           regex: '\\b\\w\\(\\w\\)*!|#\\[[\\w=\\(\\)_]+\\]\\b' },
-         { token: 'constant.numeric.integer.source.rust',
-           regex: '\\b(?:[0-9][0-9_]*|[0-9][0-9_]*(?:u|u8|u16|u32|u64)|[0-9][0-9_]*(?:i|i8|i16|i32|i64))\\b' },
-         { token: 'constant.numeric.hex.source.rust',
-           regex: '\\b(?:0x[a-fA-F0-9_]+|0x[a-fA-F0-9_]+(?:u|u8|u16|u32|u64)|0x[a-fA-F0-9_]+(?:i|i8|i16|i32|i64))\\b' },
-         { token: 'constant.numeric.binary.source.rust',
-           regex: '\\b(?:0b[01_]+|0b[01_]+(?:u|u8|u16|u32|u64)|0b[01_]+(?:i|i8|i16|i32|i64))\\b' },
-         { token: 'constant.numeric.float.source.rust',
-           regex: '[0-9][0-9_]*(?:f32|f64|f)|[0-9][0-9_]*[eE][+-]=[0-9_]+|[0-9][0-9_]*[eE][+-]=[0-9_]+(?:f32|f64|f)|[0-9][0-9_]*\\.[0-9_]+|[0-9][0-9_]*\\.[0-9_]+(?:f32|f64|f)|[0-9][0-9_]*\\.[0-9_]+%[eE][+-]=[0-9_]+|[0-9][0-9_]*\\.[0-9_]+%[eE][+-]=[0-9_]+(?:f32|f64|f)' },
-         { token: 'comment.line.documentation.source.rust',
-           regex: '//!.*$',
-           push_: 
-            [ { token: 'comment.line.documentation.source.rust',
-                regex: '$',
-                next: 'pop' },
-              { defaultToken: 'comment.line.documentation.source.rust' } ] },
-         { token: 'comment.line.double-dash.source.rust',
-           regex: '//.*$',
-           push_: 
-            [ { token: 'comment.line.double-dash.source.rust',
-                regex: '$',
-                next: 'pop' },
-              { defaultToken: 'comment.line.double-dash.source.rust' } ] },
-         { token: 'comment.block.source.rust',
-           regex: '/\\*',
-           push: 
-            [ { token: 'comment.block.source.rust',
-                regex: '\\*/',
-                next: 'pop' },
-              { defaultToken: 'comment.block.source.rust' } ] } ],
-      '#rust_escaped_character': 
-       [ { token: 'constant.character.escape.source.rust',
-           regex: '\\\\(?:x[\\da-fA-F]{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)' } ] }
-    
-    this.normalizeRules();
-};
-
-RustHighlightRules.metaData = { fileTypes: [ 'rs', 'rc' ],
-      foldingStartMarker: '^.*\\bfn\\s*(\\w+\\s*)?\\([^\\)]*\\)(\\s*\\{[^\\}]*)?\\s*$',
-      foldingStopMarker: '^\\s*\\}',
-      name: 'Rust',
-      scopeName: 'source.rust' }
-
-
-oop.inherits(RustHighlightRules, TextHighlightRules);
-
-exports.RustHighlightRules = RustHighlightRules;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-sass.js b/try/ace/mode-sass.js
deleted file mode 100644
index 76f94c9..0000000
--- a/try/ace/mode-sass.js
+++ /dev/null
@@ -1,442 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/sass', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/sass_highlight_rules', 'ace/mode/folding/coffee'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var SassHighlightRules = require("./sass_highlight_rules").SassHighlightRules;
-var FoldMode = require("./folding/coffee").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new SassHighlightRules().getRules());
-    this.foldingRules = new FoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {   
-    this.lineCommentStart = "//";
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/sass_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/scss_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules;
-
-var SassHighlightRules = function() {
-    ScssHighlightRules.call(this);
-    var start = this.$rules.start;
-    if (start[1].token == "comment") {
-        start.splice(1, 1, {
-            onMatch: function(value, currentState, stack) {
-                stack.unshift(this.next, -1, value.length - 2, currentState);
-                return "comment";
-            },
-            regex: /^\s*\/\*/,
-            next: "comment"
-        }, {
-            token: "error.invalid",
-            regex: "/\\*|[{;}]"
-        }, {
-            token: "support.type",
-            regex: /^\s*:[\w\-]+\s/
-        });
-        
-        this.$rules.comment = [
-            {regex: /^\s*/, onMatch: function(value, currentState, stack) {
-                if (stack[1] === -1)
-                    stack[1] = Math.max(stack[2], value.length - 1);
-                if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift();
-                    this.next = stack.shift();
-                    return "text";
-                } else {
-                    this.next = "";
-                    return "comment";
-                }
-            }, next: "start"},
-            {defaultToken: "comment"}
-        ]
-    }
-};
-
-oop.inherits(SassHighlightRules, ScssHighlightRules);
-
-exports.SassHighlightRules = SassHighlightRules;
-
-});
-
-define('ace/mode/scss_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var ScssHighlightRules = function() {
-    
-    var properties = lang.arrayToMap( (function () {
-
-        var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|");
-        
-        var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + 
-             "background-size|binding|border-bottom-colors|border-left-colors|" + 
-             "border-right-colors|border-top-colors|border-end|border-end-color|" + 
-             "border-end-style|border-end-width|border-image|border-start|" + 
-             "border-start-color|border-start-style|border-start-width|box-align|" + 
-             "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + 
-             "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + 
-             "column-rule-width|column-rule-style|column-rule-color|float-edge|" + 
-             "font-feature-settings|font-language-override|force-broken-image-icon|" + 
-             "image-region|margin-end|margin-start|opacity|outline|outline-color|" + 
-             "outline-offset|outline-radius|outline-radius-bottomleft|" + 
-             "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + 
-             "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + 
-             "tab-size|text-blink|text-decoration-color|text-decoration-line|" + 
-             "text-decoration-style|transform|transform-origin|transition|" + 
-             "transition-delay|transition-duration|transition-property|" + 
-             "transition-timing-function|user-focus|user-input|user-modify|user-select|" +
-             "window-shadow|border-radius").split("|");
-        
-        var properties = ("azimuth|background-attachment|background-color|background-image|" +
-            "background-position|background-repeat|background|border-bottom-color|" +
-            "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
-            "border-color|border-left-color|border-left-style|border-left-width|" +
-            "border-left|border-right-color|border-right-style|border-right-width|" +
-            "border-right|border-spacing|border-style|border-top-color|" +
-            "border-top-style|border-top-width|border-top|border-width|border|bottom|" +
-            "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
-            "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
-            "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
-            "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
-            "letter-spacing|line-height|list-style-image|list-style-position|" +
-            "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
-            "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
-            "min-width|opacity|orphans|outline-color|" +
-            "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
-            "padding-left|padding-right|padding-top|padding|page-break-after|" +
-            "page-break-before|page-break-inside|page|pause-after|pause-before|" +
-            "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" +
-            "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
-            "stress|table-layout|text-align|text-decoration|text-indent|" +
-            "text-shadow|text-transform|top|unicode-bidi|vertical-align|" +
-            "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
-            "z-index").split("|");
-        var ret = [];
-        for (var i=0, ln=browserPrefix.length; i<ln; i++) {
-            Array.prototype.push.apply(
-                ret,
-                (( browserPrefix[i] + prefixProperties.join("|" + browserPrefix[i]) ).split("|"))
-            );
-        }
-        Array.prototype.push.apply(ret, prefixProperties);
-        Array.prototype.push.apply(ret, properties);
-        
-        return ret;
-        
-    })() );
-    
-
-
-    var functions = lang.arrayToMap(
-        ("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|" +
-         "alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|" + 
-         "floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|" + 
-         "nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|" +
-         "scale_color|transparentize|type_of|unit|unitless|unqoute").split("|")
-    );
-
-    var constants = lang.arrayToMap(
-        ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
-        "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
-        "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
-        "decimal-leading-zero|decimal|default|disabled|disc|" +
-        "distribute-all-lines|distribute-letter|distribute-space|" +
-        "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
-        "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
-        "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
-        "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
-        "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
-        "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
-        "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
-        "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
-        "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
-        "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
-        "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
-        "solid|square|static|strict|super|sw-resize|table-footer-group|" +
-        "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
-        "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
-        "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
-        "zero").split("|")
-    );
-
-    var colors = lang.arrayToMap(
-        ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
-        "purple|red|silver|teal|white|yellow").split("|")
-    );
-    
-    var keywords = lang.arrayToMap(
-        ("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare").split("|")
-    )
-    
-    var tags = lang.arrayToMap(
-        ("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|" + 
-         "big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|" + 
-         "command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|" + 
-         "figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|" + 
-         "header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|" + 
-         "link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|" + 
-         "option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|" + 
-         "small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|" + 
-         "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|")
-    );
-
-    var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "\\/\\/.*$"
-            },
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // multi line string start
-                regex : '["].*\\\\$',
-                next : "qqstring"
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "string", // multi line string start
-                regex : "['].*\\\\$",
-                next : "qstring"
-            }, {
-                token : "constant.numeric",
-                regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
-            }, {
-                token : "constant.numeric", // hex6 color
-                regex : "#[a-f0-9]{6}"
-            }, {
-                token : "constant.numeric", // hex3 color
-                regex : "#[a-f0-9]{3}"
-            }, {
-                token : "constant.numeric",
-                regex : numRe
-            }, {
-                token : ["support.function", "string", "support.function"],
-                regex : "(url\\()(.*)(\\))"
-            }, {
-                token : function(value) {
-                    if (properties.hasOwnProperty(value.toLowerCase()))
-                        return "support.type";
-                    if (keywords.hasOwnProperty(value))
-                        return "keyword";
-                    else if (constants.hasOwnProperty(value))
-                        return "constant.language";
-                    else if (functions.hasOwnProperty(value))
-                        return "support.function";
-                    else if (colors.hasOwnProperty(value.toLowerCase()))
-                        return "support.constant.color";
-                    else if (tags.hasOwnProperty(value.toLowerCase()))
-                        return "variable.language";
-                    else
-                        return "text";
-                },
-                regex : "\\-?[@a-z_][@a-z0-9_\\-]*"
-            }, {
-                token : "variable",
-                regex : "[a-z_\\-$][a-z0-9_\\-$]*\\b"
-            }, {
-                token: "variable.language",
-                regex: "#[a-z0-9-_]+"
-            }, {
-                token: "variable.language",
-                regex: "\\.[a-z0-9-_]+"
-            }, {
-                token: "variable.language",
-                regex: ":[a-z0-9-_]+"
-            }, {
-                token: "constant",
-                regex: "[a-z0-9-_]+"
-            }, {
-                token : "keyword.operator",
-                regex : "<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }, {
-                caseInsensitive: true
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-        "qqstring" : [
-            {
-                token : "string",
-                regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ],
-        "qstring" : [
-            {
-                token : "string",
-                regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ]
-    };
-};
-
-oop.inherits(ScssHighlightRules, TextHighlightRules);
-
-exports.ScssHighlightRules = ScssHighlightRules;
-
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-scad.js b/try/ace/mode-scad.js
deleted file mode 100644
index 8188cb7..0000000
--- a/try/ace/mode-scad.js
+++ /dev/null
@@ -1,670 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/scad', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scad_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var scadHighlightRules = require("./scad_highlight_rules").scadHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new scadHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-        var endState = tokenizedLine.state;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        } else if (state == "doc-start") {
-            if (endState == "start") {
-                return "";
-            }
-            var match = line.match(/^\s*(\/?)\*/);
-            if (match) {
-                if (match[1]) {
-                    indent += " ";
-                }
-                indent += "* ";
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/scad_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var scadHighlightRules = function() {
-    var keywordMapper = this.createKeywordMapper({
-        "variable.language": "this",
-        "keyword": "module|if|else|for",
-        "constant.language": "NULL"
-    }, "identifier");
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "\\/\\/.*$"
-            },
-            DocCommentHighlightRules.getStartRule("start"),
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // multi line string start
-                regex : '["].*\\\\$',
-                next : "qqstring"
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "string", // multi line string start
-                regex : "['].*\\\\$",
-                next : "qstring"
-            }, {
-                token : "constant.numeric", // hex
-                regex : "0[xX][0-9a-fA-F]+\\b"
-            }, {
-                token : "constant.numeric", // float
-                regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-            }, {
-              token : "constant", // <CONSTANT>
-              regex : "<[a-zA-Z0-9.]+>"
-            }, {
-              token : "keyword", // pre-compiler directivs
-              regex : "(?:use|include)"
-            }, {
-                token : keywordMapper,
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                token : "keyword.operator",
-                regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|new|delete|typeof|void)"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-        "qqstring" : [
-            {
-                token : "string",
-                regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ],
-        "qstring" : [
-            {
-                token : "string",
-                regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ]
-    };
-    
-    this.embedRules(DocCommentHighlightRules, "doc-",
-        [ DocCommentHighlightRules.getEndRule("start") ]);
-};
-
-oop.inherits(scadHighlightRules, TextHighlightRules);
-
-exports.scadHighlightRules = scadHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-scheme.js b/try/ace/mode-scheme.js
deleted file mode 100644
index 773d637..0000000
--- a/try/ace/mode-scheme.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2012, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- * 
- * NalaGinrut@gmail.com
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/scheme', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scheme_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var SchemeHighlightRules = require("./scheme_highlight_rules").SchemeHighlightRules;
-
-var Mode = function() {
-    var highlighter = new SchemeHighlightRules();
-    
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-       
-    this.lineCommentStart = ";";
-    
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/scheme_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var SchemeHighlightRules = function() {
-    var keywordControl = "case|do|let|loop|if|else|when";
-    var keywordOperator = "eq?|eqv?|equal?|and|or|not|null?";
-    var constantLanguage = "#t|#f";
-    var supportFunctions = "cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load";
-
-    var keywordMapper = this.createKeywordMapper({
-        "keyword.control": keywordControl,
-        "keyword.operator": keywordOperator,
-        "constant.language": constantLanguage,
-        "support.function": supportFunctions
-    }, "identifier", true);
-
-    this.$rules = 
-        {
-    "start": [
-        {
-            token : "comment",
-            regex : ";.*$"
-        },
-        {
-            "token": ["storage.type.function-type.scheme", "text", "entity.name.function.scheme"],
-            "regex": "(?:\\b(?:(define|define-syntax|define-macro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)"
-        },
-        {
-            "token": "punctuation.definition.constant.character.scheme",
-            "regex": "#:\\S+"
-        },
-        {
-            "token": ["punctuation.definition.variable.scheme", "variable.other.global.scheme", "punctuation.definition.variable.scheme"],
-            "regex": "(\\*)(\\S*)(\\*)"
-        },
-        {
-            "token" : "constant.numeric", // hex
-            "regex" : "#[xXoObB][0-9a-fA-F]+"
-        }, 
-        {
-            "token" : "constant.numeric", // float
-            "regex" : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?"
-        },
-        {
-                "token" : keywordMapper,
-                "regex" : "[a-zA-Z_#][a-zA-Z0-9_\\-\\?\\!\\*]*"
-        },
-        {
-            "token" : "string",
-            "regex" : '"(?=.)',
-            "next"  : "qqstring"
-        }
-    ],
-    "qqstring": [
-        {
-            "token": "constant.character.escape.scheme",
-            "regex": "\\\\."
-        },
-        {
-            "token" : "string",
-            "regex" : '[^"\\\\]+',
-            "merge" : true
-        }, {
-            "token" : "string",
-            "regex" : "\\\\$",
-            "next"  : "qqstring",
-            "merge" : true
-        }, {
-            "token" : "string",
-            "regex" : '"|$',
-            "next"  : "start",
-            "merge" : true
-        }
-    ]
-}
-
-};
-
-oop.inherits(SchemeHighlightRules, TextHighlightRules);
-
-exports.SchemeHighlightRules = SchemeHighlightRules;
-});
diff --git a/try/ace/mode-scss.js b/try/ace/mode-scss.js
deleted file mode 100644
index 060808a..0000000
--- a/try/ace/mode-scss.js
+++ /dev/null
@@ -1,832 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/scss', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scss_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var CssBehaviour = require("./behaviour/css").CssBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CssBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-   
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-        var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        var match = line.match(/^.*\{\s*$/);
-        if (match) {
-            indent += tab;
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/scss_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var ScssHighlightRules = function() {
-    
-    var properties = lang.arrayToMap( (function () {
-
-        var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|");
-        
-        var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + 
-             "background-size|binding|border-bottom-colors|border-left-colors|" + 
-             "border-right-colors|border-top-colors|border-end|border-end-color|" + 
-             "border-end-style|border-end-width|border-image|border-start|" + 
-             "border-start-color|border-start-style|border-start-width|box-align|" + 
-             "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + 
-             "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + 
-             "column-rule-width|column-rule-style|column-rule-color|float-edge|" + 
-             "font-feature-settings|font-language-override|force-broken-image-icon|" + 
-             "image-region|margin-end|margin-start|opacity|outline|outline-color|" + 
-             "outline-offset|outline-radius|outline-radius-bottomleft|" + 
-             "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + 
-             "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + 
-             "tab-size|text-blink|text-decoration-color|text-decoration-line|" + 
-             "text-decoration-style|transform|transform-origin|transition|" + 
-             "transition-delay|transition-duration|transition-property|" + 
-             "transition-timing-function|user-focus|user-input|user-modify|user-select|" +
-             "window-shadow|border-radius").split("|");
-        
-        var properties = ("azimuth|background-attachment|background-color|background-image|" +
-            "background-position|background-repeat|background|border-bottom-color|" +
-            "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" +
-            "border-color|border-left-color|border-left-style|border-left-width|" +
-            "border-left|border-right-color|border-right-style|border-right-width|" +
-            "border-right|border-spacing|border-style|border-top-color|" +
-            "border-top-style|border-top-width|border-top|border-width|border|bottom|" +
-            "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
-            "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
-            "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
-            "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
-            "letter-spacing|line-height|list-style-image|list-style-position|" +
-            "list-style-type|list-style|margin-bottom|margin-left|margin-right|" +
-            "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" +
-            "min-width|opacity|orphans|outline-color|" +
-            "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" +
-            "padding-left|padding-right|padding-top|padding|page-break-after|" +
-            "page-break-before|page-break-inside|page|pause-after|pause-before|" +
-            "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" +
-            "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" +
-            "stress|table-layout|text-align|text-decoration|text-indent|" +
-            "text-shadow|text-transform|top|unicode-bidi|vertical-align|" +
-            "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
-            "z-index").split("|");
-        var ret = [];
-        for (var i=0, ln=browserPrefix.length; i<ln; i++) {
-            Array.prototype.push.apply(
-                ret,
-                (( browserPrefix[i] + prefixProperties.join("|" + browserPrefix[i]) ).split("|"))
-            );
-        }
-        Array.prototype.push.apply(ret, prefixProperties);
-        Array.prototype.push.apply(ret, properties);
-        
-        return ret;
-        
-    })() );
-    
-
-
-    var functions = lang.arrayToMap(
-        ("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|" +
-         "alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|" + 
-         "floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|" + 
-         "nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|" +
-         "scale_color|transparentize|type_of|unit|unitless|unqoute").split("|")
-    );
-
-    var constants = lang.arrayToMap(
-        ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" +
-        "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" +
-        "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" +
-        "decimal-leading-zero|decimal|default|disabled|disc|" +
-        "distribute-all-lines|distribute-letter|distribute-space|" +
-        "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" +
-        "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" +
-        "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" +
-        "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" +
-        "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" +
-        "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" +
-        "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" +
-        "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" +
-        "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" +
-        "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" +
-        "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" +
-        "solid|square|static|strict|super|sw-resize|table-footer-group|" +
-        "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" +
-        "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" +
-        "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" +
-        "zero").split("|")
-    );
-
-    var colors = lang.arrayToMap(
-        ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" +
-        "purple|red|silver|teal|white|yellow").split("|")
-    );
-    
-    var keywords = lang.arrayToMap(
-        ("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare").split("|")
-    )
-    
-    var tags = lang.arrayToMap(
-        ("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|" + 
-         "big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|" + 
-         "command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|" + 
-         "figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|" + 
-         "header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|" + 
-         "link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|" + 
-         "option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|" + 
-         "small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|" + 
-         "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|")
-    );
-
-    var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
-
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "\\/\\/.*$"
-            },
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // multi line string start
-                regex : '["].*\\\\$',
-                next : "qqstring"
-            }, {
-                token : "string", // single line
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "string", // multi line string start
-                regex : "['].*\\\\$",
-                next : "qstring"
-            }, {
-                token : "constant.numeric",
-                regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"
-            }, {
-                token : "constant.numeric", // hex6 color
-                regex : "#[a-f0-9]{6}"
-            }, {
-                token : "constant.numeric", // hex3 color
-                regex : "#[a-f0-9]{3}"
-            }, {
-                token : "constant.numeric",
-                regex : numRe
-            }, {
-                token : ["support.function", "string", "support.function"],
-                regex : "(url\\()(.*)(\\))"
-            }, {
-                token : function(value) {
-                    if (properties.hasOwnProperty(value.toLowerCase()))
-                        return "support.type";
-                    if (keywords.hasOwnProperty(value))
-                        return "keyword";
-                    else if (constants.hasOwnProperty(value))
-                        return "constant.language";
-                    else if (functions.hasOwnProperty(value))
-                        return "support.function";
-                    else if (colors.hasOwnProperty(value.toLowerCase()))
-                        return "support.constant.color";
-                    else if (tags.hasOwnProperty(value.toLowerCase()))
-                        return "variable.language";
-                    else
-                        return "text";
-                },
-                regex : "\\-?[@a-z_][@a-z0-9_\\-]*"
-            }, {
-                token : "variable",
-                regex : "[a-z_\\-$][a-z0-9_\\-$]*\\b"
-            }, {
-                token: "variable.language",
-                regex: "#[a-z0-9-_]+"
-            }, {
-                token: "variable.language",
-                regex: "\\.[a-z0-9-_]+"
-            }, {
-                token: "variable.language",
-                regex: ":[a-z0-9-_]+"
-            }, {
-                token: "constant",
-                regex: "[a-z0-9-_]+"
-            }, {
-                token : "keyword.operator",
-                regex : "<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }, {
-                caseInsensitive: true
-            }
-        ],
-        "comment" : [
-            {
-                token : "comment", // closing comment
-                regex : ".*?\\*\\/",
-                next : "start"
-            }, {
-                token : "comment", // comment spanning whole line
-                regex : ".+"
-            }
-        ],
-        "qqstring" : [
-            {
-                token : "string",
-                regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ],
-        "qstring" : [
-            {
-                token : "string",
-                regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ]
-    };
-};
-
-oop.inherits(ScssHighlightRules, TextHighlightRules);
-
-exports.ScssHighlightRules = ScssHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/behaviour/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-var CssBehaviour = function () {
-
-    this.inherit(CstyleBehaviour);
-
-    this.add("colon", "insertion", function (state, action, editor, session, text) {
-        if (text === ':') {
-            var cursor = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, cursor.row, cursor.column);
-            var token = iterator.getCurrentToken();
-            if (token && token.value.match(/\s+/)) {
-                token = iterator.stepBackward();
-            }
-            if (token && token.type === 'support.type') {
-                var line = session.doc.getLine(cursor.row);
-                var rightChar = line.substring(cursor.column, cursor.column + 1);
-                if (rightChar === ':') {
-                    return {
-                       text: '',
-                       selection: [1, 1]
-                    }
-                }
-                if (!line.substring(cursor.column).match(/^\s*;/)) {
-                    return {
-                       text: ':;',
-                       selection: [1, 1]
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("colon", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected === ':') {
-            var cursor = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, cursor.row, cursor.column);
-            var token = iterator.getCurrentToken();
-            if (token && token.value.match(/\s+/)) {
-                token = iterator.stepBackward();
-            }
-            if (token && token.type === 'support.type') {
-                var line = session.doc.getLine(range.start.row);
-                var rightChar = line.substring(range.end.column, range.end.column + 1);
-                if (rightChar === ';') {
-                    range.end.column ++;
-                    return range;
-                }
-            }
-        }
-    });
-
-    this.add("semicolon", "insertion", function (state, action, editor, session, text) {
-        if (text === ';') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar === ';') {
-                return {
-                   text: '',
-                   selection: [1, 1]
-                }
-            }
-        }
-    });
-
-}
-oop.inherits(CssBehaviour, CstyleBehaviour);
-
-exports.CssBehaviour = CssBehaviour;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-sh.js b/try/ace/mode-sh.js
deleted file mode 100644
index 95e9d58..0000000
--- a/try/ace/mode-sh.js
+++ /dev/null
@@ -1,204 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/sh', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/sh_highlight_rules', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new ShHighlightRules().getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-   
-    this.lineCommentStart = "#";
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[\:]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    var outdents = {
-        "pass": 1,
-        "return": 1,
-        "raise": 1,
-        "break": 1,
-        "continue": 1
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        if (input !== "\r\n" && input !== "\r" && input !== "\n")
-            return false;
-
-        var tokens = this.$tokenizer.getLineTokens(line.trim(), state).tokens;
-
-        if (!tokens)
-            return false;
-        do {
-            var last = tokens.pop();
-        } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
-
-        if (!last)
-            return false;
-
-        return (last.type == "keyword" && outdents[last.value]);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-
-        row += 1;
-        var indent = this.$getIndent(doc.getLine(row));
-        var tab = doc.getTabString();
-        if (indent.slice(-tab.length) == tab)
-            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/sh_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var reservedKeywords = exports.reservedKeywords = (
-        '!|{|}|case|do|done|elif|else|'+
-        'esac|fi|for|if|in|then|until|while|'+
-        '&|;|export|local|read|typeset|unset|'+
-        'elif|select|set'
-    );
-
-var languageConstructs = exports.languageConstructs = (
-    '[|]|alias|bg|bind|break|builtin|'+
-     'cd|command|compgen|complete|continue|'+
-     'dirs|disown|echo|enable|eval|exec|'+
-     'exit|fc|fg|getopts|hash|help|history|'+
-     'jobs|kill|let|logout|popd|printf|pushd|'+
-     'pwd|return|set|shift|shopt|source|'+
-     'suspend|test|times|trap|type|ulimit|'+
-     'umask|unalias|wait'
-);
-
-var ShHighlightRules = function() {
-    var keywordMapper = this.createKeywordMapper({
-        "keyword": reservedKeywords,
-        "support.function.builtin": languageConstructs,
-        "invalid.deprecated": "debugger"
-    }, "identifier");
-
-    var integer = "(?:(?:[1-9]\\d*)|(?:0))";
-
-    var fraction = "(?:\\.\\d+)";
-    var intPart = "(?:\\d+)";
-    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
-    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + ")";
-    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
-    var fileDescriptor = "(?:&" + intPart + ")";
-
-    var variableName = "[a-zA-Z][a-zA-Z0-9_]*";
-    var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))";
-
-    var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))";
-
-    var func = "(?:" + variableName + "\\s*\\(\\))";
-
-    this.$rules = {
-        "start" : [ {
-            token : ["text", "comment"],
-            regex : /(^|\s)(#.*)$/
-        }, {
-            token : "string",           // " string
-            regex : '"(?:[^\\\\]|\\\\.)*?"'
-        }, {
-            token : "variable.language",
-            regex : builtinVariable
-        }, {
-            token : "variable",
-            regex : variable
-        }, {
-            token : "support.function",
-            regex : func
-        }, {
-            token : "support.function",
-            regex : fileDescriptor
-        }, {
-            token : "string",           // ' string
-            regex : "'(?:[^\\\\]|\\\\.)*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : floatNumber
-        }, {
-            token : "constant.numeric", // integer
-            regex : integer + "\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\[\\(\\{]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\]\\)\\}]"
-        } ]
-    };
-};
-
-oop.inherits(ShHighlightRules, TextHighlightRules);
-
-exports.ShHighlightRules = ShHighlightRules;
-});
diff --git a/try/ace/mode-snippets.js b/try/ace/mode-snippets.js
deleted file mode 100644
index 8d5ef86..0000000
--- a/try/ace/mode-snippets.js
+++ /dev/null
@@ -1,200 +0,0 @@
-define('ace/mode/snippets', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/folding/coffee'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var SnippetHighlightRules = function() {
-
-    var builtins = "SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|" +
-        "LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME";
-
-    this.$rules = {
-        "start" : [
-            {token:"constant.language.escape", regex: /\\[\$}`\\]/},
-            {token:"keyword", regex: "\\$(?:TM_)?(?:" + builtins + ")\\b"},
-            {token:"variable", regex: "\\$\\w+"},
-            {onMatch: function(value, state, stack) {
-                if (stack[1])
-                    stack[1]++;
-                else
-                    stack.unshift(state, 1);
-                return this.tokenName;
-            }, tokenName: "markup.list", regex: "\\${", next: "varDecl"},
-            {onMatch: function(value, state, stack) {
-                if (!stack[1])
-                    return "text";
-                stack[1]--;
-                if (!stack[1])
-                    stack.splice(0,2);
-                return this.tokenName;
-            }, tokenName: "markup.list", regex: "}"},
-            {token: "doc.comment", regex:/^\${2}-{5,}$/}
-        ],
-        "varDecl" : [
-            {regex: /\d+\b/, token: "constant.numeric"},
-            {token:"keyword", regex: "(?:TM_)?(?:" + builtins + ")\\b"},
-            {token:"variable", regex: "\\w+"},
-            {regex: /:/, token: "punctuation.operator", next: "start"},
-            {regex: /\//, token: "string.regex", next: "regexp"},
-            {regex: "", next: "start"}
-        ],
-        "regexp" : [
-            {regex: /\\./, token: "escape"},
-            {regex: /\[/, token: "regex.start", next: "charClass"},
-            {regex: "/", token: "string.regex", next: "format"},
-            {"token": "string.regex", regex:"."}
-        ],
-        charClass : [
-            {regex: "\\.", token: "escape"},
-            {regex: "\\]", token: "regex.end", next: "regexp"},
-            {"token": "string.regex", regex:"."}
-        ],
-        "format" : [
-            {regex: /\\[ulULE]/, token: "keyword"},
-            {regex: /\$\d+/, token: "variable"},
-            {regex: "/[gim]*:?", token: "string.regex", next: "start"},
-            {"token": "string", regex:"."}
-        ]
-    };
-};
-oop.inherits(SnippetHighlightRules, TextHighlightRules);
-
-exports.SnippetHighlightRules = SnippetHighlightRules;
-
-var SnippetGroupHighlightRules = function() {
-    this.$rules = {
-        "start" : [
-			{token: "text", regex: "^\\t", next: "sn-start"},
-			{token:"invalid", regex: /^ \s*/},
-            {token:"comment", regex: /^#.*/},
-            {token:"constant.language.escape", regex: "^regex ", next: "regex"},
-            {token:"constant.language.escape", regex: "^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\b"}
-        ],
-		"regex" : [
-			{token:"text", regex: "\\."},
-			{token:"keyword", regex: "/"},
-			{token:"empty", regex: "$", next: "start"}
-		]
-    };
-	this.embedRules(SnippetHighlightRules, "sn-", [
-		{token: "text", regex: "^\\t", next: "sn-start"},
-		{onMatch: function(value, state, stack) {
-			stack.splice(stack.length);
-			return this.tokenName;
-		}, tokenName: "text", regex: "^(?!\t)", next: "start"},
-	])
-	
-};
-
-oop.inherits(SnippetGroupHighlightRules, TextHighlightRules);
-
-exports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;
-
-var FoldMode = require("./folding/coffee").FoldMode;
-
-var Mode = function() {
-    var highlighter = new SnippetGroupHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.getNextLineIndent = function(state, line, tab) {
-        return this.$getIndent(line);
-    };
-}).call(Mode.prototype);
-exports.Mode = Mode;
-
-
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-sql.js b/try/ace/mode-sql.js
deleted file mode 100644
index e179fac..0000000
--- a/try/ace/mode-sql.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/sql', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/sql_highlight_rules', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new SqlHighlightRules().getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "--";
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/sql_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var SqlHighlightRules = function() {
-
-    var keywords = (
-        "select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" +
-        "when|else|end|type|left|right|join|on|outer|desc|asc"
-    );
-
-    var builtinConstants = (
-        "true|false|null"
-    );
-
-    var builtinFunctions = (
-        "count|min|max|avg|sum|rank|now|coalesce"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": builtinFunctions,
-        "keyword": keywords,
-        "constant.language": builtinConstants
-    }, "identifier", true);
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment",
-            regex : "--.*$"
-        }, {
-            token : "string",           // " string
-            regex : '".*?"'
-        }, {
-            token : "string",           // ' string
-            regex : "'.*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\(]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\)]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ]
-    };
-};
-
-oop.inherits(SqlHighlightRules, TextHighlightRules);
-
-exports.SqlHighlightRules = SqlHighlightRules;
-});
-
diff --git a/try/ace/mode-svg.js b/try/ace/mode-svg.js
deleted file mode 100644
index f4feebd..0000000
--- a/try/ace/mode-svg.js
+++ /dev/null
@@ -1,1441 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/svg', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml', 'ace/mode/javascript', 'ace/tokenizer', 'ace/mode/svg_highlight_rules', 'ace/mode/folding/mixed', 'ace/mode/folding/xml', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var XmlMode = require("./xml").Mode;
-var JavaScriptMode = require("./javascript").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var SvgHighlightRules = require("./svg_highlight_rules").SvgHighlightRules;
-var MixedFoldMode = require("./folding/mixed").FoldMode;
-var XmlFoldMode = require("./folding/xml").FoldMode;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    XmlMode.call(this);
-    
-    this.highlighter = new SvgHighlightRules();
-    this.$tokenizer = new Tokenizer(this.highlighter.getRules());
-    
-    this.$embeds = this.highlighter.getEmbeds();
-    this.createModeDelegates({
-        "js-": JavaScriptMode
-    });
-    
-    this.foldingRules = new MixedFoldMode(new XmlFoldMode({}), {
-        "js-": new CStyleFoldMode()
-    });
-};
-
-oop.inherits(Mode, XmlMode);
-
-(function() {
-
-    this.getNextLineIndent = function(state, line, tab) {
-        return this.$getIndent(line);
-    };
-    
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
-var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
-var XmlFoldMode = require("./folding/xml").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
-    this.$behaviour = new XmlBehaviour();
-    this.foldingRules = new XmlFoldMode();
-};
-
-oop.inherits(Mode, TextMode);
-
-(function() {
-    
-    this.blockComment = {start: "<!--", end: "-->"};
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var xmlUtil = require("./xml_util");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var XmlHighlightRules = function() {
-    this.$rules = {
-        start : [
-            {token : "text", regex : "<\\!\\[CDATA\\[", next : "cdata"},
-            {token : "xml-pe", regex : "<\\?.*?\\?>"},
-            {token : "comment", regex : "<\\!--", next : "comment"},
-            {token : "xml-pe", regex : "<\\!.*?>"},
-            {token : "meta.tag", regex : "<\\/?", next : "tag"},
-            {token : "text", regex : "\\s+"},
-            {
-                token : "constant.character.entity", 
-                regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" 
-            }
-        ],
-        
-        cdata : [
-            {token : "text", regex : "\\]\\]>", next : "start"},
-            {token : "text", regex : "\\s+"},
-            {token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"}
-        ],
-
-        comment : [
-            {token : "comment", regex : ".*?-->", next : "start"},
-            {token : "comment", regex : ".+"}
-        ]
-    };
-    
-    xmlUtil.tag(this.$rules, "tag", "start");
-};
-
-oop.inherits(XmlHighlightRules, TextHighlightRules);
-
-exports.XmlHighlightRules = XmlHighlightRules;
-});
-
-define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-function string(state) {
-    return [{
-        token : "string",
-        regex : '"',
-        next : state + "_qqstring"
-    }, {
-        token : "string",
-        regex : "'",
-        next : state + "_qstring"
-    }];
-}
-
-function multiLineString(quote, state) {
-    return [
-        {token : "string", regex : quote, next : state},
-        {
-            token : "constant.language.escape",
-            regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" 
-        },
-        {defaultToken : "string"}
-    ];
-}
-
-exports.tag = function(states, name, nextState, tagMap) {
-    states[name] = [{
-        token : "text",
-        regex : "\\s+"
-    }, {
-        
-    token : !tagMap ? "meta.tag.tag-name" : function(value) {
-            if (tagMap[value])
-                return "meta.tag.tag-name." + tagMap[value];
-            else
-                return "meta.tag.tag-name";
-        },
-        regex : "[-_a-zA-Z0-9:]+",
-        next : name + "_embed_attribute_list" 
-    }, {
-        token: "empty",
-        regex: "",
-        next : name + "_embed_attribute_list"
-    }];
-
-    states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list");
-    states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list");
-    
-    states[name + "_embed_attribute_list"] = [{
-        token : "meta.tag.r",
-        regex : "/?>",
-        next : nextState
-    }, {
-        token : "keyword.operator",
-        regex : "="
-    }, {
-        token : "entity.other.attribute-name",
-        regex : "[-_a-zA-Z0-9:]+"
-    }, {
-        token : "constant.numeric", // float
-        regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-    }, {
-        token : "text",
-        regex : "\\s+"
-    }].concat(string(name));
-};
-
-});
-
-define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-function hasType(token, type) {
-    var hasType = true;
-    var typeList = token.type.split('.');
-    var needleList = type.split('.');
-    needleList.forEach(function(needle){
-        if (typeList.indexOf(needle) == -1) {
-            hasType = false;
-            return false;
-        }
-    });
-    return hasType;
-}
-
-var XmlBehaviour = function () {
-    
-    this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
-    
-    this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
-        if (text == '>') {
-            var position = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, position.row, position.column);
-            var token = iterator.getCurrentToken();
-            var atCursor = false;
-            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
-                do {
-                    token = iterator.stepBackward();
-                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
-            } else {
-                atCursor = true;
-            }
-            if (!token || !hasType(token, 'meta.tag-name') || iterator.stepBackward().value.match('/')) {
-                return
-            }
-            var tag = token.value;
-            if (atCursor){
-                var tag = tag.substring(0, position.column - token.start);
-            }
-
-            return {
-               text: '>' + '</' + tag + '>',
-               selection: [1, 1]
-            }
-        }
-    });
-
-    this.add('autoindent', 'insertion', function (state, action, editor, session, text) {
-        if (text == "\n") {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChars = line.substring(cursor.column, cursor.column + 2);
-            if (rightChars == '</') {
-                var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
-                var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent,
-                    selection: [1, indent.length, 1, indent.length]
-                }
-            }
-        }
-    });
-    
-}
-oop.inherits(XmlBehaviour, Behaviour);
-
-exports.XmlBehaviour = XmlBehaviour;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var lang = require("../../lib/lang");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-var FoldMode = exports.FoldMode = function(voidElements) {
-    BaseFoldMode.call(this);
-    this.voidElements = voidElements || {};
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var tag = this._getFirstTagInLine(session, row);
-
-        if (tag.closing)
-            return foldStyle == "markbeginend" ? "end" : "";
-
-        if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
-            return "";
-
-        if (tag.selfClosing)
-            return "";
-
-        if (tag.value.indexOf("/" + tag.tagName) !== -1)
-            return "";
-
-        return "start";
-    };
-    
-    this._getFirstTagInLine = function(session, row) {
-        var tokens = session.getTokens(row);
-        var value = "";
-        for (var i = 0; i < tokens.length; i++) {
-            var token = tokens[i];
-            if (token.type.indexOf("meta.tag") === 0)
-                value += token.value;
-            else
-                value += lang.stringRepeat(" ", token.value.length);
-        }
-        
-        return this._parseTag(value);
-    };
-
-    this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
-    this._parseTag = function(tag) {
-        
-        var match = tag.match(this.tagRe);
-        var column = 0;
-
-        return {
-            value: tag,
-            match: match ? match[2] : "",
-            closing: match ? !!match[3] : false,
-            selfClosing: match ? !!match[5] || match[2] == "/>" : false,
-            tagName: match ? match[4] : "",
-            column: match[1] ? column + match[1].length : column
-        };
-    };
-    this._readTagForward = function(iterator) {
-        var token = iterator.getCurrentToken();
-        if (!token)
-            return null;
-            
-        var value = "";
-        var start;
-        
-        do {
-            if (token.type.indexOf("meta.tag") === 0) {
-                if (!start) {
-                    var start = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn()
-                    };
-                }
-                value += token.value;
-                if (value.indexOf(">") !== -1) {
-                    var tag = this._parseTag(value);
-                    tag.start = start;
-                    tag.end = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn() + token.value.length
-                    };
-                    iterator.stepForward();
-                    return tag;
-                }
-            }
-        } while(token = iterator.stepForward());
-        
-        return null;
-    };
-    
-    this._readTagBackward = function(iterator) {
-        var token = iterator.getCurrentToken();
-        if (!token)
-            return null;
-            
-        var value = "";
-        var end;
-
-        do {
-            if (token.type.indexOf("meta.tag") === 0) {
-                if (!end) {
-                    end = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn() + token.value.length
-                    };
-                }
-                value = token.value + value;
-                if (value.indexOf("<") !== -1) {
-                    var tag = this._parseTag(value);
-                    tag.end = end;
-                    tag.start = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn()
-                    };
-                    iterator.stepBackward();
-                    return tag;
-                }
-            }
-        } while(token = iterator.stepBackward());
-        
-        return null;
-    };
-    
-    this._pop = function(stack, tag) {
-        while (stack.length) {
-            
-            var top = stack[stack.length-1];
-            if (!tag || top.tagName == tag.tagName) {
-                return stack.pop();
-            }
-            else if (this.voidElements[tag.tagName]) {
-                return;
-            }
-            else if (this.voidElements[top.tagName]) {
-                stack.pop();
-                continue;
-            } else {
-                return null;
-            }
-        }
-    };
-    
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var firstTag = this._getFirstTagInLine(session, row);
-        
-        if (!firstTag.match)
-            return null;
-        
-        var isBackward = firstTag.closing || firstTag.selfClosing;
-        var stack = [];
-        var tag;
-        
-        if (!isBackward) {
-            var iterator = new TokenIterator(session, row, firstTag.column);
-            var start = {
-                row: row,
-                column: firstTag.column + firstTag.tagName.length + 2
-            };
-            while (tag = this._readTagForward(iterator)) {
-                if (tag.selfClosing) {
-                    if (!stack.length) {
-                        tag.start.column += tag.tagName.length + 2;
-                        tag.end.column -= 2;
-                        return Range.fromPoints(tag.start, tag.end);
-                    } else
-                        continue;
-                }
-                
-                if (tag.closing) {
-                    this._pop(stack, tag);
-                    if (stack.length == 0)
-                        return Range.fromPoints(start, tag.start);
-                }
-                else {
-                    stack.push(tag)
-                }
-            }
-        }
-        else {
-            var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
-            var end = {
-                row: row,
-                column: firstTag.column
-            };
-            
-            while (tag = this._readTagBackward(iterator)) {
-                if (tag.selfClosing) {
-                    if (!stack.length) {
-                        tag.start.column += tag.tagName.length + 2;
-                        tag.end.column -= 2;
-                        return Range.fromPoints(tag.start, tag.end);
-                    } else
-                        continue;
-                }
-                
-                if (!tag.closing) {
-                    this._pop(stack, tag);
-                    if (stack.length == 0) {
-                        tag.start.column += tag.tagName.length + 2;
-                        return Range.fromPoints(tag.start, end);
-                    }
-                }
-                else {
-                    stack.push(tag)
-                }
-            }
-        }
-        
-    };
-
-}).call(FoldMode.prototype);
-
-});
-
-define('ace/mode/javascript', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/javascript_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range', 'ace/worker/worker_client', 'ace/mode/behaviour/cstyle', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-var WorkerClient = require("../worker/worker_client").WorkerClient;
-var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.$behaviour = new CstyleBehaviour();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-        var endState = tokenizedLine.state;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-
-        if (state == "start" || state == "no_regex") {
-            var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        } else if (state == "doc-start") {
-            if (endState == "start" || endState == "no_regex") {
-                return "";
-            }
-            var match = line.match(/^\s*(\/?)\*/);
-            if (match) {
-                if (match[1]) {
-                    indent += " ";
-                }
-                indent += "* ";
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-    this.createWorker = function(session) {
-        var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
-        worker.attachToDocument(session.getDocument());
-
-        worker.on("jslint", function(results) {
-            session.setAnnotations(results.data);
-        });
-
-        worker.on("terminate", function() {
-            session.clearAnnotations();
-        });
-
-        return worker;
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/javascript_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var JavaScriptHighlightRules = function() {
-    var keywordMapper = this.createKeywordMapper({
-        "variable.language":
-            "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|"  + // Constructors
-            "Namespace|QName|XML|XMLList|"                                             + // E4X
-            "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|"   +
-            "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|"                    +
-            "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|"   + // Errors
-            "SyntaxError|TypeError|URIError|"                                          +
-            "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
-            "isNaN|parseFloat|parseInt|"                                               +
-            "JSON|Math|"                                                               + // Other
-            "this|arguments|prototype|window|document"                                 , // Pseudo
-        "keyword":
-            "const|yield|import|get|set|" +
-            "break|case|catch|continue|default|delete|do|else|finally|for|function|" +
-            "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
-            "__parent__|__count__|escape|unescape|with|__proto__|" +
-            "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",
-        "storage.type":
-            "const|let|var|function",
-        "constant.language":
-            "null|Infinity|NaN|undefined",
-        "support.function":
-            "alert",
-        "constant.language.boolean": "true|false"
-    }, "identifier");
-    var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
-    var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
-
-    var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
-        "u[0-9a-fA-F]{4}|" + // unicode
-        "[0-2][0-7]{0,2}|" + // oct
-        "3[0-6][0-7]?|" + // oct
-        "37[0-7]?|" + // oct
-        "[4-7][0-7]?|" + //oct
-        ".)";
-
-    this.$rules = {
-        "no_regex" : [
-            {
-                token : "comment",
-                regex : /\/\/.*$/
-            },
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : /\/\*/,
-                next : "comment"
-            }, {
-                token : "string",
-                regex : "'(?=.)",
-                next  : "qstring"
-            }, {
-                token : "string",
-                regex : '"(?=.)',
-                next  : "qqstring"
-            }, {
-                token : "constant.numeric", // hex
-                regex : /0[xX][0-9a-fA-F]+\b/
-            }, {
-                token : "constant.numeric", // float
-                regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "support.function",
-                    "punctuation.operator", "entity.name.function", "text","keyword.operator"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "entity.name.function", "text",
-                    "keyword.operator", "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "entity.name.function", "text", "keyword.operator", "text", "storage.type",
-                    "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "punctuation.operator", "entity.name.function", "text",
-                    "keyword.operator", "text",
-                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
-                ],
-                regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "entity.name.function", "text", "punctuation.operator",
-                    "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : [
-                    "text", "text", "storage.type", "text", "paren.lparen"
-                ],
-                regex : "(:)(\\s*)(function)(\\s*)(\\()",
-                next: "function_arguments"
-            }, {
-                token : "keyword",
-                regex : "(?:" + kwBeforeRe + ")\\b",
-                next : "start"
-            }, {
-                token : ["punctuation.operator", "support.function"],
-                regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
-            }, {
-                token : ["punctuation.operator", "support.function.dom"],
-                regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
-            }, {
-                token : ["punctuation.operator", "support.constant"],
-                regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
-            }, {
-                token : ["storage.type", "punctuation.operator", "support.function.firebug"],
-                regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/
-            }, {
-                token : keywordMapper,
-                regex : identifierRe
-            }, {
-                token : "keyword.operator",
-                regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/,
-                next  : "start"
-            }, {
-                token : "punctuation.operator",
-                regex : /\?|\:|\,|\;|\./,
-                next  : "start"
-            }, {
-                token : "paren.lparen",
-                regex : /[\[({]/,
-                next  : "start"
-            }, {
-                token : "paren.rparen",
-                regex : /[\])}]/
-            }, {
-                token : "keyword.operator",
-                regex : /\/=?/,
-                next  : "start"
-            }, {
-                token: "comment",
-                regex: /^#!.*$/
-            }
-        ],
-        "start": [
-            DocCommentHighlightRules.getStartRule("doc-start"),
-            {
-                token : "comment", // multi line comment
-                regex : "\\/\\*",
-                next : "comment_regex_allowed"
-            }, {
-                token : "comment",
-                regex : "\\/\\/.*$",
-                next : "start"
-            }, {
-                token: "string.regexp",
-                regex: "\\/",
-                next: "regex"
-            }, {
-                token : "text",
-                regex : "\\s+|^$",
-                next : "start"
-            }, {
-                token: "empty",
-                regex: "",
-                next: "no_regex"
-            }
-        ],
-        "regex": [
-            {
-                token: "regexp.keyword.operator",
-                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
-            }, {
-                token: "string.regexp",
-                regex: "/\\w*",
-                next: "no_regex"
-            }, {
-                token : "invalid",
-                regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
-            }, {
-                token : "constant.language.escape",
-                regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?]/
-            }, {
-                token : "constant.language.delimiter",
-                regex: /\|/
-            }, {
-                token: "constant.language.escape",
-                regex: /\[\^?/,
-                next: "regex_character_class"
-            }, {
-                token: "empty",
-                regex: "$",
-                next: "no_regex"
-            }, {
-                defaultToken: "string.regexp"
-            }
-        ],
-        "regex_character_class": [
-            {
-                token: "regexp.keyword.operator",
-                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
-            }, {
-                token: "constant.language.escape",
-                regex: "]",
-                next: "regex"
-            }, {
-                token: "constant.language.escape",
-                regex: "-"
-            }, {
-                token: "empty",
-                regex: "$",
-                next: "no_regex"
-            }, {
-                defaultToken: "string.regexp.charachterclass"
-            }
-        ],
-        "function_arguments": [
-            {
-                token: "variable.parameter",
-                regex: identifierRe
-            }, {
-                token: "punctuation.operator",
-                regex: "[, ]+"
-            }, {
-                token: "punctuation.operator",
-                regex: "$"
-            }, {
-                token: "empty",
-                regex: "",
-                next: "no_regex"
-            }
-        ],
-        "comment_regex_allowed" : [
-            {token : "comment", regex : "\\*\\/", next : "start"},
-            {defaultToken : "comment"}
-        ],
-        "comment" : [
-            {token : "comment", regex : "\\*\\/", next : "no_regex"},
-            {defaultToken : "comment"}
-        ],
-        "qqstring" : [
-            {
-                token : "constant.language.escape",
-                regex : escapedRe
-            }, {
-                token : "string",
-                regex : "\\\\$",
-                next  : "qqstring"
-            }, {
-                token : "string",
-                regex : '"|$',
-                next  : "no_regex"
-            }, {
-                defaultToken: "string"
-            }
-        ],
-        "qstring" : [
-            {
-                token : "constant.language.escape",
-                regex : escapedRe
-            }, {
-                token : "string",
-                regex : "\\\\$",
-                next  : "qstring"
-            }, {
-                token : "string",
-                regex : "'|$",
-                next  : "no_regex"
-            }, {
-                defaultToken: "string"
-            }
-        ]
-    };
-
-    this.embedRules(DocCommentHighlightRules, "doc-",
-        [ DocCommentHighlightRules.getEndRule("no_regex") ]);
-};
-
-oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
-
-exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
-});
-
-define('ace/mode/doc_comment_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var DocCommentHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment.doc.tag",
-            regex : "@[\\w\\d_]+" // TODO: fix email addresses
-        }, {
-            token : "comment.doc.tag",
-            regex : "\\bTODO\\b"
-        }, {
-            defaultToken : "comment.doc"
-        }]
-    };
-};
-
-oop.inherits(DocCommentHighlightRules, TextHighlightRules);
-
-DocCommentHighlightRules.getStartRule = function(start) {
-    return {
-        token : "comment.doc", // doc comment
-        regex : "\\/\\*(?=\\*)",
-        next  : start
-    };
-};
-
-DocCommentHighlightRules.getEndRule = function (start) {
-    return {
-        token : "comment.doc", // closing comment
-        regex : "\\*\\/",
-        next  : start
-    };
-};
-
-
-exports.DocCommentHighlightRules = DocCommentHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
-
-define('ace/mode/svg_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/javascript_highlight_rules', 'ace/mode/xml_highlight_rules', 'ace/mode/xml_util'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
-var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
-var xmlUtil = require("./xml_util");
-
-var SvgHighlightRules = function() {
-    XmlHighlightRules.call(this);
-
-    this.$rules.start.splice(3, 0, {
-        token : "meta.tag",
-        regex : "<(?=script)",
-        next : "script"
-    });
-    
-    xmlUtil.tag(this.$rules, "script", "js-start");
-    
-    this.embedRules(JavaScriptHighlightRules, "js-", [{
-        token: "comment",
-        regex: "\\/\\/.*(?=<\\/script>)",
-        next: "tag"
-    }, {
-        token: "meta.tag",
-        regex: "<\\/(?=script)",
-        next: "tag"
-    }]);
-};
-
-oop.inherits(SvgHighlightRules, XmlHighlightRules);
-
-exports.SvgHighlightRules = SvgHighlightRules;
-});
-
-define('ace/mode/folding/mixed', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
-    this.defaultMode = defaultMode;
-    this.subModes = subModes;
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-
-    this.$getMode = function(state) {
-        for (var key in this.subModes) {
-            if (state.indexOf(key) === 0)
-                return this.subModes[key];
-        }
-        return null;
-    };
-    
-    this.$tryMode = function(state, session, foldStyle, row) {
-        var mode = this.$getMode(state);
-        return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
-    };
-
-    this.getFoldWidget = function(session, foldStyle, row) {
-        return (
-            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
-            this.$tryMode(session.getState(row), session, foldStyle, row) ||
-            this.defaultMode.getFoldWidget(session, foldStyle, row)
-        );
-    };
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var mode = this.$getMode(session.getState(row-1));
-        
-        if (!mode || !mode.getFoldWidget(session, foldStyle, row))
-            mode = this.$getMode(session.getState(row));
-        
-        if (!mode || !mode.getFoldWidget(session, foldStyle, row))
-            mode = this.defaultMode;
-        
-        return mode.getFoldWidgetRange(session, foldStyle, row);
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-tcl.js b/try/ace/mode-tcl.js
deleted file mode 100644
index 86b9afa..0000000
--- a/try/ace/mode-tcl.js
+++ /dev/null
@@ -1,319 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/tcl', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/folding/cstyle', 'ace/mode/tcl_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var CStyleFoldMode = require("./folding/cstyle").FoldMode;
-var TclHighlightRules = require("./tcl_highlight_rules").TclHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new TclHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.foldingRules = new CStyleFoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "#";
-
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
-        var tokens = tokenizedLine.tokens;
-
-        if (tokens.length && tokens[tokens.length-1].type == "comment") {
-            return indent;
-        }
-        
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
-
-define('ace/mode/tcl_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var TclHighlightRules = function() {
-
-    this.$rules = {
-        "start" : [
-           {
-                token : "comment",
-                regex : "#.*\\\\$",
-                next  : "commentfollow"
-            }, {
-                token : "comment",
-                regex : "#.*$"
-            }, {
-                token : "support.function",
-                regex : '[\\\\]$',
-                next  : "splitlineStart"
-            }, {
-                token : "text",
-                regex : '[\\\\](?:["]|[{]|[}]|[[]|[]]|[$]|[\])'
-            }, {
-                token : "text", // last value before command
-                regex : '^|[^{][;][^}]|[/\r/]',
-                next  : "commandItem"
-            }, {
-                token : "string", // single line
-                regex : '[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // multi line """ string start
-                regex : '[ ]*["]',
-                next  : "qqstring"
-            }, {
-                token : "variable.instance",
-                regex : "[$]",
-                next  : "variable"
-            }, {
-                token : "support.function",
-                regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::"
-            }, {
-                token : "identifier",
-                regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-            }, {
-                token : "paren.lparen",
-                regex : "[[{]",
-                next  : "commandItem"
-            }, {
-                token : "paren.lparen",
-                regex : "[(]"
-            },  {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "text",
-                regex : "\\s+"
-            }
-        ],
-        "commandItem" : [
-            {
-                token : "comment",
-                regex : "#.*\\\\$",
-                next  : "commentfollow"
-            }, {
-                token : "comment",
-                regex : "#.*$",
-                next  : "start"
-            }, {
-                token : "string", // single line
-                regex : '[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "variable.instance", 
-                regex : "[$]",
-                next  : "variable"
-            }, {
-                token : "support.function",
-                regex : "(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])",
-                next  : "commandItem"
-            }, {
-                token : "support.function",
-                regex : "[a-zA-Z0-9_/]+(?:[:][:])",
-                next  : "commandItem"
-            }, {
-                token : "support.function",
-                regex : "(?:[:][:])",
-                next  : "commandItem"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }, {
-                token : "support.function",
-                regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::"
-            }, {
-                token : "keyword",
-                regex : "[a-zA-Z0-9_/]+",
-                next  : "start"
-            } ],
-        "commentfollow" : [ 
-            {
-                token : "comment",
-                regex : ".*\\\\$",
-                next  : "commentfollow"
-            }, {
-                token : "comment",
-                regex : '.+',
-                next  : "start"
-        } ],
-        "splitlineStart" : [ 
-            {
-                token : "text",
-                regex : "^.",
-                next  : "start"
-            }],
-        "variable" : [ 
-            {
-                token : "variable.instance", // variable tcl
-                regex : "[a-zA-Z_\\d]+(?:[(][a-zA-Z_\\d]+[)])?",
-                next  : "start"
-            }, {
-                token : "variable.instance", // variable tcl with braces
-                regex : "{?[a-zA-Z_\\d]+}?",
-                next  : "start"
-            }],  
-        "qqstring" : [ {
-            token : "string", // multi line """ string end
-            regex : '(?:[^\\\\]|\\\\.)*?["]',
-            next : "start"
-        }, {
-            token : "string",
-            regex : '.+'
-        } ]
-    };
-};
-
-oop.inherits(TclHighlightRules, TextHighlightRules);
-
-exports.TclHighlightRules = TclHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-tex.js b/try/ace/mode-tex.js
deleted file mode 100644
index 59c0e56..0000000
--- a/try/ace/mode-tex.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * tex.js
- *
- * Copyright (C) 2009-11 by RStudio, Inc.
- *
- * The Initial Developer of the Original Code is
- * Ajax.org B.V.
- * Portions created by the Initial Developer are Copyright (C) 2010
- * the Initial Developer. All Rights Reserved.
- *
- * This program is licensed to you under the terms of version 3 of the
- * GNU Affero General Public License. This program is distributed WITHOUT
- * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
- * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
- *
- */
-define('ace/mode/tex', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/tex_highlight_rules', 'ace/mode/matching_brace_outdent'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-var TexHighlightRules = require("./tex_highlight_rules").TexHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-
-var Mode = function(suppressHighlighting) {
-	if (suppressHighlighting)
-    	this.$tokenizer = new Tokenizer(new TextHighlightRules().getRules());
-	else
-    	this.$tokenizer = new Tokenizer(new TexHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-   this.getNextLineIndent = function(state, line, tab) {
-      return this.$getIndent(line);
-   };
-
-   this.allowAutoInsert = function() {
-      return false;
-   };
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-define('ace/mode/tex_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var TexHighlightRules = function(textClass) {
-
-    if (!textClass)
-        textClass = "text";
-
-    this.$rules = {
-        "start" : [
-	        {
-	            token : "comment",
-	            regex : "%.*$"
-	        }, {
-	            token : textClass, // non-command
-	            regex : "\\\\[$&%#\\{\\}]"
-	        }, {
-	            token : "keyword", // command
-	            regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b",
-               next : "nospell"
-	        }, {
-	            token : "keyword", // command
-	            regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])"
-	        }, {
-               token : "paren.keyword.operator",
-	            regex : "[[({]"
-	        }, {
-               token : "paren.keyword.operator",
-	            regex : "[\\])}]"
-	        }, {
-	            token : textClass,
-	            regex : "\\s+"
-	        }
-        ],
-        "nospell" : [
-           {
-               token : "comment",
-               regex : "%.*$",
-               next : "start"
-           }, {
-               token : "nospell." + textClass, // non-command
-               regex : "\\\\[$&%#\\{\\}]"
-           }, {
-               token : "keyword", // command
-               regex : "\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\b"
-           }, {
-               token : "keyword", // command
-               regex : "\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])",
-               next : "start"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "[[({]"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "[\\])]"
-           }, {
-               token : "paren.keyword.operator",
-               regex : "}",
-               next : "start"
-           }, {
-               token : "nospell." + textClass,
-               regex : "\\s+"
-           }, {
-               token : "nospell." + textClass,
-               regex : "\\w+"
-           }
-        ]
-    };
-};
-
-oop.inherits(TexHighlightRules, TextHighlightRules);
-
-exports.TexHighlightRules = TexHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-text.js b/try/ace/mode-text.js
deleted file mode 100644
index e69de29..0000000
diff --git a/try/ace/mode-textile.js b/try/ace/mode-textile.js
deleted file mode 100644
index 3e89266..0000000
--- a/try/ace/mode-textile.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/textile', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/textile_highlight_rules', 'ace/mode/matching_brace_outdent'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var TextileHighlightRules = require("./textile_highlight_rules").TextileHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new TextileHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.getNextLineIndent = function(state, line, tab) {
-        if (state == "intag")
-            return tab;
-        
-        return "";
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-    
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/textile_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var TextileHighlightRules = function() {
-    this.$rules = {
-        "start" : [
-            {
-                token : function(value) {
-                    if (value.charAt(0) == "h")
-                        return "markup.heading." + value.charAt(1);
-                    else
-                        return "markup.heading";
-                },
-                regex : "h1|h2|h3|h4|h5|h6|bq|p|bc|pre",
-                next  : "blocktag"
-            },
-            {
-                token : "keyword",
-                regex : "[\\*]+|[#]+"
-            },
-            {
-                token : "text",
-                regex : ".+"
-            }
-        ],
-        "blocktag" : [
-            {
-                token : "keyword",
-                regex : "\\. ",
-                next  : "start"
-            },
-            {
-                token : "keyword",
-                regex : "\\(",
-                next  : "blocktagproperties"
-            }
-        ],
-        "blocktagproperties" : [
-            {
-                token : "keyword",
-                regex : "\\)",
-                next  : "blocktag"
-            },
-            {
-                token : "string",
-                regex : "[a-zA-Z0-9\\-_]+"
-            },
-            {
-                token : "keyword",
-                regex : "#"
-            }
-        ]
-    };
-};
-
-oop.inherits(TextileHighlightRules, TextHighlightRules);
-
-exports.TextileHighlightRules = TextileHighlightRules;
-
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
diff --git a/try/ace/mode-tmsnippet.js b/try/ace/mode-tmsnippet.js
deleted file mode 100644
index af3b044..0000000
--- a/try/ace/mode-tmsnippet.js
+++ /dev/null
@@ -1,200 +0,0 @@
-define('ace/mode/tmsnippet', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/text_highlight_rules', 'ace/mode/folding/coffee'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var SnippetHighlightRules = function() {
-
-    var builtins = "SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|" +
-        "LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME";
-
-    this.$rules = {
-        "start" : [
-            {token:"constant.language.escape", regex: /\\[\$}`\\]/},
-            {token:"keyword", regex: "\\$(?:TM_)?(?:" + builtins + ")\\b"},
-            {token:"variable", regex: "\\$\\w+"},
-            {onMatch: function(value, state, stack) {
-                if (stack[1])
-                    stack[1]++;
-                else
-                    stack.unshift(state, 1);
-                return this.tokenName;
-            }, tokenName: "markup.list", regex: "\\${", next: "varDecl"},
-            {onMatch: function(value, state, stack) {
-                if (!stack[1])
-                    return "text";
-                stack[1]--;
-                if (!stack[1])
-                    stack.splice(0,2);
-                return this.tokenName;
-            }, tokenName: "markup.list", regex: "}"},
-            {token: "doc.comment", regex:/^\${2}-{5,}$/}
-        ],
-        "varDecl" : [
-            {regex: /\d+\b/, token: "constant.numeric"},
-            {token:"keyword", regex: "(?:TM_)?(?:" + builtins + ")\\b"},
-            {token:"variable", regex: "\\w+"},
-            {regex: /:/, token: "punctuation.operator", next: "start"},
-            {regex: /\//, token: "string.regex", next: "regexp"},
-            {regex: "", next: "start"}
-        ],
-        "regexp" : [
-            {regex: /\\./, token: "escape"},
-            {regex: /\[/, token: "regex.start", next: "charClass"},
-            {regex: "/", token: "string.regex", next: "format"},
-            {"token": "string.regex", regex:"."}
-        ],
-        charClass : [
-            {regex: "\\.", token: "escape"},
-            {regex: "\\]", token: "regex.end", next: "regexp"},
-            {"token": "string.regex", regex:"."}
-        ],
-        "format" : [
-            {regex: /\\[ulULE]/, token: "keyword"},
-            {regex: /\$\d+/, token: "variable"},
-            {regex: "/[gim]*:?", token: "string.regex", next: "start"},
-            {"token": "string", regex:"."}
-        ]
-    };
-};
-oop.inherits(SnippetHighlightRules, TextHighlightRules);
-
-exports.SnippetHighlightRules = SnippetHighlightRules;
-
-var SnippetGroupHighlightRules = function() {
-    this.$rules = {
-        "start" : [
-			{token: "text", regex: "^\\t", next: "sn-start"},
-			{token:"invalid", regex: /^ \s*/},
-            {token:"comment", regex: /^#.*/},
-            {token:"constant.language.escape", regex: "^regex ", next: "regex"},
-            {token:"constant.language.escape", regex: "^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\b"}
-        ],
-		"regex" : [
-			{token:"text", regex: "\\."},
-			{token:"keyword", regex: "/"},
-			{token:"empty", regex: "$", next: "start"}
-		]
-    };
-	this.embedRules(SnippetHighlightRules, "sn-", [
-		{token: "text", regex: "^\\t", next: "sn-start"},
-		{onMatch: function(value, state, stack) {
-			stack.splice(stack.length);
-			return this.tokenName;
-		}, tokenName: "text", regex: "^(?!\t)", next: "start"},
-	])
-	
-};
-
-oop.inherits(SnippetGroupHighlightRules, TextHighlightRules);
-
-exports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;
-
-var FoldMode = require("./folding/coffee").FoldMode;
-
-var Mode = function() {
-    var highlighter = new SnippetGroupHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.getNextLineIndent = function(state, line, tab) {
-        return this.$getIndent(line);
-    };
-}).call(Mode.prototype);
-exports.Mode = Mode;
-
-
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-toml.js b/try/ace/mode-toml.js
deleted file mode 100644
index 693c215..0000000
--- a/try/ace/mode-toml.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2013, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * Contributor(s):
- *
- * Garen J. Torikian
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/toml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/toml_highlight_rules', 'ace/mode/folding/cstyle'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var TomlHighlightRules = require("./toml_highlight_rules").TomlHighlightRules;
-var FoldMode = require("./folding/cstyle").FoldMode;
-
-var Mode = function() {
-    var highlighter = new TomlHighlightRules();
-    this.foldingRules = new FoldMode();
-    this.$tokenizer = new Tokenizer(highlighter.getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-    this.lineCommentStart = "#";
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/toml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var TomlHighlightRules = function() {
-    var keywordMapper = this.createKeywordMapper({
-        "constant.language.boolean": "true|false"
-    }, "identifier");
-
-    var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
-
-    this.$rules = {
-    "start": [
-        {
-            token: "comment.toml",
-            regex: /#.*$/
-        },
-        {
-            token : "string",
-            regex : '"(?=.)',
-            next  : "qqstring"
-        },
-        {
-            token: ["variable.keygroup.toml"],
-            regex: "(?:^\\s*)(\\[([^\\]]+)\\])"
-        },
-        {
-            token : keywordMapper,
-            regex : identifierRe
-        },
-        {
-           token : "support.date.toml",
-           regex: "\\d{4}-\\d{2}-\\d{2}(T)\\d{2}:\\d{2}:\\d{2}(Z)"
-        },
-        {
-           token: "constant.numeric.toml",
-           regex: "-?\\d+(\\.?\\d+)?"
-        }
-    ],
-    "qqstring" : [
-        {
-            token : "string",
-            regex : "\\\\$",
-            next  : "qqstring"
-        },
-        {
-            token : "constant.language.escape",
-            regex : '\\\\[0tnr"\\\\]'
-        },
-        {
-            token : "string",
-            regex : '"|$',
-            next  : "start"
-        },
-        {
-            defaultToken: "string"
-        }
-    ]
-    }
-
-};
-
-oop.inherits(TomlHighlightRules, TextHighlightRules);
-
-exports.TomlHighlightRules = TomlHighlightRules;
-});
-
-define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-
-var FoldMode = exports.FoldMode = function(commentRegex) {
-    if (commentRegex) {
-        this.foldingStartMarker = new RegExp(
-            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
-        );
-        this.foldingStopMarker = new RegExp(
-            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
-        );
-    }
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
-    this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var match = line.match(this.foldingStartMarker);
-        if (match) {
-            var i = match.index;
-
-            if (match[1])
-                return this.openingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i + match[0].length, 1);
-        }
-
-        if (foldStyle !== "markbeginend")
-            return;
-
-        var match = line.match(this.foldingStopMarker);
-        if (match) {
-            var i = match.index + match[0].length;
-
-            if (match[1])
-                return this.closingBracketBlock(session, match[1], row, i);
-
-            return session.getCommentFoldRange(row, i, -1);
-        }
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-verilog.js b/try/ace/mode-verilog.js
deleted file mode 100644
index 2e94f87..0000000
--- a/try/ace/mode-verilog.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/verilog', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/verilog_highlight_rules', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var VerilogHighlightRules = require("./verilog_highlight_rules").VerilogHighlightRules;
-var Range = require("../range").Range;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new VerilogHighlightRules().getRules());
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "//";
-    this.blockComment = {start: "/*", end: "*/"};
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-
-define('ace/mode/verilog_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var VerilogHighlightRules = function() {
-var keywords = "always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|" +
-    "deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|" +
-    "endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|" +
-    "highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|" +
-    "macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|" +
-    "posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|" +
-    "reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|" +
-    "strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|" +
-    "unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xor" +
-    "begin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|" +
-    "endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|" +
-    "macromodule|module|primitive|repeat|specify|table|task|while";
-
-    var builtinConstants = (
-        "true|false|null"
-    );
-
-    var builtinFunctions = (
-        "count|min|max|avg|sum|rank|now|coalesce|main"
-    );
-
-    var keywordMapper = this.createKeywordMapper({
-        "support.function": builtinFunctions,
-        "keyword": keywords,
-        "constant.language": builtinConstants
-    }, "identifier", true);
-
-    this.$rules = {
-        "start" : [ {
-            token : "comment",
-            regex : "//.*$"
-        }, {
-            token : "string",           // " string
-            regex : '".*?"'
-        }, {
-            token : "string",           // ' string
-            regex : "'.*?'"
-        }, {
-            token : "constant.numeric", // float
-            regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-        }, {
-            token : keywordMapper,
-            regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
-        }, {
-            token : "keyword.operator",
-            regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
-        }, {
-            token : "paren.lparen",
-            regex : "[\\(]"
-        }, {
-            token : "paren.rparen",
-            regex : "[\\)]"
-        }, {
-            token : "text",
-            regex : "\\s+"
-        } ]
-    };
-};
-
-oop.inherits(VerilogHighlightRules, TextHighlightRules);
-
-exports.VerilogHighlightRules = VerilogHighlightRules;
-});
diff --git a/try/ace/mode-xml.js b/try/ace/mode-xml.js
deleted file mode 100644
index 7f41a6b..0000000
--- a/try/ace/mode-xml.js
+++ /dev/null
@@ -1,788 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xml_highlight_rules', 'ace/mode/behaviour/xml', 'ace/mode/folding/xml'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
-var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
-var XmlFoldMode = require("./folding/xml").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new XmlHighlightRules().getRules());
-    this.$behaviour = new XmlBehaviour();
-    this.foldingRules = new XmlFoldMode();
-};
-
-oop.inherits(Mode, TextMode);
-
-(function() {
-    
-    this.blockComment = {start: "<!--", end: "-->"};
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-});
-
-define('ace/mode/xml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/xml_util', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var xmlUtil = require("./xml_util");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var XmlHighlightRules = function() {
-    this.$rules = {
-        start : [
-            {token : "text", regex : "<\\!\\[CDATA\\[", next : "cdata"},
-            {token : "xml-pe", regex : "<\\?.*?\\?>"},
-            {token : "comment", regex : "<\\!--", next : "comment"},
-            {token : "xml-pe", regex : "<\\!.*?>"},
-            {token : "meta.tag", regex : "<\\/?", next : "tag"},
-            {token : "text", regex : "\\s+"},
-            {
-                token : "constant.character.entity", 
-                regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" 
-            }
-        ],
-        
-        cdata : [
-            {token : "text", regex : "\\]\\]>", next : "start"},
-            {token : "text", regex : "\\s+"},
-            {token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"}
-        ],
-
-        comment : [
-            {token : "comment", regex : ".*?-->", next : "start"},
-            {token : "comment", regex : ".+"}
-        ]
-    };
-    
-    xmlUtil.tag(this.$rules, "tag", "start");
-};
-
-oop.inherits(XmlHighlightRules, TextHighlightRules);
-
-exports.XmlHighlightRules = XmlHighlightRules;
-});
-
-define('ace/mode/xml_util', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-function string(state) {
-    return [{
-        token : "string",
-        regex : '"',
-        next : state + "_qqstring"
-    }, {
-        token : "string",
-        regex : "'",
-        next : state + "_qstring"
-    }];
-}
-
-function multiLineString(quote, state) {
-    return [
-        {token : "string", regex : quote, next : state},
-        {
-            token : "constant.language.escape",
-            regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" 
-        },
-        {defaultToken : "string"}
-    ];
-}
-
-exports.tag = function(states, name, nextState, tagMap) {
-    states[name] = [{
-        token : "text",
-        regex : "\\s+"
-    }, {
-        
-    token : !tagMap ? "meta.tag.tag-name" : function(value) {
-            if (tagMap[value])
-                return "meta.tag.tag-name." + tagMap[value];
-            else
-                return "meta.tag.tag-name";
-        },
-        regex : "[-_a-zA-Z0-9:]+",
-        next : name + "_embed_attribute_list" 
-    }, {
-        token: "empty",
-        regex: "",
-        next : name + "_embed_attribute_list"
-    }];
-
-    states[name + "_qstring"] = multiLineString("'", name + "_embed_attribute_list");
-    states[name + "_qqstring"] = multiLineString("\"", name + "_embed_attribute_list");
-    
-    states[name + "_embed_attribute_list"] = [{
-        token : "meta.tag.r",
-        regex : "/?>",
-        next : nextState
-    }, {
-        token : "keyword.operator",
-        regex : "="
-    }, {
-        token : "entity.other.attribute-name",
-        regex : "[-_a-zA-Z0-9:]+"
-    }, {
-        token : "constant.numeric", // float
-        regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
-    }, {
-        token : "text",
-        regex : "\\s+"
-    }].concat(string(name));
-};
-
-});
-
-define('ace/mode/behaviour/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-function hasType(token, type) {
-    var hasType = true;
-    var typeList = token.type.split('.');
-    var needleList = type.split('.');
-    needleList.forEach(function(needle){
-        if (typeList.indexOf(needle) == -1) {
-            hasType = false;
-            return false;
-        }
-    });
-    return hasType;
-}
-
-var XmlBehaviour = function () {
-    
-    this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
-    
-    this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
-        if (text == '>') {
-            var position = editor.getCursorPosition();
-            var iterator = new TokenIterator(session, position.row, position.column);
-            var token = iterator.getCurrentToken();
-            var atCursor = false;
-            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
-                do {
-                    token = iterator.stepBackward();
-                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
-            } else {
-                atCursor = true;
-            }
-            if (!token || !hasType(token, 'meta.tag-name') || iterator.stepBackward().value.match('/')) {
-                return
-            }
-            var tag = token.value;
-            if (atCursor){
-                var tag = tag.substring(0, position.column - token.start);
-            }
-
-            return {
-               text: '>' + '</' + tag + '>',
-               selection: [1, 1]
-            }
-        }
-    });
-
-    this.add('autoindent', 'insertion', function (state, action, editor, session, text) {
-        if (text == "\n") {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChars = line.substring(cursor.column, cursor.column + 2);
-            if (rightChars == '</') {
-                var indent = this.$getIndent(session.doc.getLine(cursor.row)) + session.getTabString();
-                var next_indent = this.$getIndent(session.doc.getLine(cursor.row));
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent,
-                    selection: [1, indent.length, 1, indent.length]
-                }
-            }
-        }
-    });
-    
-}
-oop.inherits(XmlBehaviour, Behaviour);
-
-exports.XmlBehaviour = XmlBehaviour;
-});
-
-define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var Behaviour = require("../behaviour").Behaviour;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-var lang = require("../../lib/lang");
-
-var SAFE_INSERT_IN_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator"];
-var SAFE_INSERT_BEFORE_TOKENS =
-    ["text", "paren.rparen", "punctuation.operator", "comment"];
-
-
-var autoInsertedBrackets = 0;
-var autoInsertedRow = -1;
-var autoInsertedLineEnd = "";
-var maybeInsertedBrackets = 0;
-var maybeInsertedRow = -1;
-var maybeInsertedLineStart = "";
-var maybeInsertedLineEnd = "";
-
-var CstyleBehaviour = function () {
-    
-    CstyleBehaviour.isSaneInsertion = function(editor, session) {
-        var cursor = editor.getCursorPosition();
-        var iterator = new TokenIterator(session, cursor.row, cursor.column);
-        if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
-            var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
-            if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
-                return false;
-        }
-        iterator.stepForward();
-        return iterator.getCurrentTokenRow() !== cursor.row ||
-            this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
-    };
-    
-    CstyleBehaviour.$matchTokenType = function(token, types) {
-        return types.indexOf(token.type || token) > -1;
-    };
-    
-    CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
-            autoInsertedBrackets = 0;
-        autoInsertedRow = cursor.row;
-        autoInsertedLineEnd = bracket + line.substr(cursor.column);
-        autoInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (!this.isMaybeInsertedClosing(cursor, line))
-            maybeInsertedBrackets = 0;
-        maybeInsertedRow = cursor.row;
-        maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
-        maybeInsertedLineEnd = line.substr(cursor.column);
-        maybeInsertedBrackets++;
-    };
-    
-    CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
-        return autoInsertedBrackets > 0 &&
-            cursor.row === autoInsertedRow &&
-            bracket === autoInsertedLineEnd[0] &&
-            line.substr(cursor.column) === autoInsertedLineEnd;
-    };
-    
-    CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
-        return maybeInsertedBrackets > 0 &&
-            cursor.row === maybeInsertedRow &&
-            line.substr(cursor.column) === maybeInsertedLineEnd &&
-            line.substr(0, cursor.column) == maybeInsertedLineStart;
-    };
-    
-    CstyleBehaviour.popAutoInsertedClosing = function() {
-        autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
-        autoInsertedBrackets--;
-    };
-    
-    CstyleBehaviour.clearMaybeInsertedClosing = function() {
-        maybeInsertedBrackets = 0;
-        maybeInsertedRow = -1;
-    };
-
-    this.add("braces", "insertion", function (state, action, editor, session, text) {
-        var cursor = editor.getCursorPosition();
-        var line = session.doc.getLine(cursor.row);
-        if (text == '{') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '{' + selected + '}',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                if (/[\]\}\)]/.test(line[cursor.column])) {
-                    CstyleBehaviour.recordAutoInsert(editor, session, "}");
-                    return {
-                        text: '{}',
-                        selection: [1, 1]
-                    };
-                } else {
-                    CstyleBehaviour.recordMaybeInsert(editor, session, "{");
-                    return {
-                        text: '{',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == '}') {
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}') {
-                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        } else if (text == "\n" || text == "\r\n") {
-            var closing = "";
-            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
-                closing = lang.stringRepeat("}", maybeInsertedBrackets);
-                CstyleBehaviour.clearMaybeInsertedClosing();
-            }
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == '}' || closing !== "") {
-                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column}, '}');
-                if (!openBracePos)
-                     return null;
-
-                var indent = this.getNextLineIndent(state, line.substring(0, cursor.column), session.getTabString());
-                var next_indent = this.$getIndent(line);
-
-                return {
-                    text: '\n' + indent + '\n' + next_indent + closing,
-                    selection: [1, indent.length, 1, indent.length]
-                };
-            }
-        }
-    });
-
-    this.add("braces", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '{') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.end.column, range.end.column + 1);
-            if (rightChar == '}') {
-                range.end.column++;
-                return range;
-            } else {
-                maybeInsertedBrackets--;
-            }
-        }
-    });
-
-    this.add("parens", "insertion", function (state, action, editor, session, text) {
-        if (text == '(') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '(' + selected + ')',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, ")");
-                return {
-                    text: '()',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ')') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ')') {
-                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("parens", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '(') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ')') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("brackets", "insertion", function (state, action, editor, session, text) {
-        if (text == '[') {
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: '[' + selected + ']',
-                    selection: false
-                };
-            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
-                CstyleBehaviour.recordAutoInsert(editor, session, "]");
-                return {
-                    text: '[]',
-                    selection: [1, 1]
-                };
-            }
-        } else if (text == ']') {
-            var cursor = editor.getCursorPosition();
-            var line = session.doc.getLine(cursor.row);
-            var rightChar = line.substring(cursor.column, cursor.column + 1);
-            if (rightChar == ']') {
-                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
-                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
-                    CstyleBehaviour.popAutoInsertedClosing();
-                    return {
-                        text: '',
-                        selection: [1, 1]
-                    };
-                }
-            }
-        }
-    });
-
-    this.add("brackets", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && selected == '[') {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == ']') {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
-        if (text == '"' || text == "'") {
-            var quote = text;
-            var selection = editor.getSelectionRange();
-            var selected = session.doc.getTextRange(selection);
-            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
-                return {
-                    text: quote + selected + quote,
-                    selection: false
-                };
-            } else {
-                var cursor = editor.getCursorPosition();
-                var line = session.doc.getLine(cursor.row);
-                var leftChar = line.substring(cursor.column-1, cursor.column);
-                if (leftChar == '\\') {
-                    return null;
-                }
-                var tokens = session.getTokens(selection.start.row);
-                var col = 0, token;
-                var quotepos = -1; // Track whether we're inside an open quote.
-
-                for (var x = 0; x < tokens.length; x++) {
-                    token = tokens[x];
-                    if (token.type == "string") {
-                      quotepos = -1;
-                    } else if (quotepos < 0) {
-                      quotepos = token.value.indexOf(quote);
-                    }
-                    if ((token.value.length + col) > selection.start.column) {
-                        break;
-                    }
-                    col += tokens[x].value.length;
-                }
-                if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
-                    if (!CstyleBehaviour.isSaneInsertion(editor, session))
-                        return;
-                    return {
-                        text: quote + quote,
-                        selection: [1,1]
-                    };
-                } else if (token && token.type === "string") {
-                    var rightChar = line.substring(cursor.column, cursor.column + 1);
-                    if (rightChar == quote) {
-                        return {
-                            text: '',
-                            selection: [1, 1]
-                        };
-                    }
-                }
-            }
-        }
-    });
-
-    this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
-        var selected = session.doc.getTextRange(range);
-        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
-            var line = session.doc.getLine(range.start.row);
-            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
-            if (rightChar == selected) {
-                range.end.column++;
-                return range;
-            }
-        }
-    });
-
-};
-
-oop.inherits(CstyleBehaviour, Behaviour);
-
-exports.CstyleBehaviour = CstyleBehaviour;
-});
-
-define('ace/mode/folding/xml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/range', 'ace/mode/folding/fold_mode', 'ace/token_iterator'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var lang = require("../../lib/lang");
-var Range = require("../../range").Range;
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var TokenIterator = require("../../token_iterator").TokenIterator;
-
-var FoldMode = exports.FoldMode = function(voidElements) {
-    BaseFoldMode.call(this);
-    this.voidElements = voidElements || {};
-};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var tag = this._getFirstTagInLine(session, row);
-
-        if (tag.closing)
-            return foldStyle == "markbeginend" ? "end" : "";
-
-        if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
-            return "";
-
-        if (tag.selfClosing)
-            return "";
-
-        if (tag.value.indexOf("/" + tag.tagName) !== -1)
-            return "";
-
-        return "start";
-    };
-    
-    this._getFirstTagInLine = function(session, row) {
-        var tokens = session.getTokens(row);
-        var value = "";
-        for (var i = 0; i < tokens.length; i++) {
-            var token = tokens[i];
-            if (token.type.indexOf("meta.tag") === 0)
-                value += token.value;
-            else
-                value += lang.stringRepeat(" ", token.value.length);
-        }
-        
-        return this._parseTag(value);
-    };
-
-    this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
-    this._parseTag = function(tag) {
-        
-        var match = tag.match(this.tagRe);
-        var column = 0;
-
-        return {
-            value: tag,
-            match: match ? match[2] : "",
-            closing: match ? !!match[3] : false,
-            selfClosing: match ? !!match[5] || match[2] == "/>" : false,
-            tagName: match ? match[4] : "",
-            column: match[1] ? column + match[1].length : column
-        };
-    };
-    this._readTagForward = function(iterator) {
-        var token = iterator.getCurrentToken();
-        if (!token)
-            return null;
-            
-        var value = "";
-        var start;
-        
-        do {
-            if (token.type.indexOf("meta.tag") === 0) {
-                if (!start) {
-                    var start = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn()
-                    };
-                }
-                value += token.value;
-                if (value.indexOf(">") !== -1) {
-                    var tag = this._parseTag(value);
-                    tag.start = start;
-                    tag.end = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn() + token.value.length
-                    };
-                    iterator.stepForward();
-                    return tag;
-                }
-            }
-        } while(token = iterator.stepForward());
-        
-        return null;
-    };
-    
-    this._readTagBackward = function(iterator) {
-        var token = iterator.getCurrentToken();
-        if (!token)
-            return null;
-            
-        var value = "";
-        var end;
-
-        do {
-            if (token.type.indexOf("meta.tag") === 0) {
-                if (!end) {
-                    end = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn() + token.value.length
-                    };
-                }
-                value = token.value + value;
-                if (value.indexOf("<") !== -1) {
-                    var tag = this._parseTag(value);
-                    tag.end = end;
-                    tag.start = {
-                        row: iterator.getCurrentTokenRow(),
-                        column: iterator.getCurrentTokenColumn()
-                    };
-                    iterator.stepBackward();
-                    return tag;
-                }
-            }
-        } while(token = iterator.stepBackward());
-        
-        return null;
-    };
-    
-    this._pop = function(stack, tag) {
-        while (stack.length) {
-            
-            var top = stack[stack.length-1];
-            if (!tag || top.tagName == tag.tagName) {
-                return stack.pop();
-            }
-            else if (this.voidElements[tag.tagName]) {
-                return;
-            }
-            else if (this.voidElements[top.tagName]) {
-                stack.pop();
-                continue;
-            } else {
-                return null;
-            }
-        }
-    };
-    
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var firstTag = this._getFirstTagInLine(session, row);
-        
-        if (!firstTag.match)
-            return null;
-        
-        var isBackward = firstTag.closing || firstTag.selfClosing;
-        var stack = [];
-        var tag;
-        
-        if (!isBackward) {
-            var iterator = new TokenIterator(session, row, firstTag.column);
-            var start = {
-                row: row,
-                column: firstTag.column + firstTag.tagName.length + 2
-            };
-            while (tag = this._readTagForward(iterator)) {
-                if (tag.selfClosing) {
-                    if (!stack.length) {
-                        tag.start.column += tag.tagName.length + 2;
-                        tag.end.column -= 2;
-                        return Range.fromPoints(tag.start, tag.end);
-                    } else
-                        continue;
-                }
-                
-                if (tag.closing) {
-                    this._pop(stack, tag);
-                    if (stack.length == 0)
-                        return Range.fromPoints(start, tag.start);
-                }
-                else {
-                    stack.push(tag)
-                }
-            }
-        }
-        else {
-            var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
-            var end = {
-                row: row,
-                column: firstTag.column
-            };
-            
-            while (tag = this._readTagBackward(iterator)) {
-                if (tag.selfClosing) {
-                    if (!stack.length) {
-                        tag.start.column += tag.tagName.length + 2;
-                        tag.end.column -= 2;
-                        return Range.fromPoints(tag.start, tag.end);
-                    } else
-                        continue;
-                }
-                
-                if (!tag.closing) {
-                    this._pop(stack, tag);
-                    if (stack.length == 0) {
-                        tag.start.column += tag.tagName.length + 2;
-                        return Range.fromPoints(tag.start, end);
-                    }
-                }
-                else {
-                    stack.push(tag)
-                }
-            }
-        }
-        
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/mode-yaml.js b/try/ace/mode-yaml.js
deleted file mode 100644
index 3600b53..0000000
--- a/try/ace/mode-yaml.js
+++ /dev/null
@@ -1,289 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/mode/yaml', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/yaml_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/folding/coffee'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var Tokenizer = require("../tokenizer").Tokenizer;
-var YamlHighlightRules = require("./yaml_highlight_rules").YamlHighlightRules;
-var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
-var FoldMode = require("./folding/coffee").FoldMode;
-
-var Mode = function() {
-    this.$tokenizer = new Tokenizer(new YamlHighlightRules().getRules());
-    this.$outdent = new MatchingBraceOutdent();
-    this.foldingRules = new FoldMode();
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
-    this.lineCommentStart = "#";
-    
-    this.getNextLineIndent = function(state, line, tab) {
-        var indent = this.$getIndent(line);
-
-        if (state == "start") {
-            var match = line.match(/^.*[\{\(\[]\s*$/);
-            if (match) {
-                indent += tab;
-            }
-        }
-
-        return indent;
-    };
-
-    this.checkOutdent = function(state, line, input) {
-        return this.$outdent.checkOutdent(line, input);
-    };
-
-    this.autoOutdent = function(state, doc, row) {
-        this.$outdent.autoOutdent(doc, row);
-    };
-
-
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
-
-define('ace/mode/yaml_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var YamlHighlightRules = function() {
-    this.$rules = {
-        "start" : [
-            {
-                token : "comment",
-                regex : "#.*$"
-            }, {
-                token : "list.markup",
-                regex : /^(?:-{3}|\.{3})\s*(?=#|$)/     
-            },  {
-                token : "list.markup",
-                regex : /^\s*[\-?](?:$|\s)/     
-            }, {
-                token: "constant",
-                regex: "!![\\w//]+"
-            }, {
-                token: "constant.language",
-                regex: "[&\\*][a-zA-Z0-9-_]+"
-            }, {
-                token: ["meta.tag", "keyword"],
-                regex: /^(\s*\w.*?)(\:(?:\s+|$))/
-            },{
-                token: ["meta.tag", "keyword"],
-                regex: /(\w+?)(\s*\:(?:\s+|$))/
-            }, {
-                token : "keyword.operator",
-                regex : "<<\\w*:\\w*"
-            }, {
-                token : "keyword.operator",
-                regex : "-\\s*(?=[{])"
-            }, {
-                token : "string", // single line
-                regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
-            }, {
-                token : "string", // multi line string start
-                regex : '[\\|>]\\w*',
-                next : "qqstring"
-            }, {
-                token : "string", // single quoted string
-                regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
-            }, {
-                token : "constant.numeric", // float
-                regex : /[+\-]?[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?\b/
-            }, {
-                token : "constant.numeric", // other number
-                regex : /[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/
-            }, {
-                token : "constant.language.boolean",
-                regex : "(?:true|false|TRUE|FALSE|True|False|yes|no)\\b"
-            }, {
-                token : "invalid.illegal", // comments are not allowed
-                regex : "\\/\\/.*$"
-            }, {
-                token : "paren.lparen",
-                regex : "[[({]"
-            }, {
-                token : "paren.rparen",
-                regex : "[\\])}]"
-            }
-        ],
-        "qqstring" : [
-            {
-                token : "string",
-                regex : '(?=(?:(?:\\\\.)|(?:[^:]))*?:)',
-                next : "start"
-            }, {
-                token : "string",
-                regex : '.+'
-            }
-        ]};
-
-};
-
-oop.inherits(YamlHighlightRules, TextHighlightRules);
-
-exports.YamlHighlightRules = YamlHighlightRules;
-});
-
-define('ace/mode/matching_brace_outdent', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
-
-
-var Range = require("../range").Range;
-
-var MatchingBraceOutdent = function() {};
-
-(function() {
-
-    this.checkOutdent = function(line, input) {
-        if (! /^\s+$/.test(line))
-            return false;
-
-        return /^\s*\}/.test(input);
-    };
-
-    this.autoOutdent = function(doc, row) {
-        var line = doc.getLine(row);
-        var match = line.match(/^(\s*\})/);
-
-        if (!match) return 0;
-
-        var column = match[1].length;
-        var openBracePos = doc.findMatchingBracket({row: row, column: column});
-
-        if (!openBracePos || openBracePos.row == row) return 0;
-
-        var indent = this.$getIndent(doc.getLine(openBracePos.row));
-        doc.replace(new Range(row, 0, row, column-1), indent);
-    };
-
-    this.$getIndent = function(line) {
-        return line.match(/^\s*/)[0];
-    };
-
-}).call(MatchingBraceOutdent.prototype);
-
-exports.MatchingBraceOutdent = MatchingBraceOutdent;
-});
-
-define('ace/mode/folding/coffee', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
-
-
-var oop = require("../../lib/oop");
-var BaseFoldMode = require("./fold_mode").FoldMode;
-var Range = require("../../range").Range;
-
-var FoldMode = exports.FoldMode = function() {};
-oop.inherits(FoldMode, BaseFoldMode);
-
-(function() {
-
-    this.getFoldWidgetRange = function(session, foldStyle, row) {
-        var range = this.indentationBlock(session, row);
-        if (range)
-            return range;
-
-        var re = /\S/;
-        var line = session.getLine(row);
-        var startLevel = line.search(re);
-        if (startLevel == -1 || line[startLevel] != "#")
-            return;
-
-        var startColumn = line.length;
-        var maxRow = session.getLength();
-        var startRow = row;
-        var endRow = row;
-
-        while (++row < maxRow) {
-            line = session.getLine(row);
-            var level = line.search(re);
-
-            if (level == -1)
-                continue;
-
-            if (line[level] != "#")
-                break;
-
-            endRow = row;
-        }
-
-        if (endRow > startRow) {
-            var endColumn = session.getLine(endRow).length;
-            return new Range(startRow, startColumn, endRow, endColumn);
-        }
-    };
-    this.getFoldWidget = function(session, foldStyle, row) {
-        var line = session.getLine(row);
-        var indent = line.search(/\S/);
-        var next = session.getLine(row + 1);
-        var prev = session.getLine(row - 1);
-        var prevIndent = prev.search(/\S/);
-        var nextIndent = next.search(/\S/);
-
-        if (indent == -1) {
-            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : "";
-            return "";
-        }
-        if (prevIndent == -1) {
-            if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") {
-                session.foldWidgets[row - 1] = "";
-                session.foldWidgets[row + 1] = "";
-                return "start";
-            }
-        } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") {
-            if (session.getLine(row - 2).search(/\S/) == -1) {
-                session.foldWidgets[row - 1] = "start";
-                session.foldWidgets[row + 1] = "";
-                return "";
-            }
-        }
-
-        if (prevIndent!= -1 && prevIndent < indent)
-            session.foldWidgets[row - 1] = "start";
-        else
-            session.foldWidgets[row - 1] = "";
-
-        if (indent < nextIndent)
-            return "start";
-        else
-            return "";
-    };
-
-}).call(FoldMode.prototype);
-
-});
diff --git a/try/ace/theme-chaos.js b/try/ace/theme-chaos.js
deleted file mode 100644
index 06b80e7..0000000
--- a/try/ace/theme-chaos.js
+++ /dev/null
@@ -1,179 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- * 
- * Copyright 2011 Irakli Gozalishvili. All rights reserved.
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/chaos', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-chaos";
-exports.cssText = ".ace-chaos .ace_gutter {\
-background: #141414;\
-color: #595959;\
-border-right: 1px solid #282828;\
-}\
-.ace-chaos .ace_gutter-cell.ace_warning {\
-background-image: none;\
-background: #FC0;\
-border-left: none;\
-padding-left: 0;\
-color: #000;\
-}\
-.ace-chaos .ace_gutter-cell.ace_error {\
-background-position: -6px center;\
-background-image: none;\
-background: #F10;\
-border-left: none;\
-padding-left: 0;\
-color: #000;\
-}\
-.ace-chaos .ace_print-margin {\
-border-left: 1px solid #555;\
-right: 0;\
-background: #1D1D1D;\
-}\
-.ace-chaos {\
-background-color: #161616;\
-color: #E6E1DC;\
-}\
-.ace-chaos .ace_cursor {\
-border-left: 2px solid #FFFFFF;\
-}\
-.ace-chaos .ace_cursor.ace_overwrite {\
-border-left: 0px;\
-border-bottom: 1px solid #FFFFFF;\
-}\
-.ace-chaos .ace_marker-layer .ace_selection {\
-background: #494836;\
-}\
-.ace-chaos .ace_marker-layer .ace_step {\
-background: rgb(198, 219, 174);\
-}\
-.ace-chaos .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #FCE94F;\
-}\
-.ace-chaos .ace_marker-layer .ace_active-line {\
-background: #333;\
-}\
-.ace-chaos .ace_gutter-active-line {\
-background-color: #222;\
-}\
-.ace-chaos .ace_invisible {\
-color: #404040;\
-}\
-.ace-chaos .ace_keyword {\
-color:#00698F;\
-}\
-.ace-chaos .ace_keyword.ace_operator {\
-color:#FF308F;\
-}\
-.ace-chaos .ace_constant {\
-color:#1EDAFB;\
-}\
-.ace-chaos .ace_constant.ace_language {\
-color:#FDC251;\
-}\
-.ace-chaos .ace_constant.ace_library {\
-color:#8DFF0A;\
-}\
-.ace-chaos .ace_constant.ace_numeric {\
-color:#58C554;\
-}\
-.ace-chaos .ace_invalid {\
-color:#FFFFFF;\
-background-color:#990000;\
-}\
-.ace-chaos .ace_invalid.ace_deprecated {\
-color:#FFFFFF;\
-background-color:#990000;\
-}\
-.ace-chaos .ace_support {\
-color: #999;\
-}\
-.ace-chaos .ace_support.ace_function {\
-color:#00AEEF;\
-}\
-.ace-chaos .ace_function {\
-color:#00AEEF;\
-}\
-.ace-chaos .ace_string {\
-color:#58C554;\
-}\
-.ace-chaos .ace_comment {\
-color:#555;\
-font-style:italic;\
-padding-bottom: 0px;\
-}\
-.ace-chaos .ace_variable {\
-color:#997744;\
-}\
-.ace-chaos .ace_meta.ace_tag {\
-color:#BE53E6;\
-}\
-.ace-chaos .ace_entity.ace_other.ace_attribute-name {\
-color:#FFFF89;\
-}\
-.ace-chaos .ace_markup.ace_underline {\
-text-decoration: underline;\
-}\
-.ace-chaos .ace_fold-widget {\
-text-align: center;\
-}\
-.ace-chaos .ace_fold-widget:hover {\
-color: #777;\
-}\
-.ace-chaos .ace_fold-widget.ace_start,\
-.ace-chaos .ace_fold-widget.ace_end,\
-.ace-chaos .ace_fold-widget.ace_closed{\
-background: none;\
-border: none;\
-box-shadow: none;\
-}\
-.ace-chaos .ace_fold-widget.ace_start:after {\
-content: '▾'\
-}\
-.ace-chaos .ace_fold-widget.ace_end:after {\
-content: '▴'\
-}\
-.ace-chaos .ace_fold-widget.ace_closed:after {\
-content: '‣'\
-}\
-.ace-chaos .ace_indent-guide {\
-border-right:1px dotted #333;\
-margin-right:-1px;\
-}\
-.ace-chaos .ace_fold { \
-background: #222; \
-border-radius: 3px; \
-color: #7AF; \
-border: none; \
-}\
-.ace-chaos .ace_fold:hover {\
-background: #CCC; \
-color: #000;\
-}\
-";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-
-});
\ No newline at end of file
diff --git a/try/ace/theme-chrome.js b/try/ace/theme-chrome.js
deleted file mode 100644
index 666b3ce..0000000
--- a/try/ace/theme-chrome.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/chrome', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = false;
-exports.cssClass = "ace-chrome";
-exports.cssText = ".ace-chrome .ace_gutter {\
-background: #ebebeb;\
-color: #333;\
-overflow : hidden;\
-}\
-.ace-chrome .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8;\
-}\
-.ace-chrome {\
-background-color: #FFFFFF;\
-}\
-.ace-chrome .ace_cursor {\
-border-left: 2px solid black;\
-}\
-.ace-chrome .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid black;\
-}\
-.ace-chrome .ace_invisible {\
-color: rgb(191, 191, 191);\
-}\
-.ace-chrome .ace_constant.ace_buildin {\
-color: rgb(88, 72, 246);\
-}\
-.ace-chrome .ace_constant.ace_language {\
-color: rgb(88, 92, 246);\
-}\
-.ace-chrome .ace_constant.ace_library {\
-color: rgb(6, 150, 14);\
-}\
-.ace-chrome .ace_invalid {\
-background-color: rgb(153, 0, 0);\
-color: white;\
-}\
-.ace-chrome .ace_fold {\
-}\
-.ace-chrome .ace_support.ace_function {\
-color: rgb(60, 76, 114);\
-}\
-.ace-chrome .ace_support.ace_constant {\
-color: rgb(6, 150, 14);\
-}\
-.ace-chrome .ace_support.ace_type,\
-.ace-chrome .ace_support.ace_class\
-.ace-chrome .ace_support.ace_other {\
-color: rgb(109, 121, 222);\
-}\
-.ace-chrome .ace_variable.ace_parameter {\
-font-style:italic;\
-color:#FD971F;\
-}\
-.ace-chrome .ace_keyword.ace_operator {\
-color: rgb(104, 118, 135);\
-}\
-.ace-chrome .ace_comment {\
-color: #236e24;\
-}\
-.ace-chrome .ace_comment.ace_doc {\
-color: #236e24;\
-}\
-.ace-chrome .ace_comment.ace_doc.ace_tag {\
-color: #236e24;\
-}\
-.ace-chrome .ace_constant.ace_numeric {\
-color: rgb(0, 0, 205);\
-}\
-.ace-chrome .ace_variable {\
-color: rgb(49, 132, 149);\
-}\
-.ace-chrome .ace_xml-pe {\
-color: rgb(104, 104, 91);\
-}\
-.ace-chrome .ace_entity.ace_name.ace_function {\
-color: #0000A2;\
-}\
-.ace-chrome .ace_markup.ace_heading {\
-color: rgb(12, 7, 255);\
-}\
-.ace-chrome .ace_markup.ace_list {\
-color:rgb(185, 6, 144);\
-}\
-.ace-chrome .ace_marker-layer .ace_selection {\
-background: rgb(181, 213, 255);\
-}\
-.ace-chrome .ace_marker-layer .ace_step {\
-background: rgb(252, 255, 0);\
-}\
-.ace-chrome .ace_marker-layer .ace_stack {\
-background: rgb(164, 229, 101);\
-}\
-.ace-chrome .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgb(192, 192, 192);\
-}\
-.ace-chrome .ace_marker-layer .ace_active-line {\
-background: rgba(0, 0, 0, 0.07);\
-}\
-.ace-chrome .ace_gutter-active-line {\
-background-color : #dcdcdc;\
-}\
-.ace-chrome .ace_marker-layer .ace_selected-word {\
-background: rgb(250, 250, 255);\
-border: 1px solid rgb(200, 200, 250);\
-}\
-.ace-chrome .ace_storage,\
-.ace-chrome .ace_keyword,\
-.ace-chrome .ace_meta.ace_tag {\
-color: rgb(147, 15, 128);\
-}\
-.ace-chrome .ace_string.ace_regex {\
-color: rgb(255, 0, 0)\
-}\
-.ace-chrome .ace_string {\
-color: #1A1AA6;\
-}\
-.ace-chrome .ace_entity.ace_other.ace_attribute-name {\
-color: #994409;\
-}\
-.ace-chrome .ace_indent-guide {\
-background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
-}\
-";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-clouds.js b/try/ace/theme-clouds.js
deleted file mode 100644
index dd47d9c..0000000
--- a/try/ace/theme-clouds.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/clouds', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = false;
-exports.cssClass = "ace-clouds";
-exports.cssText = ".ace-clouds .ace_gutter {\
-background: #ebebeb;\
-color: #333\
-}\
-.ace-clouds .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8\
-}\
-.ace-clouds {\
-background-color: #FFFFFF;\
-color: #000000\
-}\
-.ace-clouds .ace_cursor {\
-border-left: 2px solid #000000\
-}\
-.ace-clouds .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #000000\
-}\
-.ace-clouds .ace_marker-layer .ace_selection {\
-background: #BDD5FC\
-}\
-.ace-clouds.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #FFFFFF;\
-border-radius: 2px\
-}\
-.ace-clouds .ace_marker-layer .ace_step {\
-background: rgb(255, 255, 0)\
-}\
-.ace-clouds .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #BFBFBF\
-}\
-.ace-clouds .ace_marker-layer .ace_active-line {\
-background: #FFFBD1\
-}\
-.ace-clouds .ace_gutter-active-line {\
-background-color : #dcdcdc\
-}\
-.ace-clouds .ace_marker-layer .ace_selected-word {\
-border: 1px solid #BDD5FC\
-}\
-.ace-clouds .ace_invisible {\
-color: #BFBFBF\
-}\
-.ace-clouds .ace_keyword,\
-.ace-clouds .ace_meta,\
-.ace-clouds .ace_support.ace_constant.ace_property-value {\
-color: #AF956F\
-}\
-.ace-clouds .ace_keyword.ace_operator {\
-color: #484848\
-}\
-.ace-clouds .ace_keyword.ace_other.ace_unit {\
-color: #96DC5F\
-}\
-.ace-clouds .ace_constant.ace_language {\
-color: #39946A\
-}\
-.ace-clouds .ace_constant.ace_numeric {\
-color: #46A609\
-}\
-.ace-clouds .ace_constant.ace_character.ace_entity {\
-color: #BF78CC\
-}\
-.ace-clouds .ace_invalid {\
-background-color: #FF002A\
-}\
-.ace-clouds .ace_fold {\
-background-color: #AF956F;\
-border-color: #000000\
-}\
-.ace-clouds .ace_storage,\
-.ace-clouds .ace_support.ace_class,\
-.ace-clouds .ace_support.ace_function,\
-.ace-clouds .ace_support.ace_other,\
-.ace-clouds .ace_support.ace_type {\
-color: #C52727\
-}\
-.ace-clouds .ace_string {\
-color: #5D90CD\
-}\
-.ace-clouds .ace_comment {\
-color: #BCC8BA\
-}\
-.ace-clouds .ace_entity.ace_name.ace_tag,\
-.ace-clouds .ace_entity.ace_other.ace_attribute-name {\
-color: #606060\
-}\
-.ace-clouds .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-clouds .ace_indent-guide {\
-background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-clouds_midnight.js b/try/ace/theme-clouds_midnight.js
deleted file mode 100644
index 44409ff..0000000
--- a/try/ace/theme-clouds_midnight.js
+++ /dev/null
@@ -1,134 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/clouds_midnight', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-clouds-midnight";
-exports.cssText = ".ace-clouds-midnight .ace_gutter {\
-background: #232323;\
-color: #929292\
-}\
-.ace-clouds-midnight .ace_print-margin {\
-width: 1px;\
-background: #232323\
-}\
-.ace-clouds-midnight{\
-background-color: #191919;\
-color: #929292\
-}\
-.ace-clouds-midnight .ace_cursor {\
-border-left: 2px solid #7DA5DC\
-}\
-.ace-clouds-midnight .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #7DA5DC\
-}\
-.ace-clouds-midnight .ace_marker-layer .ace_selection {\
-background: #000000\
-}\
-.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #191919;\
-border-radius: 2px\
-}\
-.ace-clouds-midnight .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-clouds-midnight .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #BFBFBF\
-}\
-.ace-clouds-midnight .ace_marker-layer .ace_active-line {\
-background: rgba(215, 215, 215, 0.031)\
-}\
-.ace-clouds-midnight .ace_gutter-active-line {\
-background-color: rgba(215, 215, 215, 0.031)\
-}\
-.ace-clouds-midnight .ace_marker-layer .ace_selected-word {\
-border: 1px solid #000000\
-}\
-.ace-clouds-midnight .ace_invisible {\
-color: #BFBFBF\
-}\
-.ace-clouds-midnight .ace_keyword,\
-.ace-clouds-midnight .ace_meta,\
-.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\
-color: #927C5D\
-}\
-.ace-clouds-midnight .ace_keyword.ace_operator {\
-color: #4B4B4B\
-}\
-.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\
-color: #366F1A\
-}\
-.ace-clouds-midnight .ace_constant.ace_language {\
-color: #39946A\
-}\
-.ace-clouds-midnight .ace_constant.ace_numeric {\
-color: #46A609\
-}\
-.ace-clouds-midnight .ace_constant.ace_character.ace_entity {\
-color: #A165AC\
-}\
-.ace-clouds-midnight .ace_invalid {\
-color: #FFFFFF;\
-background-color: #E92E2E\
-}\
-.ace-clouds-midnight .ace_fold {\
-background-color: #927C5D;\
-border-color: #929292\
-}\
-.ace-clouds-midnight .ace_storage,\
-.ace-clouds-midnight .ace_support.ace_class,\
-.ace-clouds-midnight .ace_support.ace_function,\
-.ace-clouds-midnight .ace_support.ace_other,\
-.ace-clouds-midnight .ace_support.ace_type {\
-color: #E92E2E\
-}\
-.ace-clouds-midnight .ace_string {\
-color: #5D90CD\
-}\
-.ace-clouds-midnight .ace_comment {\
-color: #3C403B\
-}\
-.ace-clouds-midnight .ace_entity.ace_name.ace_tag,\
-.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\
-color: #606060\
-}\
-.ace-clouds-midnight .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-clouds-midnight .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-cobalt.js b/try/ace/theme-cobalt.js
deleted file mode 100644
index 629d99a..0000000
--- a/try/ace/theme-cobalt.js
+++ /dev/null
@@ -1,148 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/cobalt', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-cobalt";
-exports.cssText = ".ace-cobalt .ace_gutter {\
-background: #011e3a;\
-color: #fff\
-}\
-.ace-cobalt .ace_print-margin {\
-width: 1px;\
-background: #011e3a\
-}\
-.ace-cobalt {\
-background-color: #002240;\
-color: #FFFFFF\
-}\
-.ace-cobalt .ace_cursor {\
-border-left: 2px solid #FFFFFF\
-}\
-.ace-cobalt .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #FFFFFF\
-}\
-.ace-cobalt .ace_marker-layer .ace_selection {\
-background: rgba(179, 101, 57, 0.75)\
-}\
-.ace-cobalt.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #002240;\
-border-radius: 2px\
-}\
-.ace-cobalt .ace_marker-layer .ace_step {\
-background: rgb(127, 111, 19)\
-}\
-.ace-cobalt .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(255, 255, 255, 0.15)\
-}\
-.ace-cobalt .ace_marker-layer .ace_active-line {\
-background: rgba(0, 0, 0, 0.35)\
-}\
-.ace-cobalt .ace_gutter-active-line {\
-background-color: rgba(0, 0, 0, 0.35)\
-}\
-.ace-cobalt .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgba(179, 101, 57, 0.75)\
-}\
-.ace-cobalt .ace_invisible {\
-color: rgba(255, 255, 255, 0.15)\
-}\
-.ace-cobalt .ace_keyword,\
-.ace-cobalt .ace_meta {\
-color: #FF9D00\
-}\
-.ace-cobalt .ace_constant,\
-.ace-cobalt .ace_constant.ace_character,\
-.ace-cobalt .ace_constant.ace_character.ace_escape,\
-.ace-cobalt .ace_constant.ace_other {\
-color: #FF628C\
-}\
-.ace-cobalt .ace_invalid {\
-color: #F8F8F8;\
-background-color: #800F00\
-}\
-.ace-cobalt .ace_support {\
-color: #80FFBB\
-}\
-.ace-cobalt .ace_support.ace_constant {\
-color: #EB939A\
-}\
-.ace-cobalt .ace_fold {\
-background-color: #FF9D00;\
-border-color: #FFFFFF\
-}\
-.ace-cobalt .ace_support.ace_function {\
-color: #FFB054\
-}\
-.ace-cobalt .ace_storage {\
-color: #FFEE80\
-}\
-.ace-cobalt .ace_entity {\
-color: #FFDD00\
-}\
-.ace-cobalt .ace_string {\
-color: #3AD900\
-}\
-.ace-cobalt .ace_string.ace_regexp {\
-color: #80FFC2\
-}\
-.ace-cobalt .ace_comment {\
-font-style: italic;\
-color: #0088FF\
-}\
-.ace-cobalt .ace_variable {\
-color: #CCCCCC\
-}\
-.ace-cobalt .ace_variable.ace_language {\
-color: #FF80E1\
-}\
-.ace-cobalt .ace_meta.ace_tag {\
-color: #9EFFFF\
-}\
-.ace-cobalt .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-cobalt .ace_markup.ace_heading {\
-color: #C8E4FD;\
-background-color: #001221\
-}\
-.ace-cobalt .ace_markup.ace_list {\
-background-color: #130D26\
-}\
-.ace-cobalt .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-crimson_editor.js b/try/ace/theme-crimson_editor.js
deleted file mode 100644
index 2171239..0000000
--- a/try/ace/theme-crimson_editor.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/crimson_editor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-exports.isDark = false;
-exports.cssText = ".ace-crimson-editor .ace_gutter {\
-background: #ebebeb;\
-color: #333;\
-overflow : hidden;\
-}\
-.ace-crimson-editor .ace_gutter-layer {\
-width: 100%;\
-text-align: right;\
-}\
-.ace-crimson-editor .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8;\
-}\
-.ace-crimson-editor {\
-background-color: #FFFFFF;\
-color: rgb(64, 64, 64);\
-}\
-.ace-crimson-editor .ace_cursor {\
-border-left: 2px solid black;\
-}\
-.ace-crimson-editor .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid black;\
-}\
-.ace-crimson-editor .ace_invisible {\
-color: rgb(191, 191, 191);\
-}\
-.ace-crimson-editor .ace_identifier {\
-color: black;\
-}\
-.ace-crimson-editor .ace_keyword {\
-color: blue;\
-}\
-.ace-crimson-editor .ace_constant.ace_buildin {\
-color: rgb(88, 72, 246);\
-}\
-.ace-crimson-editor .ace_constant.ace_language {\
-color: rgb(255, 156, 0);\
-}\
-.ace-crimson-editor .ace_constant.ace_library {\
-color: rgb(6, 150, 14);\
-}\
-.ace-crimson-editor .ace_invalid {\
-text-decoration: line-through;\
-color: rgb(224, 0, 0);\
-}\
-.ace-crimson-editor .ace_fold {\
-}\
-.ace-crimson-editor .ace_support.ace_function {\
-color: rgb(192, 0, 0);\
-}\
-.ace-crimson-editor .ace_support.ace_constant {\
-color: rgb(6, 150, 14);\
-}\
-.ace-crimson-editor .ace_support.ace_type,\
-.ace-crimson-editor .ace_support.ace_class {\
-color: rgb(109, 121, 222);\
-}\
-.ace-crimson-editor .ace_keyword.ace_operator {\
-color: rgb(49, 132, 149);\
-}\
-.ace-crimson-editor .ace_string {\
-color: rgb(128, 0, 128);\
-}\
-.ace-crimson-editor .ace_comment {\
-color: rgb(76, 136, 107);\
-}\
-.ace-crimson-editor .ace_comment.ace_doc {\
-color: rgb(0, 102, 255);\
-}\
-.ace-crimson-editor .ace_comment.ace_doc.ace_tag {\
-color: rgb(128, 159, 191);\
-}\
-.ace-crimson-editor .ace_constant.ace_numeric {\
-color: rgb(0, 0, 64);\
-}\
-.ace-crimson-editor .ace_variable {\
-color: rgb(0, 64, 128);\
-}\
-.ace-crimson-editor .ace_xml-pe {\
-color: rgb(104, 104, 91);\
-}\
-.ace-crimson-editor .ace_marker-layer .ace_selection {\
-background: rgb(181, 213, 255);\
-}\
-.ace-crimson-editor .ace_marker-layer .ace_step {\
-background: rgb(252, 255, 0);\
-}\
-.ace-crimson-editor .ace_marker-layer .ace_stack {\
-background: rgb(164, 229, 101);\
-}\
-.ace-crimson-editor .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgb(192, 192, 192);\
-}\
-.ace-crimson-editor .ace_marker-layer .ace_active-line {\
-background: rgb(232, 242, 254);\
-}\
-.ace-crimson-editor .ace_gutter-active-line {\
-background-color : #dcdcdc;\
-}\
-.ace-crimson-editor .ace_meta.ace_tag {\
-color:rgb(28, 2, 255);\
-}\
-.ace-crimson-editor .ace_marker-layer .ace_selected-word {\
-background: rgb(250, 250, 255);\
-border: 1px solid rgb(200, 200, 250);\
-}\
-.ace-crimson-editor .ace_string.ace_regex {\
-color: rgb(192, 0, 192);\
-}\
-.ace-crimson-editor .ace_indent-guide {\
-background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
-}";
-
-exports.cssClass = "ace-crimson-editor";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-dawn.js b/try/ace/theme-dawn.js
deleted file mode 100644
index 65ec17f..0000000
--- a/try/ace/theme-dawn.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/dawn', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = false;
-exports.cssClass = "ace-dawn";
-exports.cssText = ".ace-dawn .ace_gutter {\
-background: #ebebeb;\
-color: #333\
-}\
-.ace-dawn .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8\
-}\
-.ace-dawn {\
-background-color: #F9F9F9;\
-color: #080808\
-}\
-.ace-dawn .ace_cursor {\
-border-left: 2px solid #000000\
-}\
-.ace-dawn .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #000000\
-}\
-.ace-dawn .ace_marker-layer .ace_selection {\
-background: rgba(39, 95, 255, 0.30)\
-}\
-.ace-dawn.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #F9F9F9;\
-border-radius: 2px\
-}\
-.ace-dawn .ace_marker-layer .ace_step {\
-background: rgb(255, 255, 0)\
-}\
-.ace-dawn .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(75, 75, 126, 0.50)\
-}\
-.ace-dawn .ace_marker-layer .ace_active-line {\
-background: rgba(36, 99, 180, 0.12)\
-}\
-.ace-dawn .ace_gutter-active-line {\
-background-color : #dcdcdc\
-}\
-.ace-dawn .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgba(39, 95, 255, 0.30)\
-}\
-.ace-dawn .ace_invisible {\
-color: rgba(75, 75, 126, 0.50)\
-}\
-.ace-dawn .ace_keyword,\
-.ace-dawn .ace_meta {\
-color: #794938\
-}\
-.ace-dawn .ace_constant,\
-.ace-dawn .ace_constant.ace_character,\
-.ace-dawn .ace_constant.ace_character.ace_escape,\
-.ace-dawn .ace_constant.ace_other {\
-color: #811F24\
-}\
-.ace-dawn .ace_invalid.ace_illegal {\
-text-decoration: underline;\
-font-style: italic;\
-color: #F8F8F8;\
-background-color: #B52A1D\
-}\
-.ace-dawn .ace_invalid.ace_deprecated {\
-text-decoration: underline;\
-font-style: italic;\
-color: #B52A1D\
-}\
-.ace-dawn .ace_support {\
-color: #691C97\
-}\
-.ace-dawn .ace_support.ace_constant {\
-color: #B4371F\
-}\
-.ace-dawn .ace_fold {\
-background-color: #794938;\
-border-color: #080808\
-}\
-.ace-dawn .ace_markup.ace_list,\
-.ace-dawn .ace_support.ace_function {\
-color: #693A17\
-}\
-.ace-dawn .ace_storage {\
-font-style: italic;\
-color: #A71D5D\
-}\
-.ace-dawn .ace_string {\
-color: #0B6125\
-}\
-.ace-dawn .ace_string.ace_regexp {\
-color: #CF5628\
-}\
-.ace-dawn .ace_comment {\
-font-style: italic;\
-color: #5A525F\
-}\
-.ace-dawn .ace_variable {\
-color: #234A97\
-}\
-.ace-dawn .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-dawn .ace_markup.ace_heading {\
-color: #19356D\
-}\
-.ace-dawn .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-dreamweaver.js b/try/ace/theme-dreamweaver.js
deleted file mode 100644
index ccb0012..0000000
--- a/try/ace/theme-dreamweaver.js
+++ /dev/null
@@ -1,171 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/dreamweaver', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-exports.isDark = false;
-exports.cssClass = "ace-dreamweaver";
-exports.cssText = ".ace-dreamweaver .ace_gutter {\
-background: #e8e8e8;\
-color: #333;\
-}\
-.ace-dreamweaver .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8;\
-}\
-.ace-dreamweaver {\
-background-color: #FFFFFF;\
-}\
-.ace-dreamweaver .ace_fold {\
-background-color: #757AD8;\
-}\
-.ace-dreamweaver .ace_cursor {\
-border-left: 2px solid black;\
-}\
-.ace-dreamweaver .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid black;\
-}\
-.ace-dreamweaver .ace_invisible {\
-color: rgb(191, 191, 191);\
-}\
-.ace-dreamweaver .ace_storage,\
-.ace-dreamweaver .ace_keyword {\
-color: blue;\
-}\
-.ace-dreamweaver .ace_constant.ace_buildin {\
-color: rgb(88, 72, 246);\
-}\
-.ace-dreamweaver .ace_constant.ace_language {\
-color: rgb(88, 92, 246);\
-}\
-.ace-dreamweaver .ace_constant.ace_library {\
-color: rgb(6, 150, 14);\
-}\
-.ace-dreamweaver .ace_invalid {\
-background-color: rgb(153, 0, 0);\
-color: white;\
-}\
-.ace-dreamweaver .ace_support.ace_function {\
-color: rgb(60, 76, 114);\
-}\
-.ace-dreamweaver .ace_support.ace_constant {\
-color: rgb(6, 150, 14);\
-}\
-.ace-dreamweaver .ace_support.ace_type,\
-.ace-dreamweaver .ace_support.ace_class {\
-color: #009;\
-}\
-.ace-dreamweaver .ace_support.ace_php_tag {\
-color: #f00;\
-}\
-.ace-dreamweaver .ace_keyword.ace_operator {\
-color: rgb(104, 118, 135);\
-}\
-.ace-dreamweaver .ace_string {\
-color: #00F;\
-}\
-.ace-dreamweaver .ace_comment {\
-color: rgb(76, 136, 107);\
-}\
-.ace-dreamweaver .ace_comment.ace_doc {\
-color: rgb(0, 102, 255);\
-}\
-.ace-dreamweaver .ace_comment.ace_doc.ace_tag {\
-color: rgb(128, 159, 191);\
-}\
-.ace-dreamweaver .ace_constant.ace_numeric {\
-color: rgb(0, 0, 205);\
-}\
-.ace-dreamweaver .ace_variable {\
-color: #06F\
-}\
-.ace-dreamweaver .ace_xml-pe {\
-color: rgb(104, 104, 91);\
-}\
-.ace-dreamweaver .ace_entity.ace_name.ace_function {\
-color: #00F;\
-}\
-.ace-dreamweaver .ace_markup.ace_heading {\
-color: rgb(12, 7, 255);\
-}\
-.ace-dreamweaver .ace_markup.ace_list {\
-color:rgb(185, 6, 144);\
-}\
-.ace-dreamweaver .ace_marker-layer .ace_selection {\
-background: rgb(181, 213, 255);\
-}\
-.ace-dreamweaver .ace_marker-layer .ace_step {\
-background: rgb(252, 255, 0);\
-}\
-.ace-dreamweaver .ace_marker-layer .ace_stack {\
-background: rgb(164, 229, 101);\
-}\
-.ace-dreamweaver .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgb(192, 192, 192);\
-}\
-.ace-dreamweaver .ace_marker-layer .ace_active-line {\
-background: rgba(0, 0, 0, 0.07);\
-}\
-.ace-dreamweaver .ace_marker-layer .ace_selected-word {\
-background: rgb(250, 250, 255);\
-border: 1px solid rgb(200, 200, 250);\
-}\
-.ace-dreamweaver .ace_meta.ace_tag {\
-color:#009;\
-}\
-.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\
-color:#060;\
-}\
-.ace-dreamweaver .ace_meta.ace_tag.ace_form {\
-color:#F90;\
-}\
-.ace-dreamweaver .ace_meta.ace_tag.ace_image {\
-color:#909;\
-}\
-.ace-dreamweaver .ace_meta.ace_tag.ace_script {\
-color:#900;\
-}\
-.ace-dreamweaver .ace_meta.ace_tag.ace_style {\
-color:#909;\
-}\
-.ace-dreamweaver .ace_meta.ace_tag.ace_table {\
-color:#099;\
-}\
-.ace-dreamweaver .ace_string.ace_regex {\
-color: rgb(255, 0, 0)\
-}\
-.ace-dreamweaver .ace_indent-guide {\
-background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-eclipse.js b/try/ace/theme-eclipse.js
deleted file mode 100644
index b7b0b62..0000000
--- a/try/ace/theme-eclipse.js
+++ /dev/null
@@ -1,124 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/eclipse', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-
-exports.isDark = false;
-exports.cssText = ".ace-eclipse .ace_gutter {\
-background: #ebebeb;\
-border-right: 1px solid rgb(159, 159, 159);\
-color: rgb(136, 136, 136);\
-}\
-.ace-eclipse .ace_print-margin {\
-width: 1px;\
-background: #ebebeb;\
-}\
-.ace-eclipse {\
-background-color: #FFFFFF;\
-}\
-.ace-eclipse .ace_fold {\
-background-color: rgb(60, 76, 114);\
-}\
-.ace-eclipse .ace_cursor {\
-border-left: 2px solid black;\
-}\
-.ace-eclipse .ace_storage,\
-.ace-eclipse .ace_keyword,\
-.ace-eclipse .ace_variable {\
-color: rgb(127, 0, 85);\
-}\
-.ace-eclipse .ace_constant.ace_buildin {\
-color: rgb(88, 72, 246);\
-}\
-.ace-eclipse .ace_constant.ace_library {\
-color: rgb(6, 150, 14);\
-}\
-.ace-eclipse .ace_function {\
-color: rgb(60, 76, 114);\
-}\
-.ace-eclipse .ace_string {\
-color: rgb(42, 0, 255);\
-}\
-.ace-eclipse .ace_comment {\
-color: rgb(113, 150, 130);\
-}\
-.ace-eclipse .ace_comment.ace_doc {\
-color: rgb(63, 95, 191);\
-}\
-.ace-eclipse .ace_comment.ace_doc.ace_tag {\
-color: rgb(127, 159, 191);\
-}\
-.ace-eclipse .ace_constant.ace_numeric {\
-color: darkblue;\
-}\
-.ace-eclipse .ace_tag {\
-color: rgb(25, 118, 116);\
-}\
-.ace-eclipse .ace_type {\
-color: rgb(127, 0, 127);\
-}\
-.ace-eclipse .ace_xml-pe {\
-color: rgb(104, 104, 91);\
-}\
-.ace-eclipse .ace_marker-layer .ace_selection {\
-background: rgb(181, 213, 255);\
-}\
-.ace-eclipse .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgb(192, 192, 192);\
-}\
-.ace-eclipse .ace_meta.ace_tag {\
-color:rgb(25, 118, 116);\
-}\
-.ace-eclipse .ace_invisible {\
-color: #ddd;\
-}\
-.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\
-color:rgb(127, 0, 127);\
-}\
-.ace-eclipse .ace_marker-layer .ace_step {\
-background: rgb(255, 255, 0);\
-}\
-.ace-eclipse .ace_marker-layer .ace_active-line {\
-background: rgb(232, 242, 254);\
-}\
-.ace-eclipse .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgb(181, 213, 255);\
-}\
-.ace-eclipse .ace_indent-guide {\
-background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
-}";
-
-exports.cssClass = "ace-eclipse";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-github.js b/try/ace/theme-github.js
deleted file mode 100644
index 7e690c6..0000000
--- a/try/ace/theme-github.js
+++ /dev/null
@@ -1,135 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/github', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = false;
-exports.cssClass = "ace-github";
-exports.cssText = "/* CSS style content from github's default pygments highlighter template.\
-Cursor and selection styles from textmate.css. */\
-.ace-github .ace_gutter {\
-background: #e8e8e8;\
-color: #AAA;\
-}\
-.ace-github  {\
-background: #fff;\
-color: #000;\
-}\
-.ace-github .ace_keyword {\
-font-weight: bold;\
-}\
-.ace-github .ace_string {\
-color: #D14;\
-}\
-.ace-github .ace_variable.ace_class {\
-color: teal;\
-}\
-.ace-github .ace_constant.ace_numeric {\
-color: #099;\
-}\
-.ace-github .ace_constant.ace_buildin {\
-color: #0086B3;\
-}\
-.ace-github .ace_support.ace_function {\
-color: #0086B3;\
-}\
-.ace-github .ace_comment {\
-color: #998;\
-font-style: italic;\
-}\
-.ace-github .ace_variable.ace_language  {\
-color: #0086B3;\
-}\
-.ace-github .ace_paren {\
-font-weight: bold;\
-}\
-.ace-github .ace_boolean {\
-font-weight: bold;\
-}\
-.ace-github .ace_string.ace_regexp {\
-color: #009926;\
-font-weight: normal;\
-}\
-.ace-github .ace_variable.ace_instance {\
-color: teal;\
-}\
-.ace-github .ace_constant.ace_language {\
-font-weight: bold;\
-}\
-.ace-github .ace_cursor {\
-border-left: 2px solid black;\
-}\
-.ace-github .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid black;\
-}\
-.ace-github .ace_marker-layer .ace_active-line {\
-background: rgb(255, 255, 204);\
-}\
-.ace-github .ace_marker-layer .ace_selection {\
-background: rgb(181, 213, 255);\
-}\
-.ace-github.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px white;\
-border-radius: 2px;\
-}\
-/* bold keywords cause cursor issues for some fonts */\
-/* this disables bold style for editor and keeps for static highlighter */\
-.ace-github.ace_nobold .ace_line > span {\
-font-weight: normal !important;\
-}\
-.ace-github .ace_marker-layer .ace_step {\
-background: rgb(252, 255, 0);\
-}\
-.ace-github .ace_marker-layer .ace_stack {\
-background: rgb(164, 229, 101);\
-}\
-.ace-github .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgb(192, 192, 192);\
-}\
-.ace-github .ace_gutter-active-line {\
-background-color : rgba(0, 0, 0, 0.07);\
-}\
-.ace-github .ace_marker-layer .ace_selected-word {\
-background: rgb(250, 250, 255);\
-border: 1px solid rgb(200, 200, 250);\
-}\
-.ace-github .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8;\
-}\
-.ace-github .ace_indent-guide {\
-background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\
-}";
-
-    var dom = require("../lib/dom");
-    dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-idle_fingers.js b/try/ace/theme-idle_fingers.js
deleted file mode 100644
index 9ecfe27..0000000
--- a/try/ace/theme-idle_fingers.js
+++ /dev/null
@@ -1,137 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/idle_fingers', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-idle-fingers";
-exports.cssText = ".ace-idle-fingers .ace_gutter {\
-background: #3b3b3b;\
-color: #fff\
-}\
-.ace-idle-fingers .ace_print-margin {\
-width: 1px;\
-background: #3b3b3b\
-}\
-.ace-idle-fingers {\
-background-color: #323232;\
-color: #FFFFFF\
-}\
-.ace-idle-fingers .ace_text-layer {\
-color: #FFFFFF\
-}\
-.ace-idle-fingers .ace_cursor {\
-border-left: 2px solid #91FF00\
-}\
-.ace-idle-fingers .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #91FF00\
-}\
-.ace-idle-fingers .ace_marker-layer .ace_selection {\
-background: rgba(90, 100, 126, 0.88)\
-}\
-.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #323232;\
-border-radius: 2px\
-}\
-.ace-idle-fingers .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-idle-fingers .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #404040\
-}\
-.ace-idle-fingers .ace_marker-layer .ace_active-line {\
-background: #353637\
-}\
-.ace-idle-fingers .ace_gutter-active-line {\
-background-color: #353637\
-}\
-.ace-idle-fingers .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgba(90, 100, 126, 0.88)\
-}\
-.ace-idle-fingers .ace_invisible {\
-color: #404040\
-}\
-.ace-idle-fingers .ace_keyword,\
-.ace-idle-fingers .ace_meta {\
-color: #CC7833\
-}\
-.ace-idle-fingers .ace_constant,\
-.ace-idle-fingers .ace_constant.ace_character,\
-.ace-idle-fingers .ace_constant.ace_character.ace_escape,\
-.ace-idle-fingers .ace_constant.ace_other,\
-.ace-idle-fingers .ace_support.ace_constant {\
-color: #6C99BB\
-}\
-.ace-idle-fingers .ace_invalid {\
-color: #FFFFFF;\
-background-color: #FF0000\
-}\
-.ace-idle-fingers .ace_fold {\
-background-color: #CC7833;\
-border-color: #FFFFFF\
-}\
-.ace-idle-fingers .ace_support.ace_function {\
-color: #B83426\
-}\
-.ace-idle-fingers .ace_variable.ace_parameter {\
-font-style: italic\
-}\
-.ace-idle-fingers .ace_string {\
-color: #A5C261\
-}\
-.ace-idle-fingers .ace_string.ace_regexp {\
-color: #CCCC33\
-}\
-.ace-idle-fingers .ace_comment {\
-font-style: italic;\
-color: #BC9458\
-}\
-.ace-idle-fingers .ace_meta.ace_tag {\
-color: #FFE5BB\
-}\
-.ace-idle-fingers .ace_entity.ace_name {\
-color: #FFC66D\
-}\
-.ace-idle-fingers .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-idle-fingers .ace_collab.ace_user1 {\
-color: #323232;\
-background-color: #FFF980\
-}\
-.ace-idle-fingers .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-kr.js b/try/ace/theme-kr.js
deleted file mode 100644
index 66242c5..0000000
--- a/try/ace/theme-kr.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/kr_theme', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-kr-theme";
-exports.cssText = ".ace-kr-theme .ace_gutter {\
-background: #1c1917;\
-color: #FCFFE0\
-}\
-.ace-kr-theme .ace_print-margin {\
-width: 1px;\
-background: #1c1917\
-}\
-.ace-kr-theme {\
-background-color: #0B0A09;\
-color: #FCFFE0\
-}\
-.ace-kr-theme .ace_cursor {\
-border-left: 2px solid #FF9900\
-}\
-.ace-kr-theme .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #FF9900\
-}\
-.ace-kr-theme .ace_marker-layer .ace_selection {\
-background: rgba(170, 0, 255, 0.45)\
-}\
-.ace-kr-theme.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #0B0A09;\
-border-radius: 2px\
-}\
-.ace-kr-theme .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-kr-theme .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(255, 177, 111, 0.32)\
-}\
-.ace-kr-theme .ace_marker-layer .ace_active-line {\
-background: #38403D\
-}\
-.ace-kr-theme .ace_gutter-active-line {\
-background-color : #38403D\
-}\
-.ace-kr-theme .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgba(170, 0, 255, 0.45)\
-}\
-.ace-kr-theme .ace_invisible {\
-color: rgba(255, 177, 111, 0.32)\
-}\
-.ace-kr-theme .ace_keyword,\
-.ace-kr-theme .ace_meta {\
-color: #949C8B\
-}\
-.ace-kr-theme .ace_constant,\
-.ace-kr-theme .ace_constant.ace_character,\
-.ace-kr-theme .ace_constant.ace_character.ace_escape,\
-.ace-kr-theme .ace_constant.ace_other {\
-color: rgba(210, 117, 24, 0.76)\
-}\
-.ace-kr-theme .ace_invalid {\
-color: #F8F8F8;\
-background-color: #A41300\
-}\
-.ace-kr-theme .ace_support {\
-color: #9FC28A\
-}\
-.ace-kr-theme .ace_support.ace_constant {\
-color: #C27E66\
-}\
-.ace-kr-theme .ace_fold {\
-background-color: #949C8B;\
-border-color: #FCFFE0\
-}\
-.ace-kr-theme .ace_support.ace_function {\
-color: #85873A\
-}\
-.ace-kr-theme .ace_storage {\
-color: #FFEE80\
-}\
-.ace-kr-theme .ace_string {\
-color: rgba(164, 161, 181, 0.8)\
-}\
-.ace-kr-theme .ace_string.ace_regexp {\
-color: rgba(125, 255, 192, 0.65)\
-}\
-.ace-kr-theme .ace_comment {\
-font-style: italic;\
-color: #706D5B\
-}\
-.ace-kr-theme .ace_variable {\
-color: #D1A796\
-}\
-.ace-kr-theme .ace_variable.ace_language {\
-color: #FF80E1\
-}\
-.ace-kr-theme .ace_meta.ace_tag {\
-color: #BABD9C\
-}\
-.ace-kr-theme .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-kr-theme .ace_markup.ace_list {\
-background-color: #0F0040\
-}\
-.ace-kr-theme .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-merbivore.js b/try/ace/theme-merbivore.js
deleted file mode 100644
index 64e6769..0000000
--- a/try/ace/theme-merbivore.js
+++ /dev/null
@@ -1,133 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/merbivore', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-merbivore";
-exports.cssText = ".ace-merbivore .ace_gutter {\
-background: #202020;\
-color: #E6E1DC\
-}\
-.ace-merbivore .ace_print-margin {\
-width: 1px;\
-background: #555651\
-}\
-.ace-merbivore {\
-background-color: #161616;\
-color: #E6E1DC\
-}\
-.ace-merbivore .ace_cursor {\
-border-left: 2px solid #FFFFFF\
-}\
-.ace-merbivore .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #FFFFFF\
-}\
-.ace-merbivore .ace_marker-layer .ace_selection {\
-background: #454545\
-}\
-.ace-merbivore.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #161616;\
-border-radius: 2px\
-}\
-.ace-merbivore .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-merbivore .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #404040\
-}\
-.ace-merbivore .ace_marker-layer .ace_active-line {\
-background: #333435\
-}\
-.ace-merbivore .ace_gutter-active-line {\
-background-color: #333435\
-}\
-.ace-merbivore .ace_marker-layer .ace_selected-word {\
-border: 1px solid #454545\
-}\
-.ace-merbivore .ace_invisible {\
-color: #404040\
-}\
-.ace-merbivore .ace_entity.ace_name.ace_tag,\
-.ace-merbivore .ace_keyword,\
-.ace-merbivore .ace_meta,\
-.ace-merbivore .ace_meta.ace_tag,\
-.ace-merbivore .ace_storage,\
-.ace-merbivore .ace_support.ace_function {\
-color: #FC6F09\
-}\
-.ace-merbivore .ace_constant,\
-.ace-merbivore .ace_constant.ace_character,\
-.ace-merbivore .ace_constant.ace_character.ace_escape,\
-.ace-merbivore .ace_constant.ace_other,\
-.ace-merbivore .ace_support.ace_type {\
-color: #1EDAFB\
-}\
-.ace-merbivore .ace_constant.ace_character.ace_escape {\
-color: #519F50\
-}\
-.ace-merbivore .ace_constant.ace_language {\
-color: #FDC251\
-}\
-.ace-merbivore .ace_constant.ace_library,\
-.ace-merbivore .ace_string,\
-.ace-merbivore .ace_support.ace_constant {\
-color: #8DFF0A\
-}\
-.ace-merbivore .ace_constant.ace_numeric {\
-color: #58C554\
-}\
-.ace-merbivore .ace_invalid {\
-color: #FFFFFF;\
-background-color: #990000\
-}\
-.ace-merbivore .ace_fold {\
-background-color: #FC6F09;\
-border-color: #E6E1DC\
-}\
-.ace-merbivore .ace_comment {\
-font-style: italic;\
-color: #AD2EA4\
-}\
-.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\
-color: #FFFF89\
-}\
-.ace-merbivore .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-merbivore .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-merbivore_soft.js b/try/ace/theme-merbivore_soft.js
deleted file mode 100644
index 5f58094..0000000
--- a/try/ace/theme-merbivore_soft.js
+++ /dev/null
@@ -1,134 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/merbivore_soft', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-merbivore-soft";
-exports.cssText = ".ace-merbivore-soft .ace_gutter {\
-background: #262424;\
-color: #E6E1DC\
-}\
-.ace-merbivore-soft .ace_print-margin {\
-width: 1px;\
-background: #262424\
-}\
-.ace-merbivore-soft {\
-background-color: #1C1C1C;\
-color: #E6E1DC\
-}\
-.ace-merbivore-soft .ace_cursor {\
-border-left: 2px solid #FFFFFF\
-}\
-.ace-merbivore-soft .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #FFFFFF\
-}\
-.ace-merbivore-soft .ace_marker-layer .ace_selection {\
-background: #494949\
-}\
-.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #1C1C1C;\
-border-radius: 2px\
-}\
-.ace-merbivore-soft .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-merbivore-soft .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #404040\
-}\
-.ace-merbivore-soft .ace_marker-layer .ace_active-line {\
-background: #333435\
-}\
-.ace-merbivore-soft .ace_gutter-active-line {\
-background-color: #333435\
-}\
-.ace-merbivore-soft .ace_marker-layer .ace_selected-word {\
-border: 1px solid #494949\
-}\
-.ace-merbivore-soft .ace_invisible {\
-color: #404040\
-}\
-.ace-merbivore-soft .ace_entity.ace_name.ace_tag,\
-.ace-merbivore-soft .ace_keyword,\
-.ace-merbivore-soft .ace_meta,\
-.ace-merbivore-soft .ace_meta.ace_tag,\
-.ace-merbivore-soft .ace_storage {\
-color: #FC803A\
-}\
-.ace-merbivore-soft .ace_constant,\
-.ace-merbivore-soft .ace_constant.ace_character,\
-.ace-merbivore-soft .ace_constant.ace_character.ace_escape,\
-.ace-merbivore-soft .ace_constant.ace_other,\
-.ace-merbivore-soft .ace_support.ace_type {\
-color: #68C1D8\
-}\
-.ace-merbivore-soft .ace_constant.ace_character.ace_escape {\
-color: #B3E5B4\
-}\
-.ace-merbivore-soft .ace_constant.ace_language {\
-color: #E1C582\
-}\
-.ace-merbivore-soft .ace_constant.ace_library,\
-.ace-merbivore-soft .ace_string,\
-.ace-merbivore-soft .ace_support.ace_constant {\
-color: #8EC65F\
-}\
-.ace-merbivore-soft .ace_constant.ace_numeric {\
-color: #7FC578\
-}\
-.ace-merbivore-soft .ace_invalid,\
-.ace-merbivore-soft .ace_invalid.ace_deprecated {\
-color: #FFFFFF;\
-background-color: #FE3838\
-}\
-.ace-merbivore-soft .ace_fold {\
-background-color: #FC803A;\
-border-color: #E6E1DC\
-}\
-.ace-merbivore-soft .ace_comment,\
-.ace-merbivore-soft .ace_meta {\
-font-style: italic;\
-color: #AC4BB8\
-}\
-.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\
-color: #EAF1A3\
-}\
-.ace-merbivore-soft .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-merbivore-soft .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-mono_industrial.js b/try/ace/theme-mono_industrial.js
deleted file mode 100644
index 3ec23f7..0000000
--- a/try/ace/theme-mono_industrial.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/mono_industrial', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-mono-industrial";
-exports.cssText = ".ace-mono-industrial .ace_gutter {\
-background: #1d2521;\
-color: #C5C9C9\
-}\
-.ace-mono-industrial .ace_print-margin {\
-width: 1px;\
-background: #555651\
-}\
-.ace-mono-industrial {\
-background-color: #222C28;\
-color: #FFFFFF\
-}\
-.ace-mono-industrial .ace_cursor {\
-border-left: 2px solid #FFFFFF\
-}\
-.ace-mono-industrial .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #FFFFFF\
-}\
-.ace-mono-industrial .ace_marker-layer .ace_selection {\
-background: rgba(145, 153, 148, 0.40)\
-}\
-.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #222C28;\
-border-radius: 2px\
-}\
-.ace-mono-industrial .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-mono-industrial .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(102, 108, 104, 0.50)\
-}\
-.ace-mono-industrial .ace_marker-layer .ace_active-line {\
-background: rgba(12, 13, 12, 0.25)\
-}\
-.ace-mono-industrial .ace_gutter-active-line {\
-background-color: rgba(12, 13, 12, 0.25)\
-}\
-.ace-mono-industrial .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgba(145, 153, 148, 0.40)\
-}\
-.ace-mono-industrial .ace_invisible {\
-color: rgba(102, 108, 104, 0.50)\
-}\
-.ace-mono-industrial .ace_string {\
-background-color: #151C19;\
-color: #FFFFFF\
-}\
-.ace-mono-industrial .ace_keyword,\
-.ace-mono-industrial .ace_meta {\
-color: #A39E64\
-}\
-.ace-mono-industrial .ace_constant,\
-.ace-mono-industrial .ace_constant.ace_character,\
-.ace-mono-industrial .ace_constant.ace_character.ace_escape,\
-.ace-mono-industrial .ace_constant.ace_numeric,\
-.ace-mono-industrial .ace_constant.ace_other {\
-color: #E98800\
-}\
-.ace-mono-industrial .ace_entity.ace_name.ace_function,\
-.ace-mono-industrial .ace_keyword.ace_operator,\
-.ace-mono-industrial .ace_variable {\
-color: #A8B3AB\
-}\
-.ace-mono-industrial .ace_invalid {\
-color: #FFFFFF;\
-background-color: rgba(153, 0, 0, 0.68)\
-}\
-.ace-mono-industrial .ace_support.ace_constant {\
-color: #C87500\
-}\
-.ace-mono-industrial .ace_fold {\
-background-color: #A8B3AB;\
-border-color: #FFFFFF\
-}\
-.ace-mono-industrial .ace_support.ace_function {\
-color: #588E60\
-}\
-.ace-mono-industrial .ace_entity.ace_name,\
-.ace-mono-industrial .ace_support.ace_class,\
-.ace-mono-industrial .ace_support.ace_type {\
-color: #5778B6\
-}\
-.ace-mono-industrial .ace_storage {\
-color: #C23B00\
-}\
-.ace-mono-industrial .ace_variable.ace_language,\
-.ace-mono-industrial .ace_variable.ace_parameter {\
-color: #648BD2\
-}\
-.ace-mono-industrial .ace_comment {\
-color: #666C68;\
-background-color: #151C19\
-}\
-.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\
-color: #909993\
-}\
-.ace-mono-industrial .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-mono-industrial .ace_entity.ace_name.ace_tag {\
-color: #A65EFF\
-}\
-.ace-mono-industrial .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-monokai.js b/try/ace/theme-monokai.js
deleted file mode 100644
index 6faa7cb..0000000
--- a/try/ace/theme-monokai.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/monokai', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-monokai";
-exports.cssText = ".ace-monokai .ace_gutter {\
-background: #2F3129;\
-color: #8F908A\
-}\
-.ace-monokai .ace_print-margin {\
-width: 1px;\
-background: #555651\
-}\
-.ace-monokai {\
-background-color: #272822;\
-color: #F8F8F2\
-}\
-.ace-monokai .ace_cursor {\
-border-left: 2px solid #F8F8F0\
-}\
-.ace-monokai .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #F8F8F0\
-}\
-.ace-monokai .ace_marker-layer .ace_selection {\
-background: #49483E\
-}\
-.ace-monokai.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #272822;\
-border-radius: 2px\
-}\
-.ace-monokai .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-monokai .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #49483E\
-}\
-.ace-monokai .ace_marker-layer .ace_active-line {\
-background: #202020\
-}\
-.ace-monokai .ace_gutter-active-line {\
-background-color: #272727\
-}\
-.ace-monokai .ace_marker-layer .ace_selected-word {\
-border: 1px solid #49483E\
-}\
-.ace-monokai .ace_invisible {\
-color: #52524d\
-}\
-.ace-monokai .ace_entity.ace_name.ace_tag,\
-.ace-monokai .ace_keyword,\
-.ace-monokai .ace_meta.ace_tag,\
-.ace-monokai .ace_storage {\
-color: #F92672\
-}\
-.ace-monokai .ace_constant.ace_character,\
-.ace-monokai .ace_constant.ace_language,\
-.ace-monokai .ace_constant.ace_numeric,\
-.ace-monokai .ace_constant.ace_other {\
-color: #AE81FF\
-}\
-.ace-monokai .ace_invalid {\
-color: #F8F8F0;\
-background-color: #F92672\
-}\
-.ace-monokai .ace_invalid.ace_deprecated {\
-color: #F8F8F0;\
-background-color: #AE81FF\
-}\
-.ace-monokai .ace_support.ace_constant,\
-.ace-monokai .ace_support.ace_function {\
-color: #66D9EF\
-}\
-.ace-monokai .ace_fold {\
-background-color: #A6E22E;\
-border-color: #F8F8F2\
-}\
-.ace-monokai .ace_storage.ace_type,\
-.ace-monokai .ace_support.ace_class,\
-.ace-monokai .ace_support.ace_type {\
-font-style: italic;\
-color: #66D9EF\
-}\
-.ace-monokai .ace_entity.ace_name.ace_function,\
-.ace-monokai .ace_entity.ace_other,\
-.ace-monokai .ace_entity.ace_other.ace_attribute-name,\
-.ace-monokai .ace_variable {\
-color: #A6E22E\
-}\
-.ace-monokai .ace_variable.ace_parameter {\
-font-style: italic;\
-color: #FD971F\
-}\
-.ace-monokai .ace_string {\
-color: #E6DB74\
-}\
-.ace-monokai .ace_comment {\
-color: #75715E\
-}\
-.ace-monokai .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-monokai .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-pastel_on_dark.js b/try/ace/theme-pastel_on_dark.js
deleted file mode 100644
index 0651800..0000000
--- a/try/ace/theme-pastel_on_dark.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/pastel_on_dark', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-pastel-on-dark";
-exports.cssText = ".ace-pastel-on-dark .ace_gutter {\
-background: #353030;\
-color: #8F938F\
-}\
-.ace-pastel-on-dark .ace_print-margin {\
-width: 1px;\
-background: #353030\
-}\
-.ace-pastel-on-dark {\
-background-color: #2C2828;\
-color: #8F938F\
-}\
-.ace-pastel-on-dark .ace_cursor {\
-border-left: 2px solid #A7A7A7\
-}\
-.ace-pastel-on-dark .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #A7A7A7\
-}\
-.ace-pastel-on-dark .ace_marker-layer .ace_selection {\
-background: rgba(221, 240, 255, 0.20)\
-}\
-.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #2C2828;\
-border-radius: 2px\
-}\
-.ace-pastel-on-dark .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(255, 255, 255, 0.25)\
-}\
-.ace-pastel-on-dark .ace_marker-layer .ace_active-line {\
-background: rgba(255, 255, 255, 0.031)\
-}\
-.ace-pastel-on-dark .ace_gutter-active-line {\
-background-color: rgba(255, 255, 255, 0.031)\
-}\
-.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgba(221, 240, 255, 0.20)\
-}\
-.ace-pastel-on-dark .ace_invisible {\
-color: rgba(255, 255, 255, 0.25)\
-}\
-.ace-pastel-on-dark .ace_keyword,\
-.ace-pastel-on-dark .ace_meta {\
-color: #757aD8\
-}\
-.ace-pastel-on-dark .ace_constant,\
-.ace-pastel-on-dark .ace_constant.ace_character,\
-.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\
-.ace-pastel-on-dark .ace_constant.ace_other {\
-color: #4FB7C5\
-}\
-.ace-pastel-on-dark .ace_keyword.ace_operator {\
-color: #797878\
-}\
-.ace-pastel-on-dark .ace_constant.ace_character {\
-color: #AFA472\
-}\
-.ace-pastel-on-dark .ace_constant.ace_language {\
-color: #DE8E30\
-}\
-.ace-pastel-on-dark .ace_constant.ace_numeric {\
-color: #CCCCCC\
-}\
-.ace-pastel-on-dark .ace_invalid,\
-.ace-pastel-on-dark .ace_invalid.ace_illegal {\
-color: #F8F8F8;\
-background-color: rgba(86, 45, 86, 0.75)\
-}\
-.ace-pastel-on-dark .ace_invalid.ace_deprecated {\
-text-decoration: underline;\
-font-style: italic;\
-color: #D2A8A1\
-}\
-.ace-pastel-on-dark .ace_fold {\
-background-color: #757aD8;\
-border-color: #8F938F\
-}\
-.ace-pastel-on-dark .ace_support.ace_function {\
-color: #AEB2F8\
-}\
-.ace-pastel-on-dark .ace_string {\
-color: #66A968\
-}\
-.ace-pastel-on-dark .ace_string.ace_regexp {\
-color: #E9C062\
-}\
-.ace-pastel-on-dark .ace_comment {\
-color: #A6C6FF\
-}\
-.ace-pastel-on-dark .ace_variable {\
-color: #BEBF55\
-}\
-.ace-pastel-on-dark .ace_variable.ace_language {\
-color: #C1C144\
-}\
-.ace-pastel-on-dark .ace_xml-pe {\
-color: #494949\
-}\
-.ace-pastel-on-dark .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-pastel-on-dark .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-solarized_dark.js b/try/ace/theme-solarized_dark.js
deleted file mode 100644
index 14a9fcb..0000000
--- a/try/ace/theme-solarized_dark.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/solarized_dark', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-solarized-dark";
-exports.cssText = ".ace-solarized-dark .ace_gutter {\
-background: #01313f;\
-color: #d0edf7\
-}\
-.ace-solarized-dark .ace_print-margin {\
-width: 1px;\
-background: #33555E\
-}\
-.ace-solarized-dark {\
-background-color: #002B36;\
-color: #93A1A1\
-}\
-.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\
-.ace-solarized-dark .ace_storage,\
-.ace-solarized-dark .ace_text-layer {\
-color: #93A1A1\
-}\
-.ace-solarized-dark .ace_cursor {\
-border-left: 2px solid #D30102\
-}\
-.ace-solarized-dark .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #D30102\
-}\
-.ace-solarized-dark .ace_marker-layer .ace_active-line,\
-.ace-solarized-dark .ace_marker-layer .ace_selection {\
-background: rgba(255, 255, 255, 0.1)\
-}\
-.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #002B36;\
-border-radius: 2px\
-}\
-.ace-solarized-dark .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-solarized-dark .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(147, 161, 161, 0.50)\
-}\
-.ace-solarized-dark .ace_gutter-active-line {\
-background-color: #0d3440\
-}\
-.ace-solarized-dark .ace_marker-layer .ace_selected-word {\
-border: 1px solid #073642\
-}\
-.ace-solarized-dark .ace_invisible {\
-color: rgba(147, 161, 161, 0.50)\
-}\
-.ace-solarized-dark .ace_keyword,\
-.ace-solarized-dark .ace_meta,\
-.ace-solarized-dark .ace_support.ace_class,\
-.ace-solarized-dark .ace_support.ace_type {\
-color: #859900\
-}\
-.ace-solarized-dark .ace_constant.ace_character,\
-.ace-solarized-dark .ace_constant.ace_other {\
-color: #CB4B16\
-}\
-.ace-solarized-dark .ace_constant.ace_language {\
-color: #B58900\
-}\
-.ace-solarized-dark .ace_constant.ace_numeric {\
-color: #D33682\
-}\
-.ace-solarized-dark .ace_fold {\
-background-color: #268BD2;\
-border-color: #93A1A1\
-}\
-.ace-solarized-dark .ace_entity.ace_name.ace_function,\
-.ace-solarized-dark .ace_entity.ace_name.ace_tag,\
-.ace-solarized-dark .ace_support.ace_function,\
-.ace-solarized-dark .ace_variable,\
-.ace-solarized-dark .ace_variable.ace_language {\
-color: #268BD2\
-}\
-.ace-solarized-dark .ace_string {\
-color: #2AA198\
-}\
-.ace-solarized-dark .ace_string.ace_regexp {\
-color: #D30102\
-}\
-.ace-solarized-dark .ace_comment {\
-font-style: italic;\
-color: #657B83\
-}\
-.ace-solarized-dark .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-solarized-dark .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-solarized_light.js b/try/ace/theme-solarized_light.js
deleted file mode 100644
index f66b63a..0000000
--- a/try/ace/theme-solarized_light.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/solarized_light', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = false;
-exports.cssClass = "ace-solarized-light";
-exports.cssText = ".ace-solarized-light .ace_gutter {\
-background: #fbf1d3;\
-color: #333\
-}\
-.ace-solarized-light .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8\
-}\
-.ace-solarized-light {\
-background-color: #FDF6E3;\
-color: #586E75\
-}\
-.ace-solarized-light .ace_cursor {\
-border-left: 2px solid #000000\
-}\
-.ace-solarized-light .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #000000\
-}\
-.ace-solarized-light .ace_marker-layer .ace_selection {\
-background:  rgba(7, 54, 67, 0.09)\
-}\
-.ace-solarized-light.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #FDF6E3;\
-border-radius: 2px\
-}\
-.ace-solarized-light .ace_marker-layer .ace_step {\
-background: rgb(255, 255, 0)\
-}\
-.ace-solarized-light .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(147, 161, 161, 0.50)\
-}\
-.ace-solarized-light .ace_marker-layer .ace_active-line {\
-background: #EEE8D5\
-}\
-.ace-solarized-light .ace_gutter-active-line {\
-background-color : #EDE5C1\
-}\
-.ace-solarized-light .ace_marker-layer .ace_selected-word {\
-border: 1px solid #073642\
-}\
-.ace-solarized-light .ace_invisible {\
-color: rgba(147, 161, 161, 0.50)\
-}\
-.ace-solarized-light .ace_keyword,\
-.ace-solarized-light .ace_meta,\
-.ace-solarized-light .ace_support.ace_class,\
-.ace-solarized-light .ace_support.ace_type {\
-color: #859900\
-}\
-.ace-solarized-light .ace_constant.ace_character,\
-.ace-solarized-light .ace_constant.ace_other {\
-color: #CB4B16\
-}\
-.ace-solarized-light .ace_constant.ace_language {\
-color: #B58900\
-}\
-.ace-solarized-light .ace_constant.ace_numeric {\
-color: #D33682\
-}\
-.ace-solarized-light .ace_fold {\
-background-color: #268BD2;\
-border-color: #586E75\
-}\
-.ace-solarized-light .ace_entity.ace_name.ace_function,\
-.ace-solarized-light .ace_entity.ace_name.ace_tag,\
-.ace-solarized-light .ace_support.ace_function,\
-.ace-solarized-light .ace_variable,\
-.ace-solarized-light .ace_variable.ace_language {\
-color: #268BD2\
-}\
-.ace-solarized-light .ace_storage {\
-color: #073642\
-}\
-.ace-solarized-light .ace_string {\
-color: #2AA198\
-}\
-.ace-solarized-light .ace_string.ace_regexp {\
-color: #D30102\
-}\
-.ace-solarized-light .ace_comment,\
-.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\
-color: #93A1A1\
-}\
-.ace-solarized-light .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-solarized-light .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-terminal.js b/try/ace/theme-terminal.js
deleted file mode 100644
index daced30..0000000
--- a/try/ace/theme-terminal.js
+++ /dev/null
@@ -1,152 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/terminal', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-terminal-theme";
-exports.cssText = ".ace-terminal-theme .ace_gutter {\
-background: #1a0005;\
-color: steelblue\
-}\
-.ace-terminal-theme .ace_print-margin {\
-width: 1px;\
-background: #1a1a1a\
-}\
-.ace-terminal-theme {\
-background-color: black;\
-color: #DEDEDE\
-}\
-.ace-terminal-theme .ace_cursor {\
-border-left: 2px solid springgreen\
-}\
-.ace-terminal-theme .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #9F9F9F\
-}\
-.ace-terminal-theme .ace_marker-layer .ace_selection {\
-background: #424242\
-}\
-.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px black;\
-border-radius: 2px\
-}\
-.ace-terminal-theme .ace_marker-layer .ace_step {\
-background: rgb(0, 0, 0)\
-}\
-.ace-terminal-theme .ace_marker-layer .ace_bracket {\
-background: #090;\
-}\
-.ace-terminal-theme .ace_marker-layer .ace_bracket-start {\
-background: #090;\
-}\
-.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #900\
-}\
-.ace-terminal-theme .ace_marker-layer .ace_active-line {\
-background: #2A2A2A\
-}\
-.ace-terminal-theme .ace_gutter-active-line {\
-background-color: #2A112A\
-}\
-.ace-terminal-theme .ace_marker-layer .ace_selected-word {\
-border: 1px solid #424242\
-}\
-.ace-terminal-theme .ace_invisible {\
-color: #343434\
-}\
-.ace-terminal-theme .ace_keyword,\
-.ace-terminal-theme .ace_meta,\
-.ace-terminal-theme .ace_storage,\
-.ace-terminal-theme .ace_storage.ace_type,\
-.ace-terminal-theme .ace_support.ace_type {\
-color: tomato\
-}\
-.ace-terminal-theme .ace_keyword.ace_operator {\
-color: deeppink\
-}\
-.ace-terminal-theme .ace_constant.ace_character,\
-.ace-terminal-theme .ace_constant.ace_language,\
-.ace-terminal-theme .ace_constant.ace_numeric,\
-.ace-terminal-theme .ace_keyword.ace_other.ace_unit,\
-.ace-terminal-theme .ace_support.ace_constant,\
-.ace-terminal-theme .ace_variable.ace_parameter {\
-color: #E78C45\
-}\
-.ace-terminal-theme .ace_constant.ace_other {\
-color: gold\
-}\
-.ace-terminal-theme .ace_invalid {\
-color: yellow;\
-background-color: red\
-}\
-.ace-terminal-theme .ace_invalid.ace_deprecated {\
-color: #CED2CF;\
-background-color: #B798BF\
-}\
-.ace-terminal-theme .ace_fold {\
-background-color: #7AA6DA;\
-border-color: #DEDEDE\
-}\
-.ace-terminal-theme .ace_entity.ace_name.ace_function,\
-.ace-terminal-theme .ace_support.ace_function,\
-.ace-terminal-theme .ace_variable {\
-color: #7AA6DA\
-}\
-.ace-terminal-theme .ace_support.ace_class,\
-.ace-terminal-theme .ace_support.ace_type {\
-color: #E7C547\
-}\
-.ace-terminal-theme .ace_markup.ace_heading,\
-.ace-terminal-theme .ace_string {\
-color: #B9CA4A\
-}\
-.ace-terminal-theme .ace_entity.ace_name.ace_tag,\
-.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\
-.ace-terminal-theme .ace_meta.ace_tag,\
-.ace-terminal-theme .ace_string.ace_regexp,\
-.ace-terminal-theme .ace_variable {\
-color: #D54E53\
-}\
-.ace-terminal-theme .ace_comment {\
-color: orangered\
-}\
-.ace-terminal-theme .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-terminal-theme .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\
-}\
-";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-textmate.js b/try/ace/theme-textmate.js
deleted file mode 100644
index e69de29..0000000
diff --git a/try/ace/theme-tomorrow.js b/try/ace/theme-tomorrow.js
deleted file mode 100644
index 63e3a82..0000000
--- a/try/ace/theme-tomorrow.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/tomorrow', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = false;
-exports.cssClass = "ace-tomorrow";
-exports.cssText = ".ace-tomorrow .ace_gutter {\
-background: #f6f6f6;\
-color: #4D4D4C\
-}\
-.ace-tomorrow .ace_print-margin {\
-width: 1px;\
-background: #f6f6f6\
-}\
-.ace-tomorrow,\
-.ace-tomorrow .ace_scroller {\
-background-color: #FFFFFF;\
-color: #4D4D4C\
-}\
-.ace-tomorrow .ace_cursor {\
-border-left: 2px solid #AEAFAD\
-}\
-.ace-tomorrow .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #AEAFAD\
-}\
-.ace-tomorrow .ace_marker-layer .ace_selection {\
-background: #D6D6D6\
-}\
-.ace-tomorrow.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #FFFFFF;\
-border-radius: 2px\
-}\
-.ace-tomorrow .ace_marker-layer .ace_step {\
-background: rgb(255, 255, 0)\
-}\
-.ace-tomorrow .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #D1D1D1\
-}\
-.ace-tomorrow .ace_marker-layer .ace_active-line {\
-background: #EFEFEF\
-}\
-.ace-tomorrow .ace_gutter-active-line {\
-background-color : #dcdcdc\
-}\
-.ace-tomorrow .ace_marker-layer .ace_selected-word {\
-border: 1px solid #D6D6D6\
-}\
-.ace-tomorrow .ace_invisible {\
-color: #D1D1D1\
-}\
-.ace-tomorrow .ace_keyword,\
-.ace-tomorrow .ace_meta,\
-.ace-tomorrow .ace_storage,\
-.ace-tomorrow .ace_storage.ace_type,\
-.ace-tomorrow .ace_support.ace_type {\
-color: #8959A8\
-}\
-.ace-tomorrow .ace_keyword.ace_operator {\
-color: #3E999F\
-}\
-.ace-tomorrow .ace_constant.ace_character,\
-.ace-tomorrow .ace_constant.ace_language,\
-.ace-tomorrow .ace_constant.ace_numeric,\
-.ace-tomorrow .ace_keyword.ace_other.ace_unit,\
-.ace-tomorrow .ace_support.ace_constant,\
-.ace-tomorrow .ace_variable.ace_parameter {\
-color: #F5871F\
-}\
-.ace-tomorrow .ace_constant.ace_other {\
-color: #666969\
-}\
-.ace-tomorrow .ace_invalid {\
-color: #FFFFFF;\
-background-color: #C82829\
-}\
-.ace-tomorrow .ace_invalid.ace_deprecated {\
-color: #FFFFFF;\
-background-color: #8959A8\
-}\
-.ace-tomorrow .ace_fold {\
-background-color: #4271AE;\
-border-color: #4D4D4C\
-}\
-.ace-tomorrow .ace_entity.ace_name.ace_function,\
-.ace-tomorrow .ace_support.ace_function,\
-.ace-tomorrow .ace_variable {\
-color: #4271AE\
-}\
-.ace-tomorrow .ace_support.ace_class,\
-.ace-tomorrow .ace_support.ace_type {\
-color: #C99E00\
-}\
-.ace-tomorrow .ace_markup.ace_heading,\
-.ace-tomorrow .ace_string {\
-color: #718C00\
-}\
-.ace-tomorrow .ace_entity.ace_name.ace_tag,\
-.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\
-.ace-tomorrow .ace_meta.ace_tag,\
-.ace-tomorrow .ace_string.ace_regexp,\
-.ace-tomorrow .ace_variable {\
-color: #C82829\
-}\
-.ace-tomorrow .ace_comment {\
-color: #8E908C\
-}\
-.ace-tomorrow .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-tomorrow .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-tomorrow_night.js b/try/ace/theme-tomorrow_night.js
deleted file mode 100644
index 25a454c..0000000
--- a/try/ace/theme-tomorrow_night.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/tomorrow_night', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-tomorrow-night";
-exports.cssText = ".ace-tomorrow-night .ace_gutter {\
-background: #25282c;\
-color: #C5C8C6\
-}\
-.ace-tomorrow-night .ace_print-margin {\
-width: 1px;\
-background: #25282c\
-}\
-.ace-tomorrow-night  {\
-background-color: #1D1F21;\
-color: #C5C8C6\
-}\
-.ace-tomorrow-night .ace_cursor {\
-border-left: 2px solid #AEAFAD\
-}\
-.ace-tomorrow-night .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #AEAFAD\
-}\
-.ace-tomorrow-night .ace_marker-layer .ace_selection {\
-background: #373B41\
-}\
-.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #1D1F21;\
-border-radius: 2px\
-}\
-.ace-tomorrow-night .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-tomorrow-night .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #4B4E55\
-}\
-.ace-tomorrow-night .ace_marker-layer .ace_active-line {\
-background: #282A2E\
-}\
-.ace-tomorrow-night .ace_gutter-active-line {\
-background-color: #282A2E\
-}\
-.ace-tomorrow-night .ace_marker-layer .ace_selected-word {\
-border: 1px solid #373B41\
-}\
-.ace-tomorrow-night .ace_invisible {\
-color: #4B4E55\
-}\
-.ace-tomorrow-night .ace_keyword,\
-.ace-tomorrow-night .ace_meta,\
-.ace-tomorrow-night .ace_storage,\
-.ace-tomorrow-night .ace_storage.ace_type,\
-.ace-tomorrow-night .ace_support.ace_type {\
-color: #B294BB\
-}\
-.ace-tomorrow-night .ace_keyword.ace_operator {\
-color: #8ABEB7\
-}\
-.ace-tomorrow-night .ace_constant.ace_character,\
-.ace-tomorrow-night .ace_constant.ace_language,\
-.ace-tomorrow-night .ace_constant.ace_numeric,\
-.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\
-.ace-tomorrow-night .ace_support.ace_constant,\
-.ace-tomorrow-night .ace_variable.ace_parameter {\
-color: #DE935F\
-}\
-.ace-tomorrow-night .ace_constant.ace_other {\
-color: #CED1CF\
-}\
-.ace-tomorrow-night .ace_invalid {\
-color: #CED2CF;\
-background-color: #DF5F5F\
-}\
-.ace-tomorrow-night .ace_invalid.ace_deprecated {\
-color: #CED2CF;\
-background-color: #B798BF\
-}\
-.ace-tomorrow-night .ace_fold {\
-background-color: #81A2BE;\
-border-color: #C5C8C6\
-}\
-.ace-tomorrow-night .ace_entity.ace_name.ace_function,\
-.ace-tomorrow-night .ace_support.ace_function,\
-.ace-tomorrow-night .ace_variable {\
-color: #81A2BE\
-}\
-.ace-tomorrow-night .ace_support.ace_class,\
-.ace-tomorrow-night .ace_support.ace_type {\
-color: #F0C674\
-}\
-.ace-tomorrow-night .ace_markup.ace_heading,\
-.ace-tomorrow-night .ace_string {\
-color: #B5BD68\
-}\
-.ace-tomorrow-night .ace_entity.ace_name.ace_tag,\
-.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\
-.ace-tomorrow-night .ace_meta.ace_tag,\
-.ace-tomorrow-night .ace_string.ace_regexp,\
-.ace-tomorrow-night .ace_variable {\
-color: #CC6666\
-}\
-.ace-tomorrow-night .ace_comment {\
-color: #969896\
-}\
-.ace-tomorrow-night .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-tomorrow-night .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-tomorrow_night_blue.js b/try/ace/theme-tomorrow_night_blue.js
deleted file mode 100644
index d0df8b2..0000000
--- a/try/ace/theme-tomorrow_night_blue.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/tomorrow_night_blue', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-tomorrow-night-blue";
-exports.cssText = ".ace-tomorrow-night-blue .ace_gutter {\
-background: #00204b;\
-color: #7388b5\
-}\
-.ace-tomorrow-night-blue .ace_print-margin {\
-width: 1px;\
-background: #00204b\
-}\
-.ace-tomorrow-night-blue {\
-background-color: #002451;\
-color: #FFFFFF\
-}\
-.ace-tomorrow-night-blue .ace_constant.ace_other {\
-color: #FFFFFF\
-}\
-.ace-tomorrow-night-blue .ace_cursor {\
-border-left: 2px solid #FFFFFF\
-}\
-.ace-tomorrow-night-blue .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #FFFFFF\
-}\
-.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\
-background: #003F8E\
-}\
-.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #002451;\
-border-radius: 2px\
-}\
-.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\
-background: rgb(127, 111, 19)\
-}\
-.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #404F7D\
-}\
-.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\
-background: #00346E\
-}\
-.ace-tomorrow-night-blue .ace_gutter-active-line {\
-background-color: #022040\
-}\
-.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\
-border: 1px solid #003F8E\
-}\
-.ace-tomorrow-night-blue .ace_invisible {\
-color: #404F7D\
-}\
-.ace-tomorrow-night-blue .ace_keyword,\
-.ace-tomorrow-night-blue .ace_meta,\
-.ace-tomorrow-night-blue .ace_storage,\
-.ace-tomorrow-night-blue .ace_storage.ace_type,\
-.ace-tomorrow-night-blue .ace_support.ace_type {\
-color: #EBBBFF\
-}\
-.ace-tomorrow-night-blue .ace_keyword.ace_operator {\
-color: #99FFFF\
-}\
-.ace-tomorrow-night-blue .ace_constant.ace_character,\
-.ace-tomorrow-night-blue .ace_constant.ace_language,\
-.ace-tomorrow-night-blue .ace_constant.ace_numeric,\
-.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\
-.ace-tomorrow-night-blue .ace_support.ace_constant,\
-.ace-tomorrow-night-blue .ace_variable.ace_parameter {\
-color: #FFC58F\
-}\
-.ace-tomorrow-night-blue .ace_invalid {\
-color: #FFFFFF;\
-background-color: #F99DA5\
-}\
-.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\
-color: #FFFFFF;\
-background-color: #EBBBFF\
-}\
-.ace-tomorrow-night-blue .ace_fold {\
-background-color: #BBDAFF;\
-border-color: #FFFFFF\
-}\
-.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\
-.ace-tomorrow-night-blue .ace_support.ace_function,\
-.ace-tomorrow-night-blue .ace_variable {\
-color: #BBDAFF\
-}\
-.ace-tomorrow-night-blue .ace_support.ace_class,\
-.ace-tomorrow-night-blue .ace_support.ace_type {\
-color: #FFEEAD\
-}\
-.ace-tomorrow-night-blue .ace_markup.ace_heading,\
-.ace-tomorrow-night-blue .ace_string {\
-color: #D1F1A9\
-}\
-.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\
-.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\
-.ace-tomorrow-night-blue .ace_meta.ace_tag,\
-.ace-tomorrow-night-blue .ace_string.ace_regexp,\
-.ace-tomorrow-night-blue .ace_variable {\
-color: #FF9DA4\
-}\
-.ace-tomorrow-night-blue .ace_comment {\
-color: #7285B7\
-}\
-.ace-tomorrow-night-blue .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-tomorrow-night-blue .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-tomorrow_night_bright.js b/try/ace/theme-tomorrow_night_bright.js
deleted file mode 100644
index 392d38a..0000000
--- a/try/ace/theme-tomorrow_night_bright.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/tomorrow_night_bright', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-tomorrow-night-bright";
-exports.cssText = ".ace-tomorrow-night-bright .ace_gutter {\
-background: #1a1a1a;\
-color: #DEDEDE\
-}\
-.ace-tomorrow-night-bright .ace_print-margin {\
-width: 1px;\
-background: #1a1a1a\
-}\
-.ace-tomorrow-night-bright {\
-background-color: #000000;\
-color: #DEDEDE\
-}\
-.ace-tomorrow-night-bright .ace_cursor {\
-border-left: 2px solid #9F9F9F\
-}\
-.ace-tomorrow-night-bright .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #9F9F9F\
-}\
-.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\
-background: #424242\
-}\
-.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #000000;\
-border-radius: 2px\
-}\
-.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #343434\
-}\
-.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\
-background: #2A2A2A\
-}\
-.ace-tomorrow-night-bright .ace_gutter-active-line {\
-background-color: #2A2A2A\
-}\
-.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\
-border: 1px solid #424242\
-}\
-.ace-tomorrow-night-bright .ace_invisible {\
-color: #343434\
-}\
-.ace-tomorrow-night-bright .ace_keyword,\
-.ace-tomorrow-night-bright .ace_meta,\
-.ace-tomorrow-night-bright .ace_storage,\
-.ace-tomorrow-night-bright .ace_storage.ace_type,\
-.ace-tomorrow-night-bright .ace_support.ace_type {\
-color: #C397D8\
-}\
-.ace-tomorrow-night-bright .ace_keyword.ace_operator {\
-color: #70C0B1\
-}\
-.ace-tomorrow-night-bright .ace_constant.ace_character,\
-.ace-tomorrow-night-bright .ace_constant.ace_language,\
-.ace-tomorrow-night-bright .ace_constant.ace_numeric,\
-.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\
-.ace-tomorrow-night-bright .ace_support.ace_constant,\
-.ace-tomorrow-night-bright .ace_variable.ace_parameter {\
-color: #E78C45\
-}\
-.ace-tomorrow-night-bright .ace_constant.ace_other {\
-color: #EEEEEE\
-}\
-.ace-tomorrow-night-bright .ace_invalid {\
-color: #CED2CF;\
-background-color: #DF5F5F\
-}\
-.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\
-color: #CED2CF;\
-background-color: #B798BF\
-}\
-.ace-tomorrow-night-bright .ace_fold {\
-background-color: #7AA6DA;\
-border-color: #DEDEDE\
-}\
-.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\
-.ace-tomorrow-night-bright .ace_support.ace_function,\
-.ace-tomorrow-night-bright .ace_variable {\
-color: #7AA6DA\
-}\
-.ace-tomorrow-night-bright .ace_support.ace_class,\
-.ace-tomorrow-night-bright .ace_support.ace_type {\
-color: #E7C547\
-}\
-.ace-tomorrow-night-bright .ace_markup.ace_heading,\
-.ace-tomorrow-night-bright .ace_string {\
-color: #B9CA4A\
-}\
-.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\
-.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\
-.ace-tomorrow-night-bright .ace_meta.ace_tag,\
-.ace-tomorrow-night-bright .ace_string.ace_regexp,\
-.ace-tomorrow-night-bright .ace_variable {\
-color: #D54E53\
-}\
-.ace-tomorrow-night-bright .ace_comment {\
-color: #969896\
-}\
-.ace-tomorrow-night-bright .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-tomorrow-night-bright .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-tomorrow_night_eighties.js b/try/ace/theme-tomorrow_night_eighties.js
deleted file mode 100644
index 9e1312e..0000000
--- a/try/ace/theme-tomorrow_night_eighties.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/tomorrow_night_eighties', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-tomorrow-night-eighties";
-exports.cssText = ".ace-tomorrow-night-eighties .ace_gutter {\
-background: #272727;\
-color: #CCC\
-}\
-.ace-tomorrow-night-eighties .ace_print-margin {\
-width: 1px;\
-background: #272727\
-}\
-.ace-tomorrow-night-eighties {\
-background-color: #2D2D2D;\
-color: #CCCCCC\
-}\
-.ace-tomorrow-night-eighties .ace_constant.ace_other {\
-color: #CCCCCC\
-}\
-.ace-tomorrow-night-eighties .ace_cursor {\
-border-left: 2px solid #CCCCCC\
-}\
-.ace-tomorrow-night-eighties .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #CCCCCC\
-}\
-.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\
-background: #515151\
-}\
-.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #2D2D2D;\
-border-radius: 2px\
-}\
-.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #6A6A6A\
-}\
-.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\
-background: #393939\
-}\
-.ace-tomorrow-night-eighties .ace_gutter-active-line {\
-background-color: #393939\
-}\
-.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\
-border: 1px solid #515151\
-}\
-.ace-tomorrow-night-eighties .ace_invisible {\
-color: #6A6A6A\
-}\
-.ace-tomorrow-night-eighties .ace_keyword,\
-.ace-tomorrow-night-eighties .ace_meta,\
-.ace-tomorrow-night-eighties .ace_storage,\
-.ace-tomorrow-night-eighties .ace_storage.ace_type,\
-.ace-tomorrow-night-eighties .ace_support.ace_type {\
-color: #CC99CC\
-}\
-.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\
-color: #66CCCC\
-}\
-.ace-tomorrow-night-eighties .ace_constant.ace_character,\
-.ace-tomorrow-night-eighties .ace_constant.ace_language,\
-.ace-tomorrow-night-eighties .ace_constant.ace_numeric,\
-.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\
-.ace-tomorrow-night-eighties .ace_support.ace_constant,\
-.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\
-color: #F99157\
-}\
-.ace-tomorrow-night-eighties .ace_invalid {\
-color: #CDCDCD;\
-background-color: #F2777A\
-}\
-.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\
-color: #CDCDCD;\
-background-color: #CC99CC\
-}\
-.ace-tomorrow-night-eighties .ace_fold {\
-background-color: #6699CC;\
-border-color: #CCCCCC\
-}\
-.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\
-.ace-tomorrow-night-eighties .ace_support.ace_function,\
-.ace-tomorrow-night-eighties .ace_variable {\
-color: #6699CC\
-}\
-.ace-tomorrow-night-eighties .ace_support.ace_class,\
-.ace-tomorrow-night-eighties .ace_support.ace_type {\
-color: #FFCC66\
-}\
-.ace-tomorrow-night-eighties .ace_markup.ace_heading,\
-.ace-tomorrow-night-eighties .ace_string {\
-color: #99CC99\
-}\
-.ace-tomorrow-night-eighties .ace_comment {\
-color: #999999\
-}\
-.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\
-.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\
-.ace-tomorrow-night-eighties .ace_meta.ace_tag,\
-.ace-tomorrow-night-eighties .ace_variable {\
-color: #F2777A\
-}\
-.ace-tomorrow-night-eighties .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-tomorrow-night-eighties .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-twilight.js b/try/ace/theme-twilight.js
deleted file mode 100644
index 24b6d32..0000000
--- a/try/ace/theme-twilight.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/twilight', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-twilight";
-exports.cssText = ".ace-twilight .ace_gutter {\
-background: #232323;\
-color: #E2E2E2\
-}\
-.ace-twilight .ace_print-margin {\
-width: 1px;\
-background: #232323\
-}\
-.ace-twilight {\
-background-color: #141414;\
-color: #F8F8F8\
-}\
-.ace-twilight .ace_cursor {\
-border-left: 2px solid #A7A7A7\
-}\
-.ace-twilight .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #A7A7A7\
-}\
-.ace-twilight .ace_marker-layer .ace_selection {\
-background: rgba(221, 240, 255, 0.20)\
-}\
-.ace-twilight.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #141414;\
-border-radius: 2px\
-}\
-.ace-twilight .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-twilight .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid rgba(255, 255, 255, 0.25)\
-}\
-.ace-twilight .ace_marker-layer .ace_active-line {\
-background: rgba(255, 255, 255, 0.031)\
-}\
-.ace-twilight .ace_gutter-active-line {\
-background-color: rgba(255, 255, 255, 0.031)\
-}\
-.ace-twilight .ace_marker-layer .ace_selected-word {\
-border: 1px solid rgba(221, 240, 255, 0.20)\
-}\
-.ace-twilight .ace_invisible {\
-color: rgba(255, 255, 255, 0.25)\
-}\
-.ace-twilight .ace_keyword,\
-.ace-twilight .ace_meta {\
-color: #CDA869\
-}\
-.ace-twilight .ace_constant,\
-.ace-twilight .ace_constant.ace_character,\
-.ace-twilight .ace_constant.ace_character.ace_escape,\
-.ace-twilight .ace_constant.ace_other,\
-.ace-twilight .ace_markup.ace_heading,\
-.ace-twilight .ace_support.ace_constant {\
-color: #CF6A4C\
-}\
-.ace-twilight .ace_invalid.ace_illegal {\
-color: #F8F8F8;\
-background-color: rgba(86, 45, 86, 0.75)\
-}\
-.ace-twilight .ace_invalid.ace_deprecated {\
-text-decoration: underline;\
-font-style: italic;\
-color: #D2A8A1\
-}\
-.ace-twilight .ace_support {\
-color: #9B859D\
-}\
-.ace-twilight .ace_fold {\
-background-color: #AC885B;\
-border-color: #F8F8F8\
-}\
-.ace-twilight .ace_support.ace_function {\
-color: #DAD085\
-}\
-.ace-twilight .ace_markup.ace_list,\
-.ace-twilight .ace_storage {\
-color: #F9EE98\
-}\
-.ace-twilight .ace_entity.ace_name.ace_function,\
-.ace-twilight .ace_meta.ace_tag,\
-.ace-twilight .ace_variable {\
-color: #AC885B\
-}\
-.ace-twilight .ace_string {\
-color: #8F9D6A\
-}\
-.ace-twilight .ace_string.ace_regexp {\
-color: #E9C062\
-}\
-.ace-twilight .ace_comment {\
-font-style: italic;\
-color: #5F5A60\
-}\
-.ace-twilight .ace_variable {\
-color: #7587A6\
-}\
-.ace-twilight .ace_xml-pe {\
-color: #494949\
-}\
-.ace-twilight .ace_markup.ace_underline {\
-text-decoration: underline\
-}\
-.ace-twilight .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-vibrant_ink.js b/try/ace/theme-vibrant_ink.js
deleted file mode 100644
index 0e6acc5..0000000
--- a/try/ace/theme-vibrant_ink.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/vibrant_ink', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = true;
-exports.cssClass = "ace-vibrant-ink";
-exports.cssText = ".ace-vibrant-ink .ace_gutter {\
-background: #1a1a1a;\
-color: #BEBEBE\
-}\
-.ace-vibrant-ink .ace_print-margin {\
-width: 1px;\
-background: #1a1a1a\
-}\
-.ace-vibrant-ink {\
-background-color: #0F0F0F;\
-color: #FFFFFF\
-}\
-.ace-vibrant-ink .ace_cursor {\
-border-left: 2px solid #FFFFFF\
-}\
-.ace-vibrant-ink .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #FFFFFF\
-}\
-.ace-vibrant-ink .ace_marker-layer .ace_selection {\
-background: #6699CC\
-}\
-.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #0F0F0F;\
-border-radius: 2px\
-}\
-.ace-vibrant-ink .ace_marker-layer .ace_step {\
-background: rgb(102, 82, 0)\
-}\
-.ace-vibrant-ink .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #404040\
-}\
-.ace-vibrant-ink .ace_marker-layer .ace_active-line {\
-background: #333333\
-}\
-.ace-vibrant-ink .ace_gutter-active-line {\
-background-color: #333333\
-}\
-.ace-vibrant-ink .ace_marker-layer .ace_selected-word {\
-border: 1px solid #6699CC\
-}\
-.ace-vibrant-ink .ace_invisible {\
-color: #404040\
-}\
-.ace-vibrant-ink .ace_keyword,\
-.ace-vibrant-ink .ace_meta {\
-color: #FF6600\
-}\
-.ace-vibrant-ink .ace_constant,\
-.ace-vibrant-ink .ace_constant.ace_character,\
-.ace-vibrant-ink .ace_constant.ace_character.ace_escape,\
-.ace-vibrant-ink .ace_constant.ace_other {\
-color: #339999\
-}\
-.ace-vibrant-ink .ace_constant.ace_numeric {\
-color: #99CC99\
-}\
-.ace-vibrant-ink .ace_invalid,\
-.ace-vibrant-ink .ace_invalid.ace_deprecated {\
-color: #CCFF33;\
-background-color: #000000\
-}\
-.ace-vibrant-ink .ace_fold {\
-background-color: #FFCC00;\
-border-color: #FFFFFF\
-}\
-.ace-vibrant-ink .ace_entity.ace_name.ace_function,\
-.ace-vibrant-ink .ace_support.ace_function,\
-.ace-vibrant-ink .ace_variable {\
-color: #FFCC00\
-}\
-.ace-vibrant-ink .ace_variable.ace_parameter {\
-font-style: italic\
-}\
-.ace-vibrant-ink .ace_string {\
-color: #66FF00\
-}\
-.ace-vibrant-ink .ace_string.ace_regexp {\
-color: #44B4CC\
-}\
-.ace-vibrant-ink .ace_comment {\
-color: #9933CC\
-}\
-.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\
-font-style: italic;\
-color: #99CC99\
-}\
-.ace-vibrant-ink .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y;\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/theme-xcode.js b/try/ace/theme-xcode.js
deleted file mode 100644
index 27fe881..0000000
--- a/try/ace/theme-xcode.js
+++ /dev/null
@@ -1,123 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Distributed under the BSD license:
- *
- * Copyright (c) 2010, Ajax.org B.V.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of Ajax.org B.V. nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-define('ace/theme/xcode', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) {
-
-exports.isDark = false;
-exports.cssClass = "ace-xcode";
-exports.cssText = "/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: EE3AD170-2B7F-4DE1-B724-C75F13FE0085) */\
-.ace-xcode .ace_gutter {\
-background: #e8e8e8;\
-color: #333\
-}\
-.ace-xcode .ace_print-margin {\
-width: 1px;\
-background: #e8e8e8\
-}\
-.ace-xcode {\
-background-color: #FFFFFF;\
-color: #000000\
-}\
-.ace-xcode .ace_cursor {\
-border-left: 2px solid #000000\
-}\
-.ace-xcode .ace_overwrite-cursors .ace_cursor {\
-border-left: 0px;\
-border-bottom: 1px solid #000000\
-}\
-.ace-xcode .ace_marker-layer .ace_selection {\
-background: #B5D5FF\
-}\
-.ace-xcode.ace_multiselect .ace_selection.ace_start {\
-box-shadow: 0 0 3px 0px #FFFFFF;\
-border-radius: 2px\
-}\
-.ace-xcode .ace_marker-layer .ace_step {\
-background: rgb(198, 219, 174)\
-}\
-.ace-xcode .ace_marker-layer .ace_bracket {\
-margin: -1px 0 0 -1px;\
-border: 1px solid #BFBFBF\
-}\
-.ace-xcode .ace_marker-layer .ace_active-line {\
-background: rgba(0, 0, 0, 0.071)\
-}\
-.ace-xcode .ace_gutter-active-line {\
-background-color: rgba(0, 0, 0, 0.071)\
-}\
-.ace-xcode .ace_marker-layer .ace_selected-word {\
-border: 1px solid #B5D5FF\
-}\
-.ace-xcode .ace_constant.ace_language,\
-.ace-xcode .ace_keyword,\
-.ace-xcode .ace_meta,\
-.ace-xcode .ace_variable.ace_language {\
-color: #C800A4\
-}\
-.ace-xcode .ace_invisible {\
-color: #BFBFBF\
-}\
-.ace-xcode .ace_constant.ace_character,\
-.ace-xcode .ace_constant.ace_other {\
-color: #275A5E\
-}\
-.ace-xcode .ace_constant.ace_numeric {\
-color: #3A00DC\
-}\
-.ace-xcode .ace_entity.ace_other.ace_attribute-name,\
-.ace-xcode .ace_support.ace_constant,\
-.ace-xcode .ace_support.ace_function {\
-color: #450084\
-}\
-.ace-xcode .ace_fold {\
-background-color: #C800A4;\
-border-color: #000000\
-}\
-.ace-xcode .ace_entity.ace_name.ace_tag,\
-.ace-xcode .ace_support.ace_class,\
-.ace-xcode .ace_support.ace_type {\
-color: #790EAD\
-}\
-.ace-xcode .ace_storage {\
-color: #C900A4\
-}\
-.ace-xcode .ace_string {\
-color: #DF0002\
-}\
-.ace-xcode .ace_comment {\
-color: #008E00\
-}\
-.ace-xcode .ace_indent-guide {\
-background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\
-}";
-
-var dom = require("../lib/dom");
-dom.importCssString(exports.cssText, exports.cssClass);
-});
diff --git a/try/ace/worker-coffee.js b/try/ace/worker-coffee.js
deleted file mode 100644
index d0680a1..0000000
--- a/try/ace/worker-coffee.js
+++ /dev/null
@@ -1,7442 +0,0 @@
-"no use strict";
-;(function(window) {
-if (typeof window.window != "undefined" && window.document) {
-    return;
-}
-
-window.console = {
-    log: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    },
-    error: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    }
-};
-window.window = window;
-window.ace = window;
-
-window.normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-        
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-    
-    return moduleName;
-};
-
-window.require = function(parentId, id) {
-    if (!id) {
-        id = parentId
-        parentId = null;
-    }
-    if (!id.charAt)
-        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
-
-    id = normalizeModule(parentId, id);
-
-    var module = require.modules[id];
-    if (module) {
-        if (!module.initialized) {
-            module.initialized = true;
-            module.exports = module.factory().exports;
-        }
-        return module.exports;
-    }
-    
-    var chunks = id.split("/");
-    chunks[0] = require.tlns[chunks[0]] || chunks[0];
-    var path = chunks.join("/") + ".js";
-    
-    require.id = id;
-    importScripts(path);
-    return require(parentId, id);
-};
-
-require.modules = {};
-require.tlns = {};
-
-window.define = function(id, deps, factory) {
-    if (arguments.length == 2) {
-        factory = deps;
-        if (typeof id != "string") {
-            deps = id;
-            id = require.id;
-        }
-    } else if (arguments.length == 1) {
-        factory = id;
-        id = require.id;
-    }
-
-    if (id.indexOf("text!") === 0) 
-        return;
-    
-    var req = function(deps, factory) {
-        return require(id, deps, factory);
-    };
-
-    require.modules[id] = {
-        factory: function() {
-            var module = {
-                exports: {}
-            };
-            var returnExports = factory(req, module.exports, module);
-            if (returnExports)
-                module.exports = returnExports;
-            return module;
-        }
-    };
-};
-
-window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
-    require.tlns = topLevelNamespaces;
-}
-
-window.initSender = function initSender() {
-
-    var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
-    var oop = require("ace/lib/oop");
-    
-    var Sender = function() {};
-    
-    (function() {
-        
-        oop.implement(this, EventEmitter);
-                
-        this.callback = function(data, callbackId) {
-            postMessage({
-                type: "call",
-                id: callbackId,
-                data: data
-            });
-        };
-    
-        this.emit = function(name, data) {
-            postMessage({
-                type: "event",
-                name: name,
-                data: data
-            });
-        };
-        
-    }).call(Sender.prototype);
-    
-    return new Sender();
-}
-
-window.main = null;
-window.sender = null;
-
-window.onmessage = function(e) {
-    var msg = e.data;
-    if (msg.command) {
-        if (main[msg.command])
-            main[msg.command].apply(main, msg.args);
-        else
-            throw new Error("Unknown command:" + msg.command);
-    }
-    else if (msg.init) {        
-        initBaseUrls(msg.tlns);
-        require("ace/lib/es5-shim");
-        sender = initSender();
-        var clazz = require(msg.module)[msg.classname];
-        main = new clazz(sender);
-    } 
-    else if (msg.event && sender) {
-        sender._emit(msg.event, msg.data);
-    }
-};
-})(this);
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
-
-define('ace/mode/coffee_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/coffee/coffee-script'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var Mirror = require("../worker/mirror").Mirror;
-var coffee = require("../mode/coffee/coffee-script");
-
-window.addEventListener = function() {};
-
-
-var Worker = exports.Worker = function(sender) {
-    Mirror.call(this, sender);
-    this.setTimeout(250);
-};
-
-oop.inherits(Worker, Mirror);
-
-(function() {
-
-    this.onUpdate = function() {
-        var value = this.doc.getValue();
-
-        try {
-            coffee.parse(value).compile();
-        } catch(e) {
-            var loc = e.location;
-            if (loc) {
-                this.sender.emit("error", {
-                    row: loc.first_line,
-                    column: loc.first_column,
-                    endRow: loc.last_line,
-                    endColumn: loc.last_column,
-                    text: e.message,
-                    type: "error"
-                });
-            }
-            return;
-        }
-        this.sender.emit("ok");
-    };
-
-}).call(Worker.prototype);
-
-});
-define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var Document = require("../document").Document;
-var lang = require("../lib/lang");
-    
-var Mirror = exports.Mirror = function(sender) {
-    this.sender = sender;
-    var doc = this.doc = new Document("");
-    
-    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
-    
-    var _self = this;
-    sender.on("change", function(e) {
-        doc.applyDeltas(e.data);
-        deferredUpdate.schedule(_self.$timeout);
-    });
-};
-
-(function() {
-    
-    this.$timeout = 500;
-    
-    this.setTimeout = function(timeout) {
-        this.$timeout = timeout;
-    };
-    
-    this.setValue = function(value) {
-        this.doc.setValue(value);
-        this.deferredUpdate.schedule(this.$timeout);
-    };
-    
-    this.getValue = function(callbackId) {
-        this.sender.callback(this.doc.getValue(), callbackId);
-    };
-    
-    this.onUpdate = function() {
-    };
-    
-}).call(Mirror.prototype);
-
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
-
-define('ace/mode/coffee/coffee-script', ['require', 'exports', 'module' , 'ace/mode/coffee/lexer', 'ace/mode/coffee/parser', 'ace/mode/coffee/nodes'], function(require, exports, module) {
-
-    var Lexer = require("./lexer").Lexer;
-    var parser = require("./parser");
-
-    var lexer = new Lexer();
-    parser.lexer = {
-        lex: function() {
-            var tag, token;
-            token = this.tokens[this.pos++];
-            if (token) {
-                tag = token[0], this.yytext = token[1], this.yylloc = token[2];
-                this.yylineno = this.yylloc.first_line;
-            } else {
-                tag = '';
-            }
-            return tag;
-        },
-        setInput: function(tokens) {
-            this.tokens = tokens;
-            return this.pos = 0;
-        },
-        upcomingInput: function() {
-            return "";
-        }
-    };
-    parser.yy = require('./nodes');
-
-    exports.parse = function(code) {
-        return parser.parse(lexer.tokenize(code));
-    };
-});
-
-define('ace/mode/coffee/lexer', ['require', 'exports', 'module' , 'ace/mode/coffee/rewriter', 'ace/mode/coffee/helpers'], function(require, exports, module) {
-
-  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, 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, invertLiterate, key, last, locationDataToString, starts, throwSyntaxError, _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; };
-
-  _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;
-
-  _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;
-
-  exports.Lexer = Lexer = (function() {
-    function Lexer() {}
-
-    Lexer.prototype.tokenize = function(code, opts) {
-      var consumed, i, tag, _ref2;
-      if (opts == null) {
-        opts = {};
-      }
-      this.literate = opts.literate;
-      this.indent = 0;
-      this.indebt = 0;
-      this.outdebt = 0;
-      this.indents = [];
-      this.ends = [];
-      this.tokens = [];
-      this.chunkLine = opts.line || 0;
-      this.chunkColumn = opts.column || 0;
-      code = this.clean(code);
-      i = 0;
-      while (this.chunk = code.slice(i)) {
-        consumed = this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
-        _ref2 = this.getLineAndColumnFromChunk(consumed), this.chunkLine = _ref2[0], this.chunkColumn = _ref2[1];
-        i += consumed;
-      }
-      this.closeIndentation();
-      if (tag = this.ends.pop()) {
-        this.error("missing " + tag);
-      }
-      if (opts.rewrite === false) {
-        return this.tokens;
-      }
-      return (new Rewriter).rewrite(this.tokens);
-    };
-
-    Lexer.prototype.clean = function(code) {
-      if (code.charCodeAt(0) === BOM) {
-        code = code.slice(1);
-      }
-      code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
-      if (WHITESPACE.test(code)) {
-        code = "\n" + code;
-        this.chunkLine--;
-      }
-      if (this.literate) {
-        code = invertLiterate(code);
-      }
-      return code;
-    };
-
-    Lexer.prototype.identifierToken = function() {
-      var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, tag, tagToken, _ref2, _ref3, _ref4;
-      if (!(match = IDENTIFIER.exec(this.chunk))) {
-        return 0;
-      }
-      input = match[0], id = match[1], colon = match[2];
-      idLength = id.length;
-      poppedToken = void 0;
-      if (id === 'own' && this.tag() === 'FOR') {
-        this.token('OWN', id);
-        return id.length;
-      }
-      forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::' || _ref2 === '?::') || !prev.spaced && prev[0] === '@');
-      tag = 'IDENTIFIER';
-      if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) {
-        tag = id.toUpperCase();
-        if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
-          tag = 'LEADING_WHEN';
-        } else if (tag === 'FOR') {
-          this.seenFor = true;
-        } else if (tag === 'UNLESS') {
-          tag = 'IF';
-        } else if (__indexOf.call(UNARY, tag) >= 0) {
-          tag = 'UNARY';
-        } else if (__indexOf.call(RELATION, tag) >= 0) {
-          if (tag !== 'INSTANCEOF' && this.seenFor) {
-            tag = 'FOR' + tag;
-            this.seenFor = false;
-          } else {
-            tag = 'RELATION';
-            if (this.value() === '!') {
-              poppedToken = this.tokens.pop();
-              id = '!' + id;
-            }
-          }
-        }
-      }
-      if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
-        if (forcedIdentifier) {
-          tag = 'IDENTIFIER';
-          id = new String(id);
-          id.reserved = true;
-        } else if (__indexOf.call(RESERVED, id) >= 0) {
-          this.error("reserved word \"" + id + "\"");
-        }
-      }
-      if (!forcedIdentifier) {
-        if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
-          id = COFFEE_ALIAS_MAP[id];
-        }
-        tag = (function() {
-          switch (id) {
-            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 tag;
-          }
-        })();
-      }
-      tagToken = this.token(tag, id, 0, idLength);
-      if (poppedToken) {
-        _ref4 = [poppedToken[2].first_line, poppedToken[2].first_column], tagToken[2].first_line = _ref4[0], tagToken[2].first_column = _ref4[1];
-      }
-      if (colon) {
-        colonOffset = input.lastIndexOf(':');
-        this.token(':', ':', colonOffset, colon.length);
-      }
-      return input.length;
-    };
-
-    Lexer.prototype.numberToken = function() {
-      var binaryLiteral, lexedLength, match, number, octalLiteral;
-      if (!(match = NUMBER.exec(this.chunk))) {
-        return 0;
-      }
-      number = match[0];
-      if (/^0[BOX]/.test(number)) {
-        this.error("radix prefix '" + number + "' must be lowercase");
-      } else if (/E/.test(number) && !/^0x/.test(number)) {
-        this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'");
-      } else if (/^0\d*[89]/.test(number)) {
-        this.error("decimal literal '" + number + "' must not be prefixed with '0'");
-      } else if (/^0\d+/.test(number)) {
-        this.error("octal literal '" + number + "' must be prefixed with '0o'");
-      }
-      lexedLength = number.length;
-      if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
-        number = '0x' + (parseInt(octalLiteral[1], 8)).toString(16);
-      }
-      if (binaryLiteral = /^0b([01]+)/.exec(number)) {
-        number = '0x' + (parseInt(binaryLiteral[1], 2)).toString(16);
-      }
-      this.token('NUMBER', number, 0, lexedLength);
-      return lexedLength;
-    };
-
-    Lexer.prototype.stringToken = function() {
-      var match, octalEsc, string;
-      switch (this.chunk.charAt(0)) {
-        case "'":
-          if (!(match = SIMPLESTR.exec(this.chunk))) {
-            return 0;
-          }
-          string = match[0];
-          this.token('STRING', string.replace(MULTILINER, '\\\n'), 0, string.length);
-          break;
-        case '"':
-          if (!(string = this.balancedString(this.chunk, '"'))) {
-            return 0;
-          }
-          if (0 < string.indexOf('#{', 1)) {
-            this.interpolateString(string.slice(1, -1), {
-              strOffset: 1,
-              lexedLength: string.length
-            });
-          } else {
-            this.token('STRING', this.escapeLines(string, 0, string.length));
-          }
-          break;
-        default:
-          return 0;
-      }
-      if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
-        this.error("octal escape sequences " + string + " are not allowed");
-      }
-      return string.length;
-    };
-
-    Lexer.prototype.heredocToken = function() {
-      var doc, heredoc, match, quote;
-      if (!(match = HEREDOC.exec(this.chunk))) {
-        return 0;
-      }
-      heredoc = match[0];
-      quote = heredoc.charAt(0);
-      doc = this.sanitizeHeredoc(match[2], {
-        quote: quote,
-        indent: null
-      });
-      if (quote === '"' && 0 <= doc.indexOf('#{')) {
-        this.interpolateString(doc, {
-          heredoc: true,
-          strOffset: 3,
-          lexedLength: heredoc.length
-        });
-      } else {
-        this.token('STRING', this.makeString(doc, quote, true), 0, heredoc.length);
-      }
-      return heredoc.length;
-    };
-
-    Lexer.prototype.commentToken = function() {
-      var comment, here, match;
-      if (!(match = this.chunk.match(COMMENT))) {
-        return 0;
-      }
-      comment = match[0], here = match[1];
-      if (here) {
-        this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
-          herecomment: true,
-          indent: Array(this.indent + 1).join(' ')
-        }), 0, comment.length);
-      }
-      return comment.length;
-    };
-
-    Lexer.prototype.jsToken = function() {
-      var match, script;
-      if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
-        return 0;
-      }
-      this.token('JS', (script = match[0]).slice(1, -1), 0, script.length);
-      return script.length;
-    };
-
-    Lexer.prototype.regexToken = function() {
-      var flags, length, match, prev, regex, _ref2, _ref3;
-      if (this.chunk.charAt(0) !== '/') {
-        return 0;
-      }
-      if (match = HEREGEX.exec(this.chunk)) {
-        length = this.heregexToken(match);
-        return length;
-      }
-      prev = last(this.tokens);
-      if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
-        return 0;
-      }
-      if (!(match = REGEX.exec(this.chunk))) {
-        return 0;
-      }
-      _ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2];
-      if (regex.slice(0, 2) === '/*') {
-        this.error('regular expressions cannot begin with `*`');
-      }
-      if (regex === '//') {
-        regex = '/(?:)/';
-      }
-      this.token('REGEX', "" + regex + flags, 0, match.length);
-      return match.length;
-    };
-
-    Lexer.prototype.heregexToken = function(match) {
-      var body, flags, flagsOffset, heregex, plusToken, prev, re, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
-      heregex = match[0], body = match[1], flags = match[2];
-      if (0 > body.indexOf('#{')) {
-        re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
-        if (re.match(/^\*/)) {
-          this.error('regular expressions cannot begin with `*`');
-        }
-        this.token('REGEX', "/" + (re || '(?:)') + "/" + flags, 0, heregex.length);
-        return heregex.length;
-      }
-      this.token('IDENTIFIER', 'RegExp', 0, 0);
-      this.token('CALL_START', '(', 0, 0);
-      tokens = [];
-      _ref2 = this.interpolateString(body, {
-        regex: true
-      });
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        token = _ref2[_i];
-        tag = token[0], value = token[1];
-        if (tag === 'TOKENS') {
-          tokens.push.apply(tokens, value);
-        } else if (tag === 'NEOSTRING') {
-          if (!(value = value.replace(HEREGEX_OMIT, ''))) {
-            continue;
-          }
-          value = value.replace(/\\/g, '\\\\');
-          token[0] = 'STRING';
-          token[1] = this.makeString(value, '"', true);
-          tokens.push(token);
-        } else {
-          this.error("Unexpected " + tag);
-        }
-        prev = last(this.tokens);
-        plusToken = ['+', '+'];
-        plusToken[2] = prev[2];
-        tokens.push(plusToken);
-      }
-      tokens.pop();
-      if (((_ref3 = tokens[0]) != null ? _ref3[0] : void 0) !== 'STRING') {
-        this.token('STRING', '""', 0, 0);
-        this.token('+', '+', 0, 0);
-      }
-      (_ref4 = this.tokens).push.apply(_ref4, tokens);
-      if (flags) {
-        flagsOffset = heregex.lastIndexOf(flags);
-        this.token(',', ',', flagsOffset, 0);
-        this.token('STRING', '"' + flags + '"', flagsOffset, flags.length);
-      }
-      this.token(')', ')', heregex.length - 1, 0);
-      return heregex.length;
-    };
-
-    Lexer.prototype.lineToken = function() {
-      var diff, indent, match, noNewlines, size;
-      if (!(match = MULTI_DENT.exec(this.chunk))) {
-        return 0;
-      }
-      indent = match[0];
-      this.seenFor = false;
-      size = indent.length - 1 - indent.lastIndexOf('\n');
-      noNewlines = this.unfinished();
-      if (size - this.indebt === this.indent) {
-        if (noNewlines) {
-          this.suppressNewlines();
-        } else {
-          this.newlineToken(0);
-        }
-        return indent.length;
-      }
-      if (size > this.indent) {
-        if (noNewlines) {
-          this.indebt = size - this.indent;
-          this.suppressNewlines();
-          return indent.length;
-        }
-        diff = size - this.indent + this.outdebt;
-        this.token('INDENT', diff, indent.length - size, size);
-        this.indents.push(diff);
-        this.ends.push('OUTDENT');
-        this.outdebt = this.indebt = 0;
-      } else {
-        this.indebt = 0;
-        this.outdentToken(this.indent - size, noNewlines, indent.length);
-      }
-      this.indent = size;
-      return indent.length;
-    };
-
-    Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) {
-      var dent, len;
-      while (moveOut > 0) {
-        len = this.indents.length - 1;
-        if (this.indents[len] === void 0) {
-          moveOut = 0;
-        } else if (this.indents[len] === this.outdebt) {
-          moveOut -= this.outdebt;
-          this.outdebt = 0;
-        } else if (this.indents[len] < this.outdebt) {
-          this.outdebt -= this.indents[len];
-          moveOut -= this.indents[len];
-        } else {
-          dent = this.indents.pop() + this.outdebt;
-          moveOut -= dent;
-          this.outdebt = 0;
-          this.pair('OUTDENT');
-          this.token('OUTDENT', dent, 0, outdentLength);
-        }
-      }
-      if (dent) {
-        this.outdebt -= moveOut;
-      }
-      while (this.value() === ';') {
-        this.tokens.pop();
-      }
-      if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
-        this.token('TERMINATOR', '\n', outdentLength, 0);
-      }
-      return this;
-    };
-
-    Lexer.prototype.whitespaceToken = function() {
-      var match, nline, prev;
-      if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
-        return 0;
-      }
-      prev = last(this.tokens);
-      if (prev) {
-        prev[match ? 'spaced' : 'newLine'] = true;
-      }
-      if (match) {
-        return match[0].length;
-      } else {
-        return 0;
-      }
-    };
-
-    Lexer.prototype.newlineToken = function(offset) {
-      while (this.value() === ';') {
-        this.tokens.pop();
-      }
-      if (this.tag() !== 'TERMINATOR') {
-        this.token('TERMINATOR', '\n', offset, 0);
-      }
-      return this;
-    };
-
-    Lexer.prototype.suppressNewlines = function() {
-      if (this.value() === '\\') {
-        this.tokens.pop();
-      }
-      return this;
-    };
-
-    Lexer.prototype.literalToken = function() {
-      var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
-      if (match = OPERATOR.exec(this.chunk)) {
-        value = match[0];
-        if (CODE.test(value)) {
-          this.tagParameters();
-        }
-      } else {
-        value = this.chunk.charAt(0);
-      }
-      tag = value;
-      prev = last(this.tokens);
-      if (value === '=' && prev) {
-        if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
-          this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
-        }
-        if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
-          prev[0] = 'COMPOUND_ASSIGN';
-          prev[1] += '=';
-          return value.length;
-        }
-      }
-      if (value === ';') {
-        this.seenFor = false;
-        tag = 'TERMINATOR';
-      } else if (__indexOf.call(MATH, value) >= 0) {
-        tag = 'MATH';
-      } else if (__indexOf.call(COMPARE, value) >= 0) {
-        tag = 'COMPARE';
-      } else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
-        tag = 'COMPOUND_ASSIGN';
-      } else if (__indexOf.call(UNARY, value) >= 0) {
-        tag = 'UNARY';
-      } else if (__indexOf.call(SHIFT, value) >= 0) {
-        tag = 'SHIFT';
-      } else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
-        tag = 'LOGIC';
-      } else if (prev && !prev.spaced) {
-        if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
-          if (prev[0] === '?') {
-            prev[0] = 'FUNC_EXIST';
-          }
-          tag = 'CALL_START';
-        } else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
-          tag = 'INDEX_START';
-          switch (prev[0]) {
-            case '?':
-              prev[0] = 'INDEX_SOAK';
-          }
-        }
-      }
-      switch (value) {
-        case '(':
-        case '{':
-        case '[':
-          this.ends.push(INVERSES[value]);
-          break;
-        case ')':
-        case '}':
-        case ']':
-          this.pair(value);
-      }
-      this.token(tag, value);
-      return value.length;
-    };
-
-    Lexer.prototype.sanitizeHeredoc = function(doc, options) {
-      var attempt, herecomment, indent, match, _ref2;
-      indent = options.indent, herecomment = options.herecomment;
-      if (herecomment) {
-        if (HEREDOC_ILLEGAL.test(doc)) {
-          this.error("block comment cannot contain \"*/\", starting");
-        }
-        if (doc.indexOf('\n') < 0) {
-          return doc;
-        }
-      } else {
-        while (match = HEREDOC_INDENT.exec(doc)) {
-          attempt = match[1];
-          if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
-            indent = attempt;
-          }
-        }
-      }
-      if (indent) {
-        doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
-      }
-      if (!herecomment) {
-        doc = doc.replace(/^\n/, '');
-      }
-      return doc;
-    };
-
-    Lexer.prototype.tagParameters = function() {
-      var i, stack, tok, tokens;
-      if (this.tag() !== ')') {
-        return this;
-      }
-      stack = [];
-      tokens = this.tokens;
-      i = tokens.length;
-      tokens[--i][0] = 'PARAM_END';
-      while (tok = tokens[--i]) {
-        switch (tok[0]) {
-          case ')':
-            stack.push(tok);
-            break;
-          case '(':
-          case 'CALL_START':
-            if (stack.length) {
-              stack.pop();
-            } else if (tok[0] === '(') {
-              tok[0] = 'PARAM_START';
-              return this;
-            } else {
-              return this;
-            }
-        }
-      }
-      return this;
-    };
-
-    Lexer.prototype.closeIndentation = function() {
-      return this.outdentToken(this.indent);
-    };
-
-    Lexer.prototype.balancedString = function(str, end) {
-      var continueCount, i, letter, match, prev, stack, _i, _ref2;
-      continueCount = 0;
-      stack = [end];
-      for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) {
-        if (continueCount) {
-          --continueCount;
-          continue;
-        }
-        switch (letter = str.charAt(i)) {
-          case '\\':
-            ++continueCount;
-            continue;
-          case end:
-            stack.pop();
-            if (!stack.length) {
-              return str.slice(0, +i + 1 || 9e9);
-            }
-            end = stack[stack.length - 1];
-            continue;
-        }
-        if (end === '}' && (letter === '"' || letter === "'")) {
-          stack.push(end = letter);
-        } else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) {
-          continueCount += match[0].length - 1;
-        } else if (end === '}' && letter === '{') {
-          stack.push(end = '}');
-        } else if (end === '"' && prev === '#' && letter === '{') {
-          stack.push(end = '}');
-        }
-        prev = letter;
-      }
-      return this.error("missing " + (stack.pop()) + ", starting");
-    };
-
-    Lexer.prototype.interpolateString = function(str, options) {
-      var column, expr, heredoc, i, inner, interpolated, len, letter, lexedLength, line, locationToken, nested, offsetInChunk, pi, plusToken, popped, regex, rparen, strOffset, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
-      if (options == null) {
-        options = {};
-      }
-      heredoc = options.heredoc, regex = options.regex, offsetInChunk = options.offsetInChunk, strOffset = options.strOffset, lexedLength = options.lexedLength;
-      offsetInChunk = offsetInChunk || 0;
-      strOffset = strOffset || 0;
-      lexedLength = lexedLength || str.length;
-      if (heredoc && str.length > 0 && str[0] === '\n') {
-        str = str.slice(1);
-        strOffset++;
-      }
-      tokens = [];
-      pi = 0;
-      i = -1;
-      while (letter = str.charAt(i += 1)) {
-        if (letter === '\\') {
-          i += 1;
-          continue;
-        }
-        if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
-          continue;
-        }
-        if (pi < i) {
-          tokens.push(this.makeToken('NEOSTRING', str.slice(pi, i), strOffset + pi));
-        }
-        inner = expr.slice(1, -1);
-        if (inner.length) {
-          _ref2 = this.getLineAndColumnFromChunk(strOffset + i + 1), line = _ref2[0], column = _ref2[1];
-          nested = new Lexer().tokenize(inner, {
-            line: line,
-            column: column,
-            rewrite: false
-          });
-          popped = nested.pop();
-          if (((_ref3 = nested[0]) != null ? _ref3[0] : void 0) === 'TERMINATOR') {
-            popped = nested.shift();
-          }
-          if (len = nested.length) {
-            if (len > 1) {
-              nested.unshift(this.makeToken('(', '(', strOffset + i + 1, 0));
-              nested.push(this.makeToken(')', ')', strOffset + i + 1 + inner.length, 0));
-            }
-            tokens.push(['TOKENS', nested]);
-          }
-        }
-        i += expr.length;
-        pi = i + 1;
-      }
-      if ((i > pi && pi < str.length)) {
-        tokens.push(this.makeToken('NEOSTRING', str.slice(pi), strOffset + pi));
-      }
-      if (regex) {
-        return tokens;
-      }
-      if (!tokens.length) {
-        return this.token('STRING', '""', offsetInChunk, lexedLength);
-      }
-      if (tokens[0][0] !== 'NEOSTRING') {
-        tokens.unshift(this.makeToken('NEOSTRING', '', offsetInChunk));
-      }
-      if (interpolated = tokens.length > 1) {
-        this.token('(', '(', offsetInChunk, 0);
-      }
-      for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
-        token = tokens[i];
-        tag = token[0], value = token[1];
-        if (i) {
-          if (i) {
-            plusToken = this.token('+', '+');
-          }
-          locationToken = tag === 'TOKENS' ? value[0] : 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 === 'TOKENS') {
-          (_ref4 = this.tokens).push.apply(_ref4, value);
-        } else if (tag === 'NEOSTRING') {
-          token[0] = 'STRING';
-          token[1] = this.makeString(value, '"', heredoc);
-          this.tokens.push(token);
-        } else {
-          this.error("Unexpected " + tag);
-        }
-      }
-      if (interpolated) {
-        rparen = this.makeToken(')', ')', offsetInChunk + lexedLength, 0);
-        rparen.stringEnd = true;
-        this.tokens.push(rparen);
-      }
-      return tokens;
-    };
-
-    Lexer.prototype.pair = function(tag) {
-      var size, wanted;
-      if (tag !== (wanted = last(this.ends))) {
-        if ('OUTDENT' !== wanted) {
-          this.error("unmatched " + tag);
-        }
-        this.indent -= size = last(this.indents);
-        this.outdentToken(size, true);
-        return this.pair(tag);
-      }
-      return this.ends.pop();
-    };
-
-    Lexer.prototype.getLineAndColumnFromChunk = function(offset) {
-      var column, lineCount, lines, string;
-      if (offset === 0) {
-        return [this.chunkLine, this.chunkColumn];
-      }
-      if (offset >= this.chunk.length) {
-        string = this.chunk;
-      } else {
-        string = this.chunk.slice(0, +(offset - 1) + 1 || 9e9);
-      }
-      lineCount = count(string, '\n');
-      column = this.chunkColumn;
-      if (lineCount > 0) {
-        lines = string.split('\n');
-        column = (last(lines)).length;
-      } else {
-        column += string.length;
-      }
-      return [this.chunkLine + lineCount, column];
-    };
-
-    Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) {
-      var lastCharacter, locationData, token, _ref2, _ref3;
-      if (offsetInChunk == null) {
-        offsetInChunk = 0;
-      }
-      if (length == null) {
-        length = value.length;
-      }
-      locationData = {};
-      _ref2 = this.getLineAndColumnFromChunk(offsetInChunk), locationData.first_line = _ref2[0], locationData.first_column = _ref2[1];
-      lastCharacter = Math.max(0, length - 1);
-      _ref3 = this.getLineAndColumnFromChunk(offsetInChunk + lastCharacter), locationData.last_line = _ref3[0], locationData.last_column = _ref3[1];
-      token = [tag, value, locationData];
-      return token;
-    };
-
-    Lexer.prototype.token = function(tag, value, offsetInChunk, length) {
-      var token;
-      token = this.makeToken(tag, value, offsetInChunk, length);
-      this.tokens.push(token);
-      return token;
-    };
-
-    Lexer.prototype.tag = function(index, tag) {
-      var tok;
-      return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
-    };
-
-    Lexer.prototype.value = function(index, val) {
-      var tok;
-      return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
-    };
-
-    Lexer.prototype.unfinished = function() {
-      var _ref2;
-      return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === '?::' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
-    };
-
-    Lexer.prototype.escapeLines = function(str, heredoc) {
-      return str.replace(MULTILINER, heredoc ? '\\n' : '');
-    };
-
-    Lexer.prototype.makeString = function(body, quote, heredoc) {
-      if (!body) {
-        return quote + quote;
-      }
-      body = body.replace(/\\([\s\S])/g, function(match, contents) {
-        if (contents === '\n' || contents === quote) {
-          return contents;
-        } else {
-          return match;
-        }
-      });
-      body = body.replace(RegExp("" + quote, "g"), '\\$&');
-      return quote + this.escapeLines(body, heredoc) + quote;
-    };
-
-    Lexer.prototype.error = function(message) {
-      return throwSyntaxError(message, {
-        first_line: this.chunkLine,
-        first_column: this.chunkColumn
-      });
-    };
-
-    return Lexer;
-
-  })();
-
-  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'];
-
-  COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
-
-  COFFEE_ALIAS_MAP = {
-    and: '&&',
-    or: '||',
-    is: '==',
-    isnt: '!=',
-    not: '!',
-    yes: 'true',
-    no: 'false',
-    on: 'true',
-    off: 'false'
-  };
-
-  COFFEE_ALIASES = (function() {
-    var _results;
-    _results = [];
-    for (key in COFFEE_ALIAS_MAP) {
-      _results.push(key);
-    }
-    return _results;
-  })();
-
-  COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);
-
-  RESERVED = ['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'];
-
-  STRICT_PROSCRIBED = ['arguments', 'eval'];
-
-  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;
-
-  BOM = 65279;
-
-  IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
-
-  NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
-
-  HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
-
-  OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?(\.|::)|\.{2,3})/;
-
-  WHITESPACE = /^[^\n\S]+/;
-
-  COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)$)|^(?:\s*#(?!##[^#]).*)+/;
-
-  CODE = /^[-=]>/;
-
-  MULTI_DENT = /^(?:\n[^\n\S]*)+/;
-
-  SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
-
-  JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
-
-  REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/;
-
-  HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/;
-
-  HEREGEX_OMIT = /\s+(?:#.*)?/g;
-
-  MULTILINER = /\n/g;
-
-  HEREDOC_INDENT = /\n+([^\n\S]*)/g;
-
-  HEREDOC_ILLEGAL = /\*\//;
-
-  LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;
-
-  TRAILING_SPACES = /\s+$/;
-
-  COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
-
-  UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'];
-
-  LOGIC = ['&&', '||', '&', '|', '^'];
-
-  SHIFT = ['<<', '>>', '>>>'];
-
-  COMPARE = ['==', '!=', '<', '>', '<=', '>='];
-
-  MATH = ['*', '/', '%'];
-
-  RELATION = ['IN', 'OF', 'INSTANCEOF'];
-
-  BOOL = ['TRUE', 'FALSE'];
-
-  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']'];
-
-  NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
-
-  CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
-
-  INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED');
-
-  LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
-
-
-});
-
-define('ace/mode/coffee/rewriter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-  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, generate, 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; },
-    __slice = [].slice;
-
-  generate = function(tag, value) {
-    var tok;
-    tok = [tag, value];
-    tok.generated = true;
-    return tok;
-  };
-
-  exports.Rewriter = (function() {
-    function Rewriter() {}
-
-    Rewriter.prototype.rewrite = function(tokens) {
-      this.tokens = tokens;
-      this.removeLeadingNewlines();
-      this.removeMidExpressionNewlines();
-      this.closeOpenCalls();
-      this.closeOpenIndexes();
-      this.addImplicitIndentation();
-      this.tagPostfixConditionals();
-      this.addImplicitBracesAndParens();
-      this.addLocationDataToGeneratedTokens();
-      return this.tokens;
-    };
-
-    Rewriter.prototype.scanTokens = function(block) {
-      var i, token, tokens;
-      tokens = this.tokens;
-      i = 0;
-      while (token = tokens[i]) {
-        i += block.call(this, token, i, tokens);
-      }
-      return true;
-    };
-
-    Rewriter.prototype.detectEnd = function(i, condition, action) {
-      var levels, token, tokens, _ref, _ref1;
-      tokens = this.tokens;
-      levels = 0;
-      while (token = tokens[i]) {
-        if (levels === 0 && condition.call(this, token, i)) {
-          return action.call(this, token, i);
-        }
-        if (!token || levels < 0) {
-          return action.call(this, token, i - 1);
-        }
-        if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
-          levels += 1;
-        } else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
-          levels -= 1;
-        }
-        i += 1;
-      }
-      return i - 1;
-    };
-
-    Rewriter.prototype.removeLeadingNewlines = function() {
-      var i, tag, _i, _len, _ref;
-      _ref = this.tokens;
-      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
-        tag = _ref[i][0];
-        if (tag !== 'TERMINATOR') {
-          break;
-        }
-      }
-      if (i) {
-        return this.tokens.splice(0, i);
-      }
-    };
-
-    Rewriter.prototype.removeMidExpressionNewlines = function() {
-      return this.scanTokens(function(token, i, tokens) {
-        var _ref;
-        if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
-          return 1;
-        }
-        tokens.splice(i, 1);
-        return 0;
-      });
-    };
-
-    Rewriter.prototype.closeOpenCalls = function() {
-      var action, condition;
-      condition = function(token, i) {
-        var _ref;
-        return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
-      };
-      action = function(token, i) {
-        return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
-      };
-      return this.scanTokens(function(token, i) {
-        if (token[0] === 'CALL_START') {
-          this.detectEnd(i + 1, condition, action);
-        }
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.closeOpenIndexes = function() {
-      var action, condition;
-      condition = function(token, i) {
-        var _ref;
-        return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
-      };
-      action = function(token, i) {
-        return token[0] = 'INDEX_END';
-      };
-      return this.scanTokens(function(token, i) {
-        if (token[0] === 'INDEX_START') {
-          this.detectEnd(i + 1, condition, action);
-        }
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.matchTags = function() {
-      var fuzz, i, j, pattern, _i, _ref, _ref1;
-      i = arguments[0], pattern = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
-      fuzz = 0;
-      for (j = _i = 0, _ref = pattern.length; 0 <= _ref ? _i < _ref : _i > _ref; j = 0 <= _ref ? ++_i : --_i) {
-        while (this.tag(i + j + fuzz) === 'HERECOMMENT') {
-          fuzz += 2;
-        }
-        if (pattern[j] == null) {
-          continue;
-        }
-        if (typeof pattern[j] === 'string') {
-          pattern[j] = [pattern[j]];
-        }
-        if (_ref1 = this.tag(i + j + fuzz), __indexOf.call(pattern[j], _ref1) < 0) {
-          return false;
-        }
-      }
-      return true;
-    };
-
-    Rewriter.prototype.looksObjectish = function(j) {
-      return this.matchTags(j, '@', null, ':') || this.matchTags(j, null, ':');
-    };
-
-    Rewriter.prototype.findTagsBackwards = function(i, tags) {
-      var backStack, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
-      backStack = [];
-      while (i >= 0 && (backStack.length || (_ref2 = this.tag(i), __indexOf.call(tags, _ref2) < 0) && ((_ref3 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref3) < 0) || this.tokens[i].generated) && (_ref4 = this.tag(i), __indexOf.call(LINEBREAKS, _ref4) < 0))) {
-        if (_ref = this.tag(i), __indexOf.call(EXPRESSION_END, _ref) >= 0) {
-          backStack.push(this.tag(i));
-        }
-        if ((_ref1 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref1) >= 0) && backStack.length) {
-          backStack.pop();
-        }
-        i -= 1;
-      }
-      return _ref5 = this.tag(i), __indexOf.call(tags, _ref5) >= 0;
-    };
-
-    Rewriter.prototype.addImplicitBracesAndParens = function() {
-      var stack;
-      stack = [];
-      return this.scanTokens(function(token, i, tokens) {
-        var endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, nextTag, offset, prevTag, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
-        tag = token[0];
-        prevTag = (i > 0 ? tokens[i - 1] : [])[0];
-        nextTag = (i < tokens.length - 1 ? tokens[i + 1] : [])[0];
-        stackTop = function() {
-          return stack[stack.length - 1];
-        };
-        startIdx = i;
-        forward = function(n) {
-          return i - startIdx + n;
-        };
-        inImplicit = function() {
-          var _ref, _ref1;
-          return (_ref = stackTop()) != null ? (_ref1 = _ref[2]) != null ? _ref1.ours : void 0 : void 0;
-        };
-        inImplicitCall = function() {
-          var _ref;
-          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '(';
-        };
-        inImplicitObject = function() {
-          var _ref;
-          return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '{';
-        };
-        inImplicitControl = function() {
-          var _ref;
-          return inImplicit && ((_ref = stackTop()) != null ? _ref[0] : void 0) === 'CONTROL';
-        };
-        startImplicitCall = function(j) {
-          var idx;
-          idx = j != null ? j : i;
-          stack.push([
-            '(', idx, {
-              ours: true
-            }
-          ]);
-          tokens.splice(idx, 0, generate('CALL_START', '('));
-          if (j == null) {
-            return i += 1;
-          }
-        };
-        endImplicitCall = function() {
-          stack.pop();
-          tokens.splice(i, 0, generate('CALL_END', ')'));
-          return i += 1;
-        };
-        startImplicitObject = function(j, startsLine) {
-          var idx;
-          if (startsLine == null) {
-            startsLine = true;
-          }
-          idx = j != null ? j : i;
-          stack.push([
-            '{', idx, {
-              sameLine: true,
-              startsLine: startsLine,
-              ours: true
-            }
-          ]);
-          tokens.splice(idx, 0, generate('{', generate(new String('{'))));
-          if (j == null) {
-            return i += 1;
-          }
-        };
-        endImplicitObject = function(j) {
-          j = j != null ? j : i;
-          stack.pop();
-          tokens.splice(j, 0, generate('}', '}'));
-          return i += 1;
-        };
-        if (inImplicitCall() && (tag === 'IF' || tag === 'TRY' || tag === 'FINALLY' || tag === 'CATCH' || tag === 'CLASS' || tag === 'SWITCH')) {
-          stack.push([
-            'CONTROL', i, {
-              ours: true
-            }
-          ]);
-          return forward(1);
-        }
-        if (tag === 'INDENT' && inImplicit()) {
-          if (prevTag !== '=>' && prevTag !== '->' && prevTag !== '[' && prevTag !== '(' && prevTag !== ',' && prevTag !== '{' && prevTag !== 'TRY' && prevTag !== 'ELSE' && prevTag !== '=') {
-            while (inImplicitCall()) {
-              endImplicitCall();
-            }
-          }
-          if (inImplicitControl()) {
-            stack.pop();
-          }
-          stack.push([tag, i]);
-          return forward(1);
-        }
-        if (__indexOf.call(EXPRESSION_START, tag) >= 0) {
-          stack.push([tag, i]);
-          return forward(1);
-        }
-        if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
-          while (inImplicit()) {
-            if (inImplicitCall()) {
-              endImplicitCall();
-            } else if (inImplicitObject()) {
-              endImplicitObject();
-            } else {
-              stack.pop();
-            }
-          }
-          stack.pop();
-        }
-        if ((__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && token.spaced && !token.stringEnd || tag === '?' && i > 0 && !tokens[i - 1].spaced) && (__indexOf.call(IMPLICIT_CALL, nextTag) >= 0 || __indexOf.call(IMPLICIT_UNSPACED_CALL, nextTag) >= 0 && !((_ref = tokens[i + 1]) != null ? _ref.spaced : void 0) && !((_ref1 = tokens[i + 1]) != null ? _ref1.newLine : void 0))) {
-          if (tag === '?') {
-            tag = token[0] = 'FUNC_EXIST';
-          }
-          startImplicitCall(i + 1);
-          return forward(2);
-        }
-        if (this.matchTags(i, IMPLICIT_FUNC, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
-          startImplicitCall(i + 1);
-          stack.push(['INDENT', i + 2]);
-          return forward(3);
-        }
-        if (tag === ':') {
-          if (this.tag(i - 2) === '@') {
-            s = i - 2;
-          } else {
-            s = i - 1;
-          }
-          while (this.tag(s - 2) === 'HERECOMMENT') {
-            s -= 2;
-          }
-          startsLine = s === 0 || (_ref2 = this.tag(s - 1), __indexOf.call(LINEBREAKS, _ref2) >= 0) || tokens[s - 1].newLine;
-          if (stackTop()) {
-            _ref3 = stackTop(), stackTag = _ref3[0], stackIdx = _ref3[1];
-            if ((stackTag === '{' || stackTag === 'INDENT' && this.tag(stackIdx - 1) === '{') && (startsLine || this.tag(s - 1) === ',' || this.tag(s - 1) === '{')) {
-              return forward(1);
-            }
-          }
-          startImplicitObject(s, !!startsLine);
-          return forward(2);
-        }
-        if (prevTag === 'OUTDENT' && inImplicitCall() && (tag === '.' || tag === '?.' || tag === '::' || tag === '?::')) {
-          endImplicitCall();
-          return forward(1);
-        }
-        if (inImplicitObject() && __indexOf.call(LINEBREAKS, tag) >= 0) {
-          stackTop()[2].sameLine = false;
-        }
-        if (__indexOf.call(IMPLICIT_END, tag) >= 0) {
-          while (inImplicit()) {
-            _ref4 = stackTop(), stackTag = _ref4[0], stackIdx = _ref4[1], (_ref5 = _ref4[2], sameLine = _ref5.sameLine, startsLine = _ref5.startsLine);
-            if (inImplicitCall() && prevTag !== ',') {
-              endImplicitCall();
-            } else if (inImplicitObject() && sameLine && !startsLine) {
-              endImplicitObject();
-            } else if (inImplicitObject() && tag === 'TERMINATOR' && prevTag !== ',' && !(startsLine && this.looksObjectish(i + 1))) {
-              endImplicitObject();
-            } else {
-              break;
-            }
-          }
-        }
-        if (tag === ',' && !this.looksObjectish(i + 1) && inImplicitObject() && (nextTag !== 'TERMINATOR' || !this.looksObjectish(i + 2))) {
-          offset = nextTag === 'OUTDENT' ? 1 : 0;
-          while (inImplicitObject()) {
-            endImplicitObject(i + offset);
-          }
-        }
-        return forward(1);
-      });
-    };
-
-    Rewriter.prototype.addLocationDataToGeneratedTokens = function() {
-      return this.scanTokens(function(token, i, tokens) {
-        var column, line, nextLocation, prevLocation, _ref, _ref1;
-        if (token[2]) {
-          return 1;
-        }
-        if (!(token.generated || token.explicit)) {
-          return 1;
-        }
-        if (token[0] === '{' && (nextLocation = (_ref = tokens[i + 1]) != null ? _ref[2] : void 0)) {
-          line = nextLocation.first_line, column = nextLocation.first_column;
-        } else if (prevLocation = (_ref1 = tokens[i - 1]) != null ? _ref1[2] : void 0) {
-          line = prevLocation.last_line, column = prevLocation.last_column;
-        } else {
-          line = column = 0;
-        }
-        token[2] = {
-          first_line: line,
-          first_column: column,
-          last_line: line,
-          last_column: column
-        };
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.addImplicitIndentation = function() {
-      var action, condition, indent, outdent, starter;
-      starter = indent = outdent = null;
-      condition = function(token, i) {
-        var _ref;
-        return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
-      };
-      action = function(token, i) {
-        return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
-      };
-      return this.scanTokens(function(token, i, tokens) {
-        var j, tag, _i, _ref, _ref1;
-        tag = token[0];
-        if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
-          tokens.splice(i, 1);
-          return 0;
-        }
-        if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
-          tokens.splice.apply(tokens, [i, 0].concat(__slice.call(this.indentation())));
-          return 2;
-        }
-        if (tag === 'CATCH') {
-          for (j = _i = 1; _i <= 2; j = ++_i) {
-            if (!((_ref = this.tag(i + j)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
-              continue;
-            }
-            tokens.splice.apply(tokens, [i + j, 0].concat(__slice.call(this.indentation())));
-            return 2 + j;
-          }
-        }
-        if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
-          starter = tag;
-          _ref1 = this.indentation(true), indent = _ref1[0], outdent = _ref1[1];
-          if (starter === 'THEN') {
-            indent.fromThen = true;
-          }
-          tokens.splice(i + 1, 0, indent);
-          this.detectEnd(i + 2, condition, action);
-          if (tag === 'THEN') {
-            tokens.splice(i, 1);
-          }
-          return 1;
-        }
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.tagPostfixConditionals = function() {
-      var action, condition, original;
-      original = null;
-      condition = function(token, i) {
-        var prevTag, tag;
-        tag = token[0];
-        prevTag = this.tokens[i - 1][0];
-        return tag === 'TERMINATOR' || (tag === 'INDENT' && __indexOf.call(SINGLE_LINERS, prevTag) < 0);
-      };
-      action = function(token, i) {
-        if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) {
-          return original[0] = 'POST_' + original[0];
-        }
-      };
-      return this.scanTokens(function(token, i) {
-        if (token[0] !== 'IF') {
-          return 1;
-        }
-        original = token;
-        this.detectEnd(i + 1, condition, action);
-        return 1;
-      });
-    };
-
-    Rewriter.prototype.indentation = function(implicit) {
-      var indent, outdent;
-      if (implicit == null) {
-        implicit = false;
-      }
-      indent = ['INDENT', 2];
-      outdent = ['OUTDENT', 2];
-      if (implicit) {
-        indent.generated = outdent.generated = true;
-      }
-      if (!implicit) {
-        indent.explicit = outdent.explicit = true;
-      }
-      return [indent, outdent];
-    };
-
-    Rewriter.prototype.generate = generate;
-
-    Rewriter.prototype.tag = function(i) {
-      var _ref;
-      return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
-    };
-
-    return Rewriter;
-
-  })();
-
-  BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
-
-  exports.INVERSES = INVERSES = {};
-
-  EXPRESSION_START = [];
-
-  EXPRESSION_END = [];
-
-  for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
-    _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
-    EXPRESSION_START.push(INVERSES[rite] = left);
-    EXPRESSION_END.push(INVERSES[left] = rite);
-  }
-
-  EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
-
-  IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
-
-  IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', 'THROW', '@', '->', '=>', '[', '(', '{', '--', '++'];
-
-  IMPLICIT_UNSPACED_CALL = ['+', '-'];
-
-  IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
-
-  IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
-
-  SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
-
-  SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
-
-  LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
-
-
-});
-
-define('ace/mode/coffee/helpers', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-  var buildLocationData, extend, flatten, last, repeat, _ref;
-
-  exports.starts = function(string, literal, start) {
-    return literal === string.substr(start, literal.length);
-  };
-
-  exports.ends = function(string, literal, back) {
-    var len;
-    len = literal.length;
-    return literal === string.substr(string.length - len - (back || 0), len);
-  };
-
-  exports.repeat = repeat = function(str, n) {
-    var res;
-    res = '';
-    while (n > 0) {
-      if (n & 1) {
-        res += str;
-      }
-      n >>>= 1;
-      str += str;
-    }
-    return res;
-  };
-
-  exports.compact = function(array) {
-    var item, _i, _len, _results;
-    _results = [];
-    for (_i = 0, _len = array.length; _i < _len; _i++) {
-      item = array[_i];
-      if (item) {
-        _results.push(item);
-      }
-    }
-    return _results;
-  };
-
-  exports.count = function(string, substr) {
-    var num, pos;
-    num = pos = 0;
-    if (!substr.length) {
-      return 1 / 0;
-    }
-    while (pos = 1 + string.indexOf(substr, pos)) {
-      num++;
-    }
-    return num;
-  };
-
-  exports.merge = function(options, overrides) {
-    return extend(extend({}, options), overrides);
-  };
-
-  extend = exports.extend = function(object, properties) {
-    var key, val;
-    for (key in properties) {
-      val = properties[key];
-      object[key] = val;
-    }
-    return object;
-  };
-
-  exports.flatten = flatten = function(array) {
-    var element, flattened, _i, _len;
-    flattened = [];
-    for (_i = 0, _len = array.length; _i < _len; _i++) {
-      element = array[_i];
-      if (element instanceof Array) {
-        flattened = flattened.concat(flatten(element));
-      } else {
-        flattened.push(element);
-      }
-    }
-    return flattened;
-  };
-
-  exports.del = function(obj, key) {
-    var val;
-    val = obj[key];
-    delete obj[key];
-    return val;
-  };
-
-  exports.last = last = function(array, back) {
-    return array[array.length - (back || 0) - 1];
-  };
-
-  exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
-    var e, _i, _len;
-    for (_i = 0, _len = this.length; _i < _len; _i++) {
-      e = this[_i];
-      if (fn(e)) {
-        return true;
-      }
-    }
-    return false;
-  };
-
-  exports.invertLiterate = function(code) {
-    var line, lines, maybe_code;
-    maybe_code = true;
-    lines = (function() {
-      var _i, _len, _ref1, _results;
-      _ref1 = code.split('\n');
-      _results = [];
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        line = _ref1[_i];
-        if (maybe_code && /^([ ]{4}|[ ]{0,3}\t)/.test(line)) {
-          _results.push(line);
-        } else if (maybe_code = /^\s*$/.test(line)) {
-          _results.push(line);
-        } else {
-          _results.push('# ' + line);
-        }
-      }
-      return _results;
-    })();
-    return lines.join('\n');
-  };
-
-  buildLocationData = function(first, last) {
-    if (!last) {
-      return first;
-    } else {
-      return {
-        first_line: first.first_line,
-        first_column: first.first_column,
-        last_line: last.last_line,
-        last_column: last.last_column
-      };
-    }
-  };
-
-  exports.addLocationDataFn = function(first, last) {
-    return function(obj) {
-      if (((typeof obj) === 'object') && (!!obj['updateLocationDataIfMissing'])) {
-        obj.updateLocationDataIfMissing(buildLocationData(first, last));
-      }
-      return obj;
-    };
-  };
-
-  exports.locationDataToString = function(obj) {
-    var locationData;
-    if (("2" in obj) && ("first_line" in obj[2])) {
-      locationData = obj[2];
-    } else if ("first_line" in obj) {
-      locationData = obj;
-    }
-    if (locationData) {
-      return ("" + (locationData.first_line + 1) + ":" + (locationData.first_column + 1) + "-") + ("" + (locationData.last_line + 1) + ":" + (locationData.last_column + 1));
-    } else {
-      return "No location data";
-    }
-  };
-
-  exports.baseFileName = function(file, stripExt, useWinPathSep) {
-    var parts, pathSep;
-    if (stripExt == null) {
-      stripExt = false;
-    }
-    if (useWinPathSep == null) {
-      useWinPathSep = false;
-    }
-    pathSep = useWinPathSep ? /\\|\// : /\//;
-    parts = file.split(pathSep);
-    file = parts[parts.length - 1];
-    if (!stripExt) {
-      return file;
-    }
-    parts = file.split('.');
-    parts.pop();
-    if (parts[parts.length - 1] === 'coffee' && parts.length > 1) {
-      parts.pop();
-    }
-    return parts.join('.');
-  };
-
-  exports.isCoffee = function(file) {
-    return /\.((lit)?coffee|coffee\.md)$/.test(file);
-  };
-
-  exports.isLiterate = function(file) {
-    return /\.(litcoffee|coffee\.md)$/.test(file);
-  };
-
-  exports.throwSyntaxError = function(message, location) {
-    var error, _ref1, _ref2;
-    if ((_ref1 = location.last_line) == null) {
-      location.last_line = location.first_line;
-    }
-    if ((_ref2 = location.last_column) == null) {
-      location.last_column = location.first_column;
-    }
-    error = new SyntaxError(message);
-    error.location = location;
-    throw error;
-  };
-
-  exports.prettyErrorMessage = function(error, fileName, code, useColors) {
-    var codeLine, colorize, end, first_column, first_line, last_column, last_line, marker, message, start, _ref1;
-    if (!error.location) {
-      return error.stack || ("" + error);
-    }
-    _ref1 = error.location, first_line = _ref1.first_line, first_column = _ref1.first_column, last_line = _ref1.last_line, last_column = _ref1.last_column;
-    codeLine = code.split('\n')[first_line];
-    start = first_column;
-    end = first_line === last_line ? last_column + 1 : codeLine.length;
-    marker = repeat(' ', start) + repeat('^', end - start);
-    if (useColors) {
-      colorize = function(str) {
-        return "\x1B[1;31m" + str + "\x1B[0m";
-      };
-      codeLine = codeLine.slice(0, start) + colorize(codeLine.slice(start, end)) + codeLine.slice(end);
-      marker = colorize(marker);
-    }
-    message = "" + fileName + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + error.message + "\n" + codeLine + "\n" + marker;
-    return message;
-  };
-
-
-});
-
-define('ace/mode/coffee/parser', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var parser = {trace: function trace() { },
-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,"?::":69,"Index":70,"INDEX_START":71,"IndexValue":72,"INDEX_END":73,"INDEX_SOAK":74,"Slice":75,"{":76,"AssignList":77,"}":78,"CLASS":79,"EXTENDS":80,"OptFuncExist":81,"Arguments":82,"SUPER":83,"FUNC_EXIST":84,"CALL_START":85,"CALL_END":86,"ArgList":87,"THIS":88,"@":89,"[":90,"]":91,"RangeDots":92,"..":93,"Arg":94,"SimpleArgs":95,"TRY":96,"Catch":97,"FINALLY":98,"CATCH":99,"THROW":100,"(":101,")":102,"WhileSource":103,"WHILE":104,"WHEN":105,"UNTIL":106,"Loop":107,"LOOP":108,"ForBody":109,"FOR":110,"ForStart":111,"ForSource":112,"ForVariables":113,"OWN":114,"ForValue":115,"FORIN":116,"FOROF":117,"BY":118,"SWITCH":119,"Whens":120,"ELSE":121,"When":122,"LEADING_WHEN":123,"IfBlock":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":138,"$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:"::",69:"?::",71:"INDEX_START",73:"INDEX_END",74:"INDEX_SOAK",76:"{",78:"}",79:"CLASS",80:"EXTENDS",83:"SUPER",84:"FUNC_EXIST",85:"CALL_START",86:"CALL_END",88:"THIS",89:"@",90:"[",91:"]",93:"..",96:"TRY",98:"FINALLY",99:"CATCH",100:"THROW",101:"(",102:")",104:"WHILE",105:"WHEN",106:"UNTIL",108:"LOOP",110:"FOR",114:"OWN",116:"FORIN",117:"FOROF",118:"BY",119:"SWITCH",121:"ELSE",123:"LEADING_WHEN",125:"IF",126:"POST_IF",127:"UNARY",128:"-",129:"+",130:"--",131:"++",132:"?",133:"MATH",134:"SHIFT",135:"COMPARE",136:"LOGIC",137:"RELATION",138:"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,2],[62,1],[62,1],[70,3],[70,2],[72,1],[72,1],[59,4],[77,0],[77,1],[77,3],[77,4],[77,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],[81,0],[81,1],[82,2],[82,4],[65,1],[65,1],[44,2],[58,2],[58,4],[92,1],[92,1],[64,5],[75,3],[75,2],[75,2],[75,1],[87,1],[87,3],[87,4],[87,4],[87,6],[94,1],[94,1],[95,1],[95,3],[19,2],[19,3],[19,4],[19,5],[97,3],[97,3],[97,2],[24,2],[63,3],[63,5],[103,2],[103,4],[103,2],[103,4],[20,2],[20,2],[20,2],[20,1],[107,2],[107,2],[21,2],[21,2],[21,2],[109,2],[109,2],[111,2],[111,3],[115,1],[115,1],[115,1],[115,1],[113,1],[113,3],[112,2],[112,2],[112,4],[112,4],[112,4],[112,6],[112,6],[22,5],[22,7],[22,4],[22,6],[120,1],[120,2],[122,3],[122,4],[124,3],[124,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 anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
-
-var $0 = $$.length - 1;
-switch (yystate) {
-case 1:return this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Block);
-break;
-case 2:return this.$ = $$[$0];
-break;
-case 3:return this.$ = $$[$0-1];
-break;
-case 4:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(yy.Block.wrap([$$[$0]]));
-break;
-case 5:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].push($$[$0]));
-break;
-case 6:this.$ = $$[$0-1];
-break;
-case 7:this.$ = $$[$0];
-break;
-case 8:this.$ = $$[$0];
-break;
-case 9:this.$ = $$[$0];
-break;
-case 10:this.$ = $$[$0];
-break;
-case 11:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 12:this.$ = $$[$0];
-break;
-case 13:this.$ = $$[$0];
-break;
-case 14:this.$ = $$[$0];
-break;
-case 15:this.$ = $$[$0];
-break;
-case 16:this.$ = $$[$0];
-break;
-case 17:this.$ = $$[$0];
-break;
-case 18:this.$ = $$[$0];
-break;
-case 19:this.$ = $$[$0];
-break;
-case 20:this.$ = $$[$0];
-break;
-case 21:this.$ = $$[$0];
-break;
-case 22:this.$ = $$[$0];
-break;
-case 23:this.$ = $$[$0];
-break;
-case 24:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Block);
-break;
-case 25:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);
-break;
-case 26:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 27:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 28:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 29:this.$ = $$[$0];
-break;
-case 30:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 31:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 32:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Literal($$[$0]));
-break;
-case 33:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Undefined);
-break;
-case 34:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Null);
-break;
-case 35:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Bool($$[$0]));
-break;
-case 36:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0]));
-break;
-case 37:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0]));
-break;
-case 38:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1]));
-break;
-case 39:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 40:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-2])(new yy.Value($$[$0-2])), $$[$0], 'object'));
-break;
-case 41:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign(yy.addLocationDataFn(_$[$0-4])(new yy.Value($$[$0-4])), $$[$0-1], 'object'));
-break;
-case 42:this.$ = $$[$0];
-break;
-case 43:this.$ = $$[$0];
-break;
-case 44:this.$ = $$[$0];
-break;
-case 45:this.$ = $$[$0];
-break;
-case 46:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Return($$[$0]));
-break;
-case 47:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Return);
-break;
-case 48:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Comment($$[$0]));
-break;
-case 49:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Code($$[$0-3], $$[$0], $$[$0-1]));
-break;
-case 50:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Code([], $$[$0], $$[$0-1]));
-break;
-case 51:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('func');
-break;
-case 52:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('boundfunc');
-break;
-case 53:this.$ = $$[$0];
-break;
-case 54:this.$ = $$[$0];
-break;
-case 55:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);
-break;
-case 56:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 57:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
-break;
-case 58:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
-break;
-case 59:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
-break;
-case 60:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Param($$[$0]));
-break;
-case 61:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Param($$[$0-1], null, true));
-break;
-case 62:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Param($$[$0-2], $$[$0]));
-break;
-case 63:this.$ = $$[$0];
-break;
-case 64:this.$ = $$[$0];
-break;
-case 65:this.$ = $$[$0];
-break;
-case 66:this.$ = $$[$0];
-break;
-case 67:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Splat($$[$0-1]));
-break;
-case 68:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 69:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].add($$[$0]));
-break;
-case 70:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value($$[$0-1], [].concat($$[$0])));
-break;
-case 71:this.$ = $$[$0];
-break;
-case 72:this.$ = $$[$0];
-break;
-case 73:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 74:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 75:this.$ = $$[$0];
-break;
-case 76:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 77:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 78:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 79:this.$ = $$[$0];
-break;
-case 80:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0]));
-break;
-case 81:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Access($$[$0], 'soak'));
-break;
-case 82:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'))), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);
-break;
-case 83:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Access(new yy.Literal('prototype'), 'soak')), yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))]);
-break;
-case 84:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Access(new yy.Literal('prototype')));
-break;
-case 85:this.$ = $$[$0];
-break;
-case 86:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-1]);
-break;
-case 87:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(yy.extend($$[$0], {
-          soak: true
-        }));
-break;
-case 88:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Index($$[$0]));
-break;
-case 89:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Slice($$[$0]));
-break;
-case 90:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Obj($$[$0-2], $$[$0-3].generated));
-break;
-case 91:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([]);
-break;
-case 92:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 93:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
-break;
-case 94:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
-break;
-case 95:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
-break;
-case 96:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Class);
-break;
-case 97:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class(null, null, $$[$0]));
-break;
-case 98:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class(null, $$[$0]));
-break;
-case 99:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class(null, $$[$0-1], $$[$0]));
-break;
-case 100:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Class($$[$0]));
-break;
-case 101:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Class($$[$0-1], null, $$[$0]));
-break;
-case 102:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Class($$[$0-2], $$[$0]));
-break;
-case 103:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Class($$[$0-3], $$[$0-1], $$[$0]));
-break;
-case 104:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 105:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Call($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 106:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]));
-break;
-case 107:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Call('super', $$[$0]));
-break;
-case 108:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(false);
-break;
-case 109:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(true);
-break;
-case 110:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([]);
-break;
-case 111:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);
-break;
-case 112:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this')));
-break;
-case 113:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value(new yy.Literal('this')));
-break;
-case 114:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Value(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('this')), [yy.addLocationDataFn(_$[$0])(new yy.Access($$[$0]))], 'this'));
-break;
-case 115:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Arr([]));
-break;
-case 116:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Arr($$[$0-2]));
-break;
-case 117:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('inclusive');
-break;
-case 118:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])('exclusive');
-break;
-case 119:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]));
-break;
-case 120:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Range($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 121:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range($$[$0-1], null, $$[$0]));
-break;
-case 122:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Range(null, $$[$0], $$[$0-1]));
-break;
-case 123:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Range(null, null, $$[$0]));
-break;
-case 124:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 125:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].concat($$[$0]));
-break;
-case 126:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-3].concat($$[$0]));
-break;
-case 127:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])($$[$0-2]);
-break;
-case 128:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])($$[$0-5].concat($$[$0-2]));
-break;
-case 129:this.$ = $$[$0];
-break;
-case 130:this.$ = $$[$0];
-break;
-case 131:this.$ = $$[$0];
-break;
-case 132:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([].concat($$[$0-2], $$[$0]));
-break;
-case 133:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Try($$[$0]));
-break;
-case 134:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]));
-break;
-case 135:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Try($$[$0-2], null, null, $$[$0]));
-break;
-case 136:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]));
-break;
-case 137:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-1], $$[$0]]);
-break;
-case 138:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([yy.addLocationDataFn(_$[$0-1])(new yy.Value($$[$0-1])), $$[$0]]);
-break;
-case 139:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])([null, $$[$0]]);
-break;
-case 140:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Throw($$[$0]));
-break;
-case 141:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Parens($$[$0-1]));
-break;
-case 142:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Parens($$[$0-2]));
-break;
-case 143:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0]));
-break;
-case 144:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
-          guard: $$[$0]
-        }));
-break;
-case 145:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While($$[$0], {
-          invert: true
-        }));
-break;
-case 146:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.While($$[$0-2], {
-          invert: true,
-          guard: $$[$0]
-        }));
-break;
-case 147:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].addBody($$[$0]));
-break;
-case 148:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
-break;
-case 149:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0].addBody(yy.addLocationDataFn(_$[$0-1])(yy.Block.wrap([$$[$0-1]]))));
-break;
-case 150:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])($$[$0]);
-break;
-case 151:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody($$[$0]));
-break;
-case 152:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.While(yy.addLocationDataFn(_$[$0-1])(new yy.Literal('true'))).addBody(yy.addLocationDataFn(_$[$0])(yy.Block.wrap([$$[$0]]))));
-break;
-case 153:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
-break;
-case 154:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0-1], $$[$0]));
-break;
-case 155:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.For($$[$0], $$[$0-1]));
-break;
-case 156:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
-          source: yy.addLocationDataFn(_$[$0])(new yy.Value($$[$0]))
-        });
-break;
-case 157:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])((function () {
-        $$[$0].own = $$[$0-1].own;
-        $$[$0].name = $$[$0-1][0];
-        $$[$0].index = $$[$0-1][1];
-        return $$[$0];
-      }()));
-break;
-case 158:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0]);
-break;
-case 159:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
-        $$[$0].own = true;
-        return $$[$0];
-      }()));
-break;
-case 160:this.$ = $$[$0];
-break;
-case 161:this.$ = $$[$0];
-break;
-case 162:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 163:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])(new yy.Value($$[$0]));
-break;
-case 164:this.$ = yy.addLocationDataFn(_$[$0], _$[$0])([$$[$0]]);
-break;
-case 165:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([$$[$0-2], $$[$0]]);
-break;
-case 166:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
-          source: $$[$0]
-        });
-break;
-case 167:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])({
-          source: $$[$0],
-          object: true
-        });
-break;
-case 168:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
-          source: $$[$0-2],
-          guard: $$[$0]
-        });
-break;
-case 169:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
-          source: $$[$0-2],
-          guard: $$[$0],
-          object: true
-        });
-break;
-case 170:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])({
-          source: $$[$0-2],
-          step: $$[$0]
-        });
-break;
-case 171:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
-          source: $$[$0-4],
-          guard: $$[$0-2],
-          step: $$[$0]
-        });
-break;
-case 172:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])({
-          source: $$[$0-4],
-          step: $$[$0-2],
-          guard: $$[$0]
-        });
-break;
-case 173:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Switch($$[$0-3], $$[$0-1]));
-break;
-case 174:this.$ = yy.addLocationDataFn(_$[$0-6], _$[$0])(new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]));
-break;
-case 175:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Switch(null, $$[$0-1]));
-break;
-case 176:this.$ = yy.addLocationDataFn(_$[$0-5], _$[$0])(new yy.Switch(null, $$[$0-3], $$[$0-1]));
-break;
-case 177:this.$ = $$[$0];
-break;
-case 178:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])($$[$0-1].concat($$[$0]));
-break;
-case 179:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])([[$$[$0-1], $$[$0]]]);
-break;
-case 180:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])([[$$[$0-2], $$[$0-1]]]);
-break;
-case 181:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0-1], $$[$0], {
-          type: $$[$0-2]
-        }));
-break;
-case 182:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])($$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], {
-          type: $$[$0-2]
-        })));
-break;
-case 183:this.$ = $$[$0];
-break;
-case 184:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])($$[$0-2].addElse($$[$0]));
-break;
-case 185:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
-          type: $$[$0-1],
-          statement: true
-        }));
-break;
-case 186:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.If($$[$0], yy.addLocationDataFn(_$[$0-2])(yy.Block.wrap([$$[$0-2]])), {
-          type: $$[$0-1],
-          statement: true
-        }));
-break;
-case 187:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op($$[$0-1], $$[$0]));
-break;
-case 188:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('-', $$[$0]));
-break;
-case 189:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('+', $$[$0]));
-break;
-case 190:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0]));
-break;
-case 191:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0]));
-break;
-case 192:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('--', $$[$0-1], null, true));
-break;
-case 193:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Op('++', $$[$0-1], null, true));
-break;
-case 194:this.$ = yy.addLocationDataFn(_$[$0-1], _$[$0])(new yy.Existence($$[$0-1]));
-break;
-case 195:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('+', $$[$0-2], $$[$0]));
-break;
-case 196:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op('-', $$[$0-2], $$[$0]));
-break;
-case 197:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 198:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 199:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 200:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Op($$[$0-1], $$[$0-2], $$[$0]));
-break;
-case 201:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])((function () {
-        if ($$[$0-1].charAt(0) === '!') {
-          return new yy.Op($$[$0-1].slice(1), $$[$0-2], $$[$0]).invert();
-        } else {
-          return new yy.Op($$[$0-1], $$[$0-2], $$[$0]);
-        }
-      }()));
-break;
-case 202:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Assign($$[$0-2], $$[$0], $$[$0-1]));
-break;
-case 203:this.$ = yy.addLocationDataFn(_$[$0-4], _$[$0])(new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]));
-break;
-case 204:this.$ = yy.addLocationDataFn(_$[$0-3], _$[$0])(new yy.Assign($$[$0-3], $$[$0], $$[$0-2]));
-break;
-case 205:this.$ = yy.addLocationDataFn(_$[$0-2], _$[$0])(new yy.Extends($$[$0-2], $$[$0]));
-break;
-}
-},
-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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],102:[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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,7],6:[2,7],26:[2,7],102:[2,7],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,8],6:[2,8],26:[2,8],102:[2,8],103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[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:[1,98],70:99,71:[1,100],73:[2,12],74:[1,101],78:[2,12],81:92,84:[1,94],85:[2,108],86:[2,12],91:[2,12],93:[2,12],102:[2,12],104:[2,12],105:[2,12],106:[2,12],110:[2,12],118:[2,12],126:[2,12],128:[2,12],129:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12],137:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],73:[2,13],74:[1,101],78:[2,13],81:102,84:[1,94],85:[2,108],86:[2,13],91:[2,13],93:[2,13],102:[2,13],104:[2,13],105:[2,13],106:[2,13],110:[2,13],118:[2,13],126:[2,13],128:[2,13],129:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13],137:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],73:[2,14],78:[2,14],86:[2,14],91:[2,14],93:[2,14],102:[2,14],104:[2,14],105:[2,14],106:[2,14],110:[2,14],118:[2,14],126:[2,14],128:[2,14],129:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14],137:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],73:[2,15],78:[2,15],86:[2,15],91:[2,15],93:[2,15],102:[2,15],104:[2,15],105:[2,15],106:[2,15],110:[2,15],118:[2,15],126:[2,15],128:[2,15],129:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15],137:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],73:[2,16],78:[2,16],86:[2,16],91:[2,16],93:[2,16],102:[2,16],104:[2,16],105:[2,16],106:[2,16],110:[2,16],118:[2,16],126:[2,16],128:[2,16],129:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16],137:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],73:[2,17],78:[2,17],86:[2,17],91:[2,17],93:[2,17],102:[2,17],104:[2,17],105:[2,17],106:[2,17],110:[2,17],118:[2,17],126:[2,17],128:[2,17],129:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17],137:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],73:[2,18],78:[2,18],86:[2,18],91:[2,18],93:[2,18],102:[2,18],104:[2,18],105:[2,18],106:[2,18],110:[2,18],118:[2,18],126:[2,18],128:[2,18],129:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18],137:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],73:[2,19],78:[2,19],86:[2,19],91:[2,19],93:[2,19],102:[2,19],104:[2,19],105:[2,19],106:[2,19],110:[2,19],118:[2,19],126:[2,19],128:[2,19],129:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19],137:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],73:[2,20],78:[2,20],86:[2,20],91:[2,20],93:[2,20],102:[2,20],104:[2,20],105:[2,20],106:[2,20],110:[2,20],118:[2,20],126:[2,20],128:[2,20],129:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20],137:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],73:[2,21],78:[2,21],86:[2,21],91:[2,21],93:[2,21],102:[2,21],104:[2,21],105:[2,21],106:[2,21],110:[2,21],118:[2,21],126:[2,21],128:[2,21],129:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21],137:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],73:[2,22],78:[2,22],86:[2,22],91:[2,22],93:[2,22],102:[2,22],104:[2,22],105:[2,22],106:[2,22],110:[2,22],118:[2,22],126:[2,22],128:[2,22],129:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22],137:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],73:[2,23],78:[2,23],86:[2,23],91:[2,23],93:[2,23],102:[2,23],104:[2,23],105:[2,23],106:[2,23],110:[2,23],118:[2,23],126:[2,23],128:[2,23],129:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23],137:[2,23]},{1:[2,9],6:[2,9],26:[2,9],102:[2,9],104:[2,9],106:[2,9],110:[2,9],126:[2,9]},{1:[2,10],6:[2,10],26:[2,10],102:[2,10],104:[2,10],106:[2,10],110:[2,10],126:[2,10]},{1:[2,11],6:[2,11],26:[2,11],102:[2,11],104:[2,11],106:[2,11],110:[2,11],126:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,104],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],73:[2,75],74:[2,75],78:[2,75],84:[2,75],85:[2,75],86:[2,75],91:[2,75],93:[2,75],102:[2,75],104:[2,75],105:[2,75],106:[2,75],110:[2,75],118:[2,75],126:[2,75],128:[2,75],129:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75],137:[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],69:[2,76],71:[2,76],73:[2,76],74:[2,76],78:[2,76],84:[2,76],85:[2,76],86:[2,76],91:[2,76],93:[2,76],102:[2,76],104:[2,76],105:[2,76],106:[2,76],110:[2,76],118:[2,76],126:[2,76],128:[2,76],129:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76],137:[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],69:[2,77],71:[2,77],73:[2,77],74:[2,77],78:[2,77],84:[2,77],85:[2,77],86:[2,77],91:[2,77],93:[2,77],102:[2,77],104:[2,77],105:[2,77],106:[2,77],110:[2,77],118:[2,77],126:[2,77],128:[2,77],129:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77],137:[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],69:[2,78],71:[2,78],73:[2,78],74:[2,78],78:[2,78],84:[2,78],85:[2,78],86:[2,78],91:[2,78],93:[2,78],102:[2,78],104:[2,78],105:[2,78],106:[2,78],110:[2,78],118:[2,78],126:[2,78],128:[2,78],129:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78],137:[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],69:[2,79],71:[2,79],73:[2,79],74:[2,79],78:[2,79],84:[2,79],85:[2,79],86:[2,79],91:[2,79],93:[2,79],102:[2,79],104:[2,79],105:[2,79],106:[2,79],110:[2,79],118:[2,79],126:[2,79],128:[2,79],129:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79],137:[2,79]},{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],69:[2,106],71:[2,106],73:[2,106],74:[2,106],78:[2,106],82:105,84:[2,106],85:[1,106],86:[2,106],91:[2,106],93:[2,106],102:[2,106],104:[2,106],105:[2,106],106:[2,106],110:[2,106],118:[2,106],126:[2,106],128:[2,106],129:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106],137:[2,106]},{6:[2,55],25:[2,55],27:110,28:[1,73],44:111,48:107,49:[2,55],54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{5:116,25:[1,5]},{8:117,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:119,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:120,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{13:122,14:123,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:124,44:63,58:47,59:48,61:121,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[1,56]},{13:122,14:123,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:124,44:63,58:47,59:48,61:125,63:25,64:26,65:27,76:[1,70],83:[1,28],88:[1,58],89:[1,59],90:[1,57],101:[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],69:[2,72],71:[2,72],73:[2,72],74:[2,72],78:[2,72],80:[1,129],84:[2,72],85:[2,72],86:[2,72],91:[2,72],93:[2,72],102:[2,72],104:[2,72],105:[2,72],106:[2,72],110:[2,72],118:[2,72],126:[2,72],128:[2,72],129:[2,72],130:[1,126],131:[1,127],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[2,72],138:[1,128]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],73:[2,183],78:[2,183],86:[2,183],91:[2,183],93:[2,183],102:[2,183],104:[2,183],105:[2,183],106:[2,183],110:[2,183],118:[2,183],121:[1,130],126:[2,183],128:[2,183],129:[2,183],132:[2,183],133:[2,183],134:[2,183],135:[2,183],136:[2,183],137:[2,183]},{5:131,25:[1,5]},{5:132,25:[1,5]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],73:[2,150],78:[2,150],86:[2,150],91:[2,150],93:[2,150],102:[2,150],104:[2,150],105:[2,150],106:[2,150],110:[2,150],118:[2,150],126:[2,150],128:[2,150],129:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150],137:[2,150]},{5:133,25:[1,5]},{8:134,9:118,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,135],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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,96],5:136,6:[2,96],13:122,14:123,25:[1,5],26:[2,96],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:124,44:63,49:[2,96],54:[2,96],57:[2,96],58:47,59:48,61:138,63:25,64:26,65:27,73:[2,96],76:[1,70],78:[2,96],80:[1,137],83:[1,28],86:[2,96],88:[1,58],89:[1,59],90:[1,57],91:[2,96],93:[2,96],101:[1,56],102:[2,96],104:[2,96],105:[2,96],106:[2,96],110:[2,96],118:[2,96],126:[2,96],128:[2,96],129:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96],137:[2,96]},{8:139,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,47],6:[2,47],8:140,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,47],103:39,104:[2,47],106:[2,47],107:40,108:[1,67],109:41,110:[2,47],111:69,119:[1,42],124:37,125:[1,64],126:[2,47],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],78:[2,48],102:[2,48],104:[2,48],106:[2,48],110:[2,48],126:[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],69:[2,73],71:[2,73],73:[2,73],74:[2,73],78:[2,73],84:[2,73],85:[2,73],86:[2,73],91:[2,73],93:[2,73],102:[2,73],104:[2,73],105:[2,73],106:[2,73],110:[2,73],118:[2,73],126:[2,73],128:[2,73],129:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73],137:[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],69:[2,74],71:[2,74],73:[2,74],74:[2,74],78:[2,74],84:[2,74],85:[2,74],86:[2,74],91:[2,74],93:[2,74],102:[2,74],104:[2,74],105:[2,74],106:[2,74],110:[2,74],118:[2,74],126:[2,74],128:[2,74],129:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74],137:[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],69:[2,29],71:[2,29],73:[2,29],74:[2,29],78:[2,29],84:[2,29],85:[2,29],86:[2,29],91:[2,29],93:[2,29],102:[2,29],104:[2,29],105:[2,29],106:[2,29],110:[2,29],118:[2,29],126:[2,29],128:[2,29],129:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29],137:[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],69:[2,30],71:[2,30],73:[2,30],74:[2,30],78:[2,30],84:[2,30],85:[2,30],86:[2,30],91:[2,30],93:[2,30],102:[2,30],104:[2,30],105:[2,30],106:[2,30],110:[2,30],118:[2,30],126:[2,30],128:[2,30],129:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30],137:[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],69:[2,31],71:[2,31],73:[2,31],74:[2,31],78:[2,31],84:[2,31],85:[2,31],86:[2,31],91:[2,31],93:[2,31],102:[2,31],104:[2,31],105:[2,31],106:[2,31],110:[2,31],118:[2,31],126:[2,31],128:[2,31],129:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31],137:[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],69:[2,32],71:[2,32],73:[2,32],74:[2,32],78:[2,32],84:[2,32],85:[2,32],86:[2,32],91:[2,32],93:[2,32],102:[2,32],104:[2,32],105:[2,32],106:[2,32],110:[2,32],118:[2,32],126:[2,32],128:[2,32],129:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32],137:[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],69:[2,33],71:[2,33],73:[2,33],74:[2,33],78:[2,33],84:[2,33],85:[2,33],86:[2,33],91:[2,33],93:[2,33],102:[2,33],104:[2,33],105:[2,33],106:[2,33],110:[2,33],118:[2,33],126:[2,33],128:[2,33],129:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33],137:[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],69:[2,34],71:[2,34],73:[2,34],74:[2,34],78:[2,34],84:[2,34],85:[2,34],86:[2,34],91:[2,34],93:[2,34],102:[2,34],104:[2,34],105:[2,34],106:[2,34],110:[2,34],118:[2,34],126:[2,34],128:[2,34],129:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34],137:[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],69:[2,35],71:[2,35],73:[2,35],74:[2,35],78:[2,35],84:[2,35],85:[2,35],86:[2,35],91:[2,35],93:[2,35],102:[2,35],104:[2,35],105:[2,35],106:[2,35],110:[2,35],118:[2,35],126:[2,35],128:[2,35],129:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35],137:[2,35]},{4:141,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,142],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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:143,9:118,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,147],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:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],69:[2,112],71:[2,112],73:[2,112],74:[2,112],78:[2,112],84:[2,112],85:[2,112],86:[2,112],91:[2,112],93:[2,112],102:[2,112],104:[2,112],105:[2,112],106:[2,112],110:[2,112],118:[2,112],126:[2,112],128:[2,112],129:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112],137:[2,112]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],27:149,28:[1,73],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],69:[2,113],71:[2,113],73:[2,113],74:[2,113],78:[2,113],84:[2,113],85:[2,113],86:[2,113],91:[2,113],93:[2,113],102:[2,113],104:[2,113],105:[2,113],106:[2,113],110:[2,113],118:[2,113],126:[2,113],128:[2,113],129:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{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],69:[2,68],71:[2,68],73:[2,68],74:[2,68],78:[2,68],80:[2,68],84:[2,68],85:[2,68],86:[2,68],91:[2,68],93:[2,68],102:[2,68],104:[2,68],105:[2,68],106:[2,68],110:[2,68],118:[2,68],126:[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],138:[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],69:[2,71],71:[2,71],73:[2,71],74:[2,71],78:[2,71],80:[2,71],84:[2,71],85:[2,71],86:[2,71],91:[2,71],93:[2,71],102:[2,71],104:[2,71],105:[2,71],106:[2,71],110:[2,71],118:[2,71],126:[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],138:[2,71]},{8:150,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:151,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:152,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:153,8:154,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{27:159,28:[1,73],44:160,58:161,59:162,64:155,76:[1,70],89:[1,114],90:[1,57],113:156,114:[1,157],115:158},{112:163,116:[1,164],117:[1,165]},{6:[2,91],11:169,25:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:166,78:[2,91],89:[1,114]},{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],69:[2,27],71:[2,27],73:[2,27],74:[2,27],78:[2,27],84:[2,27],85:[2,27],86:[2,27],91:[2,27],93:[2,27],102:[2,27],104:[2,27],105:[2,27],106:[2,27],110:[2,27],118:[2,27],126:[2,27],128:[2,27],129:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27],137:[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],69:[2,28],71:[2,28],73:[2,28],74:[2,28],78:[2,28],84:[2,28],85:[2,28],86:[2,28],91:[2,28],93:[2,28],102:[2,28],104:[2,28],105:[2,28],106:[2,28],110:[2,28],118:[2,28],126:[2,28],128:[2,28],129:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28],137:[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],69:[2,26],71:[2,26],73:[2,26],74:[2,26],78:[2,26],80:[2,26],84:[2,26],85:[2,26],86:[2,26],91:[2,26],93:[2,26],102:[2,26],104:[2,26],105:[2,26],106:[2,26],110:[2,26],116:[2,26],117:[2,26],118:[2,26],126:[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],138:[2,26]},{1:[2,6],6:[2,6],7:173,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],102:[2,6],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[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],73:[2,24],78:[2,24],86:[2,24],91:[2,24],93:[2,24],98:[2,24],99:[2,24],102:[2,24],104:[2,24],105:[2,24],106:[2,24],110:[2,24],118:[2,24],121:[2,24],123:[2,24],126:[2,24],128:[2,24],129:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24],137:[2,24]},{6:[1,74],26:[1,174]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],73:[2,194],78:[2,194],86:[2,194],91:[2,194],93:[2,194],102:[2,194],104:[2,194],105:[2,194],106:[2,194],110:[2,194],118:[2,194],126:[2,194],128:[2,194],129:[2,194],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194],137:[2,194]},{8:175,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:176,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:177,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:178,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:179,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:180,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:181,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:182,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],73:[2,149],78:[2,149],86:[2,149],91:[2,149],93:[2,149],102:[2,149],104:[2,149],105:[2,149],106:[2,149],110:[2,149],118:[2,149],126:[2,149],128:[2,149],129:[2,149],132:[2,149],133:[2,149],134:[2,149],135:[2,149],136:[2,149],137:[2,149]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],73:[2,154],78:[2,154],86:[2,154],91:[2,154],93:[2,154],102:[2,154],104:[2,154],105:[2,154],106:[2,154],110:[2,154],118:[2,154],126:[2,154],128:[2,154],129:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154],137:[2,154]},{8:183,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],73:[2,148],78:[2,148],86:[2,148],91:[2,148],93:[2,148],102:[2,148],104:[2,148],105:[2,148],106:[2,148],110:[2,148],118:[2,148],126:[2,148],128:[2,148],129:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148],137:[2,148]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],73:[2,153],78:[2,153],86:[2,153],91:[2,153],93:[2,153],102:[2,153],104:[2,153],105:[2,153],106:[2,153],110:[2,153],118:[2,153],126:[2,153],128:[2,153],129:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153],137:[2,153]},{82:184,85:[1,106]},{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],69:[2,69],71:[2,69],73:[2,69],74:[2,69],78:[2,69],80:[2,69],84:[2,69],85:[2,69],86:[2,69],91:[2,69],93:[2,69],102:[2,69],104:[2,69],105:[2,69],106:[2,69],110:[2,69],118:[2,69],126:[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],138:[2,69]},{85:[2,109]},{27:185,28:[1,73]},{27:186,28:[1,73]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],27:187,28:[1,73],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],69:[2,84],71:[2,84],73:[2,84],74:[2,84],78:[2,84],80:[2,84],84:[2,84],85:[2,84],86:[2,84],91:[2,84],93:[2,84],102:[2,84],104:[2,84],105:[2,84],106:[2,84],110:[2,84],118:[2,84],126:[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],138:[2,84]},{27:188,28:[1,73]},{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],69:[2,85],71:[2,85],73:[2,85],74:[2,85],78:[2,85],80:[2,85],84:[2,85],85:[2,85],86:[2,85],91:[2,85],93:[2,85],102:[2,85],104:[2,85],105:[2,85],106:[2,85],110:[2,85],118:[2,85],126:[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],138:[2,85]},{8:190,9:118,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,194],58:47,59:48,61:36,63:25,64:26,65:27,72:189,75:191,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],92:192,93:[1,193],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{70:195,71:[1,100],74:[1,101]},{82:196,85:[1,106]},{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],69:[2,70],71:[2,70],73:[2,70],74:[2,70],78:[2,70],80:[2,70],84:[2,70],85:[2,70],86:[2,70],91:[2,70],93:[2,70],102:[2,70],104:[2,70],105:[2,70],106:[2,70],110:[2,70],118:[2,70],126:[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],138:[2,70]},{6:[1,198],8:197,9:118,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,199],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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],49:[2,107],54:[2,107],57:[2,107],66:[2,107],67:[2,107],68:[2,107],69:[2,107],71:[2,107],73:[2,107],74:[2,107],78:[2,107],84:[2,107],85:[2,107],86:[2,107],91:[2,107],93:[2,107],102:[2,107],104:[2,107],105:[2,107],106:[2,107],110:[2,107],118:[2,107],126:[2,107],128:[2,107],129:[2,107],132:[2,107],133:[2,107],134:[2,107],135:[2,107],136:[2,107],137:[2,107]},{8:202,9:118,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,147],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:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[1,200],87:201,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],49:[1,203],53:205,54:[1,204]},{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,207],49:[2,60],54:[2,60],57:[1,206]},{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:149,28:[1,73]},{8:202,9:118,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,147],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:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:145,88:[1,58],89:[1,59],90:[1,57],91:[1,144],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],73:[2,50],78:[2,50],86:[2,50],91:[2,50],93:[2,50],102:[2,50],104:[2,50],105:[2,50],106:[2,50],110:[2,50],118:[2,50],126:[2,50],128:[2,50],129:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50],137:[2,50]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],73:[2,187],78:[2,187],86:[2,187],91:[2,187],93:[2,187],102:[2,187],103:87,104:[2,187],105:[2,187],106:[2,187],109:88,110:[2,187],111:69,118:[2,187],126:[2,187],128:[2,187],129:[2,187],132:[1,78],133:[2,187],134:[2,187],135:[2,187],136:[2,187],137:[2,187]},{103:90,104:[1,65],106:[1,66],109:91,110:[1,68],111:69,126:[1,89]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],73:[2,188],78:[2,188],86:[2,188],91:[2,188],93:[2,188],102:[2,188],103:87,104:[2,188],105:[2,188],106:[2,188],109:88,110:[2,188],111:69,118:[2,188],126:[2,188],128:[2,188],129:[2,188],132:[1,78],133:[2,188],134:[2,188],135:[2,188],136:[2,188],137:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],73:[2,189],78:[2,189],86:[2,189],91:[2,189],93:[2,189],102:[2,189],103:87,104:[2,189],105:[2,189],106:[2,189],109:88,110:[2,189],111:69,118:[2,189],126:[2,189],128:[2,189],129:[2,189],132:[1,78],133:[2,189],134:[2,189],135:[2,189],136:[2,189],137:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,190],74:[2,72],78:[2,190],84:[2,72],85:[2,72],86:[2,190],91:[2,190],93:[2,190],102:[2,190],104:[2,190],105:[2,190],106:[2,190],110:[2,190],118:[2,190],126:[2,190],128:[2,190],129:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190],137:[2,190]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:92,84:[1,94],85:[2,108]},{62:103,66:[1,95],67:[1,96],68:[1,97],69:[1,98],70:99,71:[1,100],74:[1,101],81:102,84:[1,94],85:[2,108]},{66:[2,75],67:[2,75],68:[2,75],69:[2,75],71:[2,75],74:[2,75],84:[2,75],85:[2,75]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,191],74:[2,72],78:[2,191],84:[2,72],85:[2,72],86:[2,191],91:[2,191],93:[2,191],102:[2,191],104:[2,191],105:[2,191],106:[2,191],110:[2,191],118:[2,191],126:[2,191],128:[2,191],129:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191],137:[2,191]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],73:[2,192],78:[2,192],86:[2,192],91:[2,192],93:[2,192],102:[2,192],104:[2,192],105:[2,192],106:[2,192],110:[2,192],118:[2,192],126:[2,192],128:[2,192],129:[2,192],132:[2,192],133:[2,192],134:[2,192],135:[2,192],136:[2,192],137:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],73:[2,193],78:[2,193],86:[2,193],91:[2,193],93:[2,193],102:[2,193],104:[2,193],105:[2,193],106:[2,193],110:[2,193],118:[2,193],126:[2,193],128:[2,193],129:[2,193],132:[2,193],133:[2,193],134:[2,193],135:[2,193],136:[2,193],137:[2,193]},{6:[1,210],8:208,9:118,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,209],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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:211,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{5:212,25:[1,5],125:[1,213]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],73:[2,133],78:[2,133],86:[2,133],91:[2,133],93:[2,133],97:214,98:[1,215],99:[1,216],102:[2,133],104:[2,133],105:[2,133],106:[2,133],110:[2,133],118:[2,133],126:[2,133],128:[2,133],129:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133],137:[2,133]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],73:[2,147],78:[2,147],86:[2,147],91:[2,147],93:[2,147],102:[2,147],104:[2,147],105:[2,147],106:[2,147],110:[2,147],118:[2,147],126:[2,147],128:[2,147],129:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147],137:[2,147]},{1:[2,155],6:[2,155],25:[2,155],26:[2,155],49:[2,155],54:[2,155],57:[2,155],73:[2,155],78:[2,155],86:[2,155],91:[2,155],93:[2,155],102:[2,155],104:[2,155],105:[2,155],106:[2,155],110:[2,155],118:[2,155],126:[2,155],128:[2,155],129:[2,155],132:[2,155],133:[2,155],134:[2,155],135:[2,155],136:[2,155],137:[2,155]},{25:[1,217],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{120:218,122:219,123:[1,220]},{1:[2,97],6:[2,97],25:[2,97],26:[2,97],49:[2,97],54:[2,97],57:[2,97],73:[2,97],78:[2,97],86:[2,97],91:[2,97],93:[2,97],102:[2,97],104:[2,97],105:[2,97],106:[2,97],110:[2,97],118:[2,97],126:[2,97],128:[2,97],129:[2,97],132:[2,97],133:[2,97],134:[2,97],135:[2,97],136:[2,97],137:[2,97]},{8:221,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,100],5:222,6:[2,100],25:[1,5],26:[2,100],49:[2,100],54:[2,100],57:[2,100],66:[2,72],67:[2,72],68:[2,72],69:[2,72],71:[2,72],73:[2,100],74:[2,72],78:[2,100],80:[1,223],84:[2,72],85:[2,72],86:[2,100],91:[2,100],93:[2,100],102:[2,100],104:[2,100],105:[2,100],106:[2,100],110:[2,100],118:[2,100],126:[2,100],128:[2,100],129:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100],137:[2,100]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],73:[2,140],78:[2,140],86:[2,140],91:[2,140],93:[2,140],102:[2,140],103:87,104:[2,140],105:[2,140],106:[2,140],109:88,110:[2,140],111:69,118:[2,140],126:[2,140],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,46],6:[2,46],26:[2,46],102:[2,46],103:87,104:[2,46],106:[2,46],109:88,110:[2,46],111:69,126:[2,46],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,74],102:[1,224]},{4:225,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,129],25:[2,129],54:[2,129],57:[1,227],91:[2,129],92:226,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[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],69:[2,115],71:[2,115],73:[2,115],74:[2,115],78:[2,115],84:[2,115],85:[2,115],86:[2,115],91:[2,115],93:[2,115],102:[2,115],104:[2,115],105:[2,115],106:[2,115],110:[2,115],116:[2,115],117:[2,115],118:[2,115],126:[2,115],128:[2,115],129:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115],137:[2,115]},{6:[2,53],25:[2,53],53:228,54:[1,229],91:[2,53]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],86:[2,124],91:[2,124]},{8:202,9:118,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,147],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:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:230,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,130],25:[2,130],26:[2,130],54:[2,130],86:[2,130],91:[2,130]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],43:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],69:[2,114],71:[2,114],73:[2,114],74:[2,114],78:[2,114],80:[2,114],84:[2,114],85:[2,114],86:[2,114],91:[2,114],93:[2,114],102:[2,114],104:[2,114],105:[2,114],106:[2,114],110:[2,114],116:[2,114],117:[2,114],118:[2,114],126:[2,114],128:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114],137:[2,114],138:[2,114]},{5:231,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],73:[2,143],78:[2,143],86:[2,143],91:[2,143],93:[2,143],102:[2,143],103:87,104:[1,65],105:[1,232],106:[1,66],109:88,110:[1,68],111:69,118:[2,143],126:[2,143],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],73:[2,145],78:[2,145],86:[2,145],91:[2,145],93:[2,145],102:[2,145],103:87,104:[1,65],105:[1,233],106:[1,66],109:88,110:[1,68],111:69,118:[2,145],126:[2,145],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],73:[2,151],78:[2,151],86:[2,151],91:[2,151],93:[2,151],102:[2,151],104:[2,151],105:[2,151],106:[2,151],110:[2,151],118:[2,151],126:[2,151],128:[2,151],129:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151],137:[2,151]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],73:[2,152],78:[2,152],86:[2,152],91:[2,152],93:[2,152],102:[2,152],103:87,104:[1,65],105:[2,152],106:[1,66],109:88,110:[1,68],111:69,118:[2,152],126:[2,152],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,156],6:[2,156],25:[2,156],26:[2,156],49:[2,156],54:[2,156],57:[2,156],73:[2,156],78:[2,156],86:[2,156],91:[2,156],93:[2,156],102:[2,156],104:[2,156],105:[2,156],106:[2,156],110:[2,156],118:[2,156],126:[2,156],128:[2,156],129:[2,156],132:[2,156],133:[2,156],134:[2,156],135:[2,156],136:[2,156],137:[2,156]},{116:[2,158],117:[2,158]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],113:234,115:158},{54:[1,235],116:[2,164],117:[2,164]},{54:[2,160],116:[2,160],117:[2,160]},{54:[2,161],116:[2,161],117:[2,161]},{54:[2,162],116:[2,162],117:[2,162]},{54:[2,163],116:[2,163],117:[2,163]},{1:[2,157],6:[2,157],25:[2,157],26:[2,157],49:[2,157],54:[2,157],57:[2,157],73:[2,157],78:[2,157],86:[2,157],91:[2,157],93:[2,157],102:[2,157],104:[2,157],105:[2,157],106:[2,157],110:[2,157],118:[2,157],126:[2,157],128:[2,157],129:[2,157],132:[2,157],133:[2,157],134:[2,157],135:[2,157],136:[2,157],137:[2,157]},{8:236,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:237,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],53:238,54:[1,239],78:[2,53]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],78:[2,92]},{6:[2,39],25:[2,39],26:[2,39],43:[1,240],54:[2,39],78:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],78:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],78:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],78:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],78:[2,45]},{1:[2,5],6:[2,5],26:[2,5],102:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],73:[2,25],78:[2,25],86:[2,25],91:[2,25],93:[2,25],98:[2,25],99:[2,25],102:[2,25],104:[2,25],105:[2,25],106:[2,25],110:[2,25],118:[2,25],121:[2,25],123:[2,25],126:[2,25],128:[2,25],129:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25],137:[2,25]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],73:[2,195],78:[2,195],86:[2,195],91:[2,195],93:[2,195],102:[2,195],103:87,104:[2,195],105:[2,195],106:[2,195],109:88,110:[2,195],111:69,118:[2,195],126:[2,195],128:[2,195],129:[2,195],132:[1,78],133:[1,81],134:[2,195],135:[2,195],136:[2,195],137:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],73:[2,196],78:[2,196],86:[2,196],91:[2,196],93:[2,196],102:[2,196],103:87,104:[2,196],105:[2,196],106:[2,196],109:88,110:[2,196],111:69,118:[2,196],126:[2,196],128:[2,196],129:[2,196],132:[1,78],133:[1,81],134:[2,196],135:[2,196],136:[2,196],137:[2,196]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],73:[2,197],78:[2,197],86:[2,197],91:[2,197],93:[2,197],102:[2,197],103:87,104:[2,197],105:[2,197],106:[2,197],109:88,110:[2,197],111:69,118:[2,197],126:[2,197],128:[2,197],129:[2,197],132:[1,78],133:[2,197],134:[2,197],135:[2,197],136:[2,197],137:[2,197]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],73:[2,198],78:[2,198],86:[2,198],91:[2,198],93:[2,198],102:[2,198],103:87,104:[2,198],105:[2,198],106:[2,198],109:88,110:[2,198],111:69,118:[2,198],126:[2,198],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[2,198],135:[2,198],136:[2,198],137:[2,198]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],73:[2,199],78:[2,199],86:[2,199],91:[2,199],93:[2,199],102:[2,199],103:87,104:[2,199],105:[2,199],106:[2,199],109:88,110:[2,199],111:69,118:[2,199],126:[2,199],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,199],136:[2,199],137:[1,85]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],73:[2,200],78:[2,200],86:[2,200],91:[2,200],93:[2,200],102:[2,200],103:87,104:[2,200],105:[2,200],106:[2,200],109:88,110:[2,200],111:69,118:[2,200],126:[2,200],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[2,200],137:[1,85]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],73:[2,201],78:[2,201],86:[2,201],91:[2,201],93:[2,201],102:[2,201],103:87,104:[2,201],105:[2,201],106:[2,201],109:88,110:[2,201],111:69,118:[2,201],126:[2,201],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[2,201],136:[2,201],137:[2,201]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],73:[2,186],78:[2,186],86:[2,186],91:[2,186],93:[2,186],102:[2,186],103:87,104:[1,65],105:[2,186],106:[1,66],109:88,110:[1,68],111:69,118:[2,186],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],73:[2,185],78:[2,185],86:[2,185],91:[2,185],93:[2,185],102:[2,185],103:87,104:[1,65],105:[2,185],106:[1,66],109:88,110:[1,68],111:69,118:[2,185],126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{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],69:[2,104],71:[2,104],73:[2,104],74:[2,104],78:[2,104],84:[2,104],85:[2,104],86:[2,104],91:[2,104],93:[2,104],102:[2,104],104:[2,104],105:[2,104],106:[2,104],110:[2,104],118:[2,104],126:[2,104],128:[2,104],129:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104],137:[2,104]},{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],69:[2,80],71:[2,80],73:[2,80],74:[2,80],78:[2,80],80:[2,80],84:[2,80],85:[2,80],86:[2,80],91:[2,80],93:[2,80],102:[2,80],104:[2,80],105:[2,80],106:[2,80],110:[2,80],118:[2,80],126:[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],138:[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],69:[2,81],71:[2,81],73:[2,81],74:[2,81],78:[2,81],80:[2,81],84:[2,81],85:[2,81],86:[2,81],91:[2,81],93:[2,81],102:[2,81],104:[2,81],105:[2,81],106:[2,81],110:[2,81],118:[2,81],126:[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],138:[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],69:[2,82],71:[2,82],73:[2,82],74:[2,82],78:[2,82],80:[2,82],84:[2,82],85:[2,82],86:[2,82],91:[2,82],93:[2,82],102:[2,82],104:[2,82],105:[2,82],106:[2,82],110:[2,82],118:[2,82],126:[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],138:[2,82]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],69:[2,83],71:[2,83],73:[2,83],74:[2,83],78:[2,83],80:[2,83],84:[2,83],85:[2,83],86:[2,83],91:[2,83],93:[2,83],102:[2,83],104:[2,83],105:[2,83],106:[2,83],110:[2,83],118:[2,83],126:[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],138:[2,83]},{73:[1,241]},{57:[1,194],73:[2,88],92:242,93:[1,193],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{73:[2,89]},{8:243,9:118,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,73:[2,123],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{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],73:[2,117],76:[2,117],79:[2,117],83:[2,117],88:[2,117],89:[2,117],90:[2,117],96:[2,117],100:[2,117],101:[2,117],104:[2,117],106:[2,117],108:[2,117],110:[2,117],119:[2,117],125:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117],131:[2,117]},{12:[2,118],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],73:[2,118],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{1:[2,87],6:[2,87],25:[2,87],26:[2,87],40:[2,87],49:[2,87],54:[2,87],57:[2,87],66:[2,87],67:[2,87],68:[2,87],69:[2,87],71:[2,87],73:[2,87],74:[2,87],78:[2,87],80:[2,87],84:[2,87],85:[2,87],86:[2,87],91:[2,87],93:[2,87],102:[2,87],104:[2,87],105:[2,87],106:[2,87],110:[2,87],118:[2,87],126:[2,87],128:[2,87],129:[2,87],130:[2,87],131:[2,87],132:[2,87],133:[2,87],134:[2,87],135:[2,87],136:[2,87],137:[2,87],138:[2,87]},{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],69:[2,105],71:[2,105],73:[2,105],74:[2,105],78:[2,105],84:[2,105],85:[2,105],86:[2,105],91:[2,105],93:[2,105],102:[2,105],104:[2,105],105:[2,105],106:[2,105],110:[2,105],118:[2,105],126:[2,105],128:[2,105],129:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105],137:[2,105]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],73:[2,36],78:[2,36],86:[2,36],91:[2,36],93:[2,36],102:[2,36],103:87,104:[2,36],105:[2,36],106:[2,36],109:88,110:[2,36],111:69,118:[2,36],126:[2,36],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:244,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:245,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{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],69:[2,110],71:[2,110],73:[2,110],74:[2,110],78:[2,110],84:[2,110],85:[2,110],86:[2,110],91:[2,110],93:[2,110],102:[2,110],104:[2,110],105:[2,110],106:[2,110],110:[2,110],118:[2,110],126:[2,110],128:[2,110],129:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110],137:[2,110]},{6:[2,53],25:[2,53],53:246,54:[1,229],86:[2,53]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],57:[1,247],86:[2,129],91:[2,129],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{50:248,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:110,28:[1,73],44:111,55:249,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[1,250],25:[1,251]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:252,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,202],6:[2,202],25:[2,202],26:[2,202],49:[2,202],54:[2,202],57:[2,202],73:[2,202],78:[2,202],86:[2,202],91:[2,202],93:[2,202],102:[2,202],103:87,104:[2,202],105:[2,202],106:[2,202],109:88,110:[2,202],111:69,118:[2,202],126:[2,202],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:253,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:254,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,205],6:[2,205],25:[2,205],26:[2,205],49:[2,205],54:[2,205],57:[2,205],73:[2,205],78:[2,205],86:[2,205],91:[2,205],93:[2,205],102:[2,205],103:87,104:[2,205],105:[2,205],106:[2,205],109:88,110:[2,205],111:69,118:[2,205],126:[2,205],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],73:[2,184],78:[2,184],86:[2,184],91:[2,184],93:[2,184],102:[2,184],104:[2,184],105:[2,184],106:[2,184],110:[2,184],118:[2,184],126:[2,184],128:[2,184],129:[2,184],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184],137:[2,184]},{8:255,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],73:[2,134],78:[2,134],86:[2,134],91:[2,134],93:[2,134],98:[1,256],102:[2,134],104:[2,134],105:[2,134],106:[2,134],110:[2,134],118:[2,134],126:[2,134],128:[2,134],129:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134],137:[2,134]},{5:257,25:[1,5]},{5:260,25:[1,5],27:258,28:[1,73],59:259,76:[1,70]},{120:261,122:219,123:[1,220]},{26:[1,262],121:[1,263],122:264,123:[1,220]},{26:[2,177],121:[2,177],123:[2,177]},{8:266,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],95:265,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,98],5:267,6:[2,98],25:[1,5],26:[2,98],49:[2,98],54:[2,98],57:[2,98],73:[2,98],78:[2,98],86:[2,98],91:[2,98],93:[2,98],102:[2,98],103:87,104:[1,65],105:[2,98],106:[1,66],109:88,110:[1,68],111:69,118:[2,98],126:[2,98],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],49:[2,101],54:[2,101],57:[2,101],73:[2,101],78:[2,101],86:[2,101],91:[2,101],93:[2,101],102:[2,101],104:[2,101],105:[2,101],106:[2,101],110:[2,101],118:[2,101],126:[2,101],128:[2,101],129:[2,101],132:[2,101],133:[2,101],134:[2,101],135:[2,101],136:[2,101],137:[2,101]},{8:268,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],66:[2,141],67:[2,141],68:[2,141],69:[2,141],71:[2,141],73:[2,141],74:[2,141],78:[2,141],84:[2,141],85:[2,141],86:[2,141],91:[2,141],93:[2,141],102:[2,141],104:[2,141],105:[2,141],106:[2,141],110:[2,141],118:[2,141],126:[2,141],128:[2,141],129:[2,141],132:[2,141],133:[2,141],134:[2,141],135:[2,141],136:[2,141],137:[2,141]},{6:[1,74],26:[1,269]},{8:270,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,67],12:[2,118],25:[2,67],28:[2,118],30:[2,118],31:[2,118],33:[2,118],34:[2,118],35:[2,118],36:[2,118],37:[2,118],38:[2,118],45:[2,118],46:[2,118],47:[2,118],51:[2,118],52:[2,118],54:[2,67],76:[2,118],79:[2,118],83:[2,118],88:[2,118],89:[2,118],90:[2,118],91:[2,67],96:[2,118],100:[2,118],101:[2,118],104:[2,118],106:[2,118],108:[2,118],110:[2,118],119:[2,118],125:[2,118],127:[2,118],128:[2,118],129:[2,118],130:[2,118],131:[2,118]},{6:[1,272],25:[1,273],91:[1,271]},{6:[2,54],8:202,9:118,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:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],86:[2,54],88:[1,58],89:[1,59],90:[1,57],91:[2,54],94:274,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:275,54:[1,229]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],73:[2,181],78:[2,181],86:[2,181],91:[2,181],93:[2,181],102:[2,181],104:[2,181],105:[2,181],106:[2,181],110:[2,181],118:[2,181],121:[2,181],126:[2,181],128:[2,181],129:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181],137:[2,181]},{8:276,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:277,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{116:[2,159],117:[2,159]},{27:159,28:[1,73],44:160,58:161,59:162,76:[1,70],89:[1,114],90:[1,115],115:278},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],73:[2,166],78:[2,166],86:[2,166],91:[2,166],93:[2,166],102:[2,166],103:87,104:[2,166],105:[1,279],106:[2,166],109:88,110:[2,166],111:69,118:[1,280],126:[2,166],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],73:[2,167],78:[2,167],86:[2,167],91:[2,167],93:[2,167],102:[2,167],103:87,104:[2,167],105:[1,281],106:[2,167],109:88,110:[2,167],111:69,118:[2,167],126:[2,167],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,283],25:[1,284],78:[1,282]},{6:[2,54],11:169,25:[2,54],26:[2,54],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:285,42:168,44:172,46:[1,46],78:[2,54],89:[1,114]},{8:286,9:118,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,287],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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{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],69:[2,86],71:[2,86],73:[2,86],74:[2,86],78:[2,86],80:[2,86],84:[2,86],85:[2,86],86:[2,86],91:[2,86],93:[2,86],102:[2,86],104:[2,86],105:[2,86],106:[2,86],110:[2,86],118:[2,86],126:[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],138:[2,86]},{8:288,9:118,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,73:[2,121],76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,122],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],73:[2,37],78:[2,37],86:[2,37],91:[2,37],93:[2,37],102:[2,37],103:87,104:[2,37],105:[2,37],106:[2,37],109:88,110:[2,37],111:69,118:[2,37],126:[2,37],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,289],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],86:[1,290]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],86:[2,67],91:[2,67]},{5:291,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:110,28:[1,73],44:111,55:292,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,55],25:[2,55],26:[2,55],27:110,28:[1,73],44:111,48:293,54:[2,55],55:108,56:109,58:112,59:113,76:[1,70],89:[1,114],90:[1,115]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{26:[1,294],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,204],6:[2,204],25:[2,204],26:[2,204],49:[2,204],54:[2,204],57:[2,204],73:[2,204],78:[2,204],86:[2,204],91:[2,204],93:[2,204],102:[2,204],103:87,104:[2,204],105:[2,204],106:[2,204],109:88,110:[2,204],111:69,118:[2,204],126:[2,204],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:295,25:[1,5],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{5:296,25:[1,5]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],73:[2,135],78:[2,135],86:[2,135],91:[2,135],93:[2,135],102:[2,135],104:[2,135],105:[2,135],106:[2,135],110:[2,135],118:[2,135],126:[2,135],128:[2,135],129:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135],137:[2,135]},{5:297,25:[1,5]},{5:298,25:[1,5]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],73:[2,139],78:[2,139],86:[2,139],91:[2,139],93:[2,139],98:[2,139],102:[2,139],104:[2,139],105:[2,139],106:[2,139],110:[2,139],118:[2,139],126:[2,139],128:[2,139],129:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139],137:[2,139]},{26:[1,299],121:[1,300],122:264,123:[1,220]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],49:[2,175],54:[2,175],57:[2,175],73:[2,175],78:[2,175],86:[2,175],91:[2,175],93:[2,175],102:[2,175],104:[2,175],105:[2,175],106:[2,175],110:[2,175],118:[2,175],126:[2,175],128:[2,175],129:[2,175],132:[2,175],133:[2,175],134:[2,175],135:[2,175],136:[2,175],137:[2,175]},{5:301,25:[1,5]},{26:[2,178],121:[2,178],123:[2,178]},{5:302,25:[1,5],54:[1,303]},{25:[2,131],54:[2,131],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],49:[2,99],54:[2,99],57:[2,99],73:[2,99],78:[2,99],86:[2,99],91:[2,99],93:[2,99],102:[2,99],104:[2,99],105:[2,99],106:[2,99],110:[2,99],118:[2,99],126:[2,99],128:[2,99],129:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99],137:[2,99]},{1:[2,102],5:304,6:[2,102],25:[1,5],26:[2,102],49:[2,102],54:[2,102],57:[2,102],73:[2,102],78:[2,102],86:[2,102],91:[2,102],93:[2,102],102:[2,102],103:87,104:[1,65],105:[2,102],106:[1,66],109:88,110:[1,68],111:69,118:[2,102],126:[2,102],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{102:[1,305]},{91:[1,306],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,116],6:[2,116],25:[2,116],26:[2,116],40:[2,116],49:[2,116],54:[2,116],57:[2,116],66:[2,116],67:[2,116],68:[2,116],69:[2,116],71:[2,116],73:[2,116],74:[2,116],78:[2,116],84:[2,116],85:[2,116],86:[2,116],91:[2,116],93:[2,116],102:[2,116],104:[2,116],105:[2,116],106:[2,116],110:[2,116],116:[2,116],117:[2,116],118:[2,116],126:[2,116],128:[2,116],129:[2,116],132:[2,116],133:[2,116],134:[2,116],135:[2,116],136:[2,116],137:[2,116]},{8:202,9:118,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:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],94:307,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:202,9:118,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,147],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:148,61:36,63:25,64:26,65:27,76:[1,70],79:[1,43],83:[1,28],87:308,88:[1,58],89:[1,59],90:[1,57],94:146,96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],86:[2,125],91:[2,125]},{6:[1,272],25:[1,273],26:[1,309]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],73:[2,144],78:[2,144],86:[2,144],91:[2,144],93:[2,144],102:[2,144],103:87,104:[1,65],105:[2,144],106:[1,66],109:88,110:[1,68],111:69,118:[2,144],126:[2,144],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],73:[2,146],78:[2,146],86:[2,146],91:[2,146],93:[2,146],102:[2,146],103:87,104:[1,65],105:[2,146],106:[1,66],109:88,110:[1,68],111:69,118:[2,146],126:[2,146],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{116:[2,165],117:[2,165]},{8:310,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:311,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:312,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,90],6:[2,90],25:[2,90],26:[2,90],40:[2,90],49:[2,90],54:[2,90],57:[2,90],66:[2,90],67:[2,90],68:[2,90],69:[2,90],71:[2,90],73:[2,90],74:[2,90],78:[2,90],84:[2,90],85:[2,90],86:[2,90],91:[2,90],93:[2,90],102:[2,90],104:[2,90],105:[2,90],106:[2,90],110:[2,90],116:[2,90],117:[2,90],118:[2,90],126:[2,90],128:[2,90],129:[2,90],132:[2,90],133:[2,90],134:[2,90],135:[2,90],136:[2,90],137:[2,90]},{11:169,27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:313,42:168,44:172,46:[1,46],89:[1,114]},{6:[2,91],11:169,25:[2,91],26:[2,91],27:170,28:[1,73],29:171,30:[1,71],31:[1,72],41:167,42:168,44:172,46:[1,46],54:[2,91],77:314,89:[1,114]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],78:[2,93]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],78:[2,40],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{8:315,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{73:[2,120],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],73:[2,38],78:[2,38],86:[2,38],91:[2,38],93:[2,38],102:[2,38],104:[2,38],105:[2,38],106:[2,38],110:[2,38],118:[2,38],126:[2,38],128:[2,38],129:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38],137:[2,38]},{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],69:[2,111],71:[2,111],73:[2,111],74:[2,111],78:[2,111],84:[2,111],85:[2,111],86:[2,111],91:[2,111],93:[2,111],102:[2,111],104:[2,111],105:[2,111],106:[2,111],110:[2,111],118:[2,111],126:[2,111],128:[2,111],129:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111],137:[2,111]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],73:[2,49],78:[2,49],86:[2,49],91:[2,49],93:[2,49],102:[2,49],104:[2,49],105:[2,49],106:[2,49],110:[2,49],118:[2,49],126:[2,49],128:[2,49],129:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49],137:[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:316,54:[1,204]},{1:[2,203],6:[2,203],25:[2,203],26:[2,203],49:[2,203],54:[2,203],57:[2,203],73:[2,203],78:[2,203],86:[2,203],91:[2,203],93:[2,203],102:[2,203],104:[2,203],105:[2,203],106:[2,203],110:[2,203],118:[2,203],126:[2,203],128:[2,203],129:[2,203],132:[2,203],133:[2,203],134:[2,203],135:[2,203],136:[2,203],137:[2,203]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],73:[2,182],78:[2,182],86:[2,182],91:[2,182],93:[2,182],102:[2,182],104:[2,182],105:[2,182],106:[2,182],110:[2,182],118:[2,182],121:[2,182],126:[2,182],128:[2,182],129:[2,182],132:[2,182],133:[2,182],134:[2,182],135:[2,182],136:[2,182],137:[2,182]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],73:[2,136],78:[2,136],86:[2,136],91:[2,136],93:[2,136],102:[2,136],104:[2,136],105:[2,136],106:[2,136],110:[2,136],118:[2,136],126:[2,136],128:[2,136],129:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136],137:[2,136]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],73:[2,137],78:[2,137],86:[2,137],91:[2,137],93:[2,137],98:[2,137],102:[2,137],104:[2,137],105:[2,137],106:[2,137],110:[2,137],118:[2,137],126:[2,137],128:[2,137],129:[2,137],132:[2,137],133:[2,137],134:[2,137],135:[2,137],136:[2,137],137:[2,137]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],73:[2,138],78:[2,138],86:[2,138],91:[2,138],93:[2,138],98:[2,138],102:[2,138],104:[2,138],105:[2,138],106:[2,138],110:[2,138],118:[2,138],126:[2,138],128:[2,138],129:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138],137:[2,138]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],73:[2,173],78:[2,173],86:[2,173],91:[2,173],93:[2,173],102:[2,173],104:[2,173],105:[2,173],106:[2,173],110:[2,173],118:[2,173],126:[2,173],128:[2,173],129:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173],137:[2,173]},{5:317,25:[1,5]},{26:[1,318]},{6:[1,319],26:[2,179],121:[2,179],123:[2,179]},{8:320,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],73:[2,103],78:[2,103],86:[2,103],91:[2,103],93:[2,103],102:[2,103],104:[2,103],105:[2,103],106:[2,103],110:[2,103],118:[2,103],126:[2,103],128:[2,103],129:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103],137:[2,103]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],66:[2,142],67:[2,142],68:[2,142],69:[2,142],71:[2,142],73:[2,142],74:[2,142],78:[2,142],84:[2,142],85:[2,142],86:[2,142],91:[2,142],93:[2,142],102:[2,142],104:[2,142],105:[2,142],106:[2,142],110:[2,142],118:[2,142],126:[2,142],128:[2,142],129:[2,142],132:[2,142],133:[2,142],134:[2,142],135:[2,142],136:[2,142],137:[2,142]},{1:[2,119],6:[2,119],25:[2,119],26:[2,119],49:[2,119],54:[2,119],57:[2,119],66:[2,119],67:[2,119],68:[2,119],69:[2,119],71:[2,119],73:[2,119],74:[2,119],78:[2,119],84:[2,119],85:[2,119],86:[2,119],91:[2,119],93:[2,119],102:[2,119],104:[2,119],105:[2,119],106:[2,119],110:[2,119],118:[2,119],126:[2,119],128:[2,119],129:[2,119],132:[2,119],133:[2,119],134:[2,119],135:[2,119],136:[2,119],137:[2,119]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],86:[2,126],91:[2,126]},{6:[2,53],25:[2,53],26:[2,53],53:321,54:[1,229]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],86:[2,127],91:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],73:[2,168],78:[2,168],86:[2,168],91:[2,168],93:[2,168],102:[2,168],103:87,104:[2,168],105:[2,168],106:[2,168],109:88,110:[2,168],111:69,118:[1,322],126:[2,168],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],73:[2,170],78:[2,170],86:[2,170],91:[2,170],93:[2,170],102:[2,170],103:87,104:[2,170],105:[1,323],106:[2,170],109:88,110:[2,170],111:69,118:[2,170],126:[2,170],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],73:[2,169],78:[2,169],86:[2,169],91:[2,169],93:[2,169],102:[2,169],103:87,104:[2,169],105:[2,169],106:[2,169],109:88,110:[2,169],111:69,118:[2,169],126:[2,169],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],78:[2,94]},{6:[2,53],25:[2,53],26:[2,53],53:324,54:[1,239]},{26:[1,325],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,250],25:[1,251],26:[1,326]},{26:[1,327]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],49:[2,176],54:[2,176],57:[2,176],73:[2,176],78:[2,176],86:[2,176],91:[2,176],93:[2,176],102:[2,176],104:[2,176],105:[2,176],106:[2,176],110:[2,176],118:[2,176],126:[2,176],128:[2,176],129:[2,176],132:[2,176],133:[2,176],134:[2,176],135:[2,176],136:[2,176],137:[2,176]},{26:[2,180],121:[2,180],123:[2,180]},{25:[2,132],54:[2,132],103:87,104:[1,65],106:[1,66],109:88,110:[1,68],111:69,126:[1,86],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[1,272],25:[1,273],26:[1,328]},{8:329,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{8:330,9:118,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,76:[1,70],79:[1,43],83:[1,28],88:[1,58],89:[1,59],90:[1,57],96:[1,38],100:[1,44],101:[1,56],103:39,104:[1,65],106:[1,66],107:40,108:[1,67],109:41,110:[1,68],111:69,119:[1,42],124:37,125:[1,64],127:[1,31],128:[1,32],129:[1,33],130:[1,34],131:[1,35]},{6:[1,283],25:[1,284],26:[1,331]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],78:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],49:[2,174],54:[2,174],57:[2,174],73:[2,174],78:[2,174],86:[2,174],91:[2,174],93:[2,174],102:[2,174],104:[2,174],105:[2,174],106:[2,174],110:[2,174],118:[2,174],126:[2,174],128:[2,174],129:[2,174],132:[2,174],133:[2,174],134:[2,174],135:[2,174],136:[2,174],137:[2,174]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],86:[2,128],91:[2,128]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],73:[2,171],78:[2,171],86:[2,171],91:[2,171],93:[2,171],102:[2,171],103:87,104:[2,171],105:[2,171],106:[2,171],109:88,110:[2,171],111:69,118:[2,171],126:[2,171],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],73:[2,172],78:[2,172],86:[2,172],91:[2,172],93:[2,172],102:[2,172],103:87,104:[2,172],105:[2,172],106:[2,172],109:88,110:[2,172],111:69,118:[2,172],126:[2,172],128:[1,80],129:[1,79],132:[1,78],133:[1,81],134:[1,82],135:[1,83],136:[1,84],137:[1,85]},{6:[2,95],25:[2,95],26:[2,95],54:[2,95],78:[2,95]}],
-defaultActions: {60:[2,51],61:[2,52],75:[2,3],94:[2,109],191:[2,89]},
-parseError: function parseError(str, hash) {
-    var e = new Error(str)
-    e.location = hash.loc
-    throw e;
-},
-parse: function parse(input) {
-    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
-    this.lexer.setInput(input);
-    this.lexer.yy = this.yy;
-    this.yy.lexer = this.lexer;
-    this.yy.parser = this;
-    if (typeof this.lexer.yylloc == "undefined")
-        this.lexer.yylloc = {};
-    var yyloc = this.lexer.yylloc;
-    lstack.push(yyloc);
-    var ranges = this.lexer.options && this.lexer.options.ranges;
-    if (typeof this.yy.parseError === "function")
-        this.parseError = this.yy.parseError;
-    function popStack(n) {
-        stack.length = stack.length - 2 * n;
-        vstack.length = vstack.length - n;
-        lstack.length = lstack.length - n;
-    }
-    function lex() {
-        var token;
-        token = self.lexer.lex() || 1;
-        if (typeof token !== "number") {
-            token = self.symbols_[token] || token;
-        }
-        return token;
-    }
-    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
-    while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-            action = this.defaultActions[state];
-        } else {
-            if (symbol === null || typeof symbol == "undefined") {
-                symbol = lex();
-            }
-            action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-            var errStr = "";
-            if (!recovering) {
-                expected = [];
-                for (p in table[state])
-                    if (this.terminals_[p] && p > 2) {
-                        expected.push("'" + this.terminals_[p] + "'");
-                    }
-                if (this.lexer.showPosition) {
-                    errStr = this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-                } else {
-                    errStr = "Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
-                }
-                this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
-            }
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-            throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-        case 1:
-            stack.push(symbol);
-            vstack.push(this.lexer.yytext);
-            lstack.push(this.lexer.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            if (!preErrorSymbol) {
-                yyleng = this.lexer.yyleng;
-                yytext = this.lexer.yytext;
-                yylineno = this.lexer.yylineno;
-                yyloc = this.lexer.yylloc;
-                if (recovering > 0)
-                    recovering--;
-            } else {
-                symbol = preErrorSymbol;
-                preErrorSymbol = null;
-            }
-            break;
-        case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
-            if (ranges) {
-                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
-            }
-            r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
-            if (typeof r !== "undefined") {
-                return r;
-            }
-            if (len) {
-                stack = stack.slice(0, -1 * len * 2);
-                vstack = vstack.slice(0, -1 * len);
-                lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-        case 3:
-            return true;
-        }
-    }
-    return true;
-}
-};
-undefined
-function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
-
-module.exports = new Parser;
-
-
-});
-
-define('ace/mode/coffee/nodes', ['require', 'exports', 'module' , 'ace/mode/coffee/scope', 'ace/mode/coffee/lexer', 'ace/mode/coffee/helpers'], function(require, exports, module) {
-
-  var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, CodeFragment, 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, fragmentsToText, last, locationDataToString, merge, multident, some, starts, throwSyntaxError, unfoldSoak, utility, _ref, _ref1, _ref2, _ref3,
-    __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; },
-    __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; },
-    __slice = [].slice;
-
-  Error.stackTraceLimit = Infinity;
-
-  Scope = require('./scope').Scope;
-
-  _ref = require('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED;
-
-  _ref1 = require('./helpers'), compact = _ref1.compact, flatten = _ref1.flatten, extend = _ref1.extend, merge = _ref1.merge, del = _ref1.del, starts = _ref1.starts, ends = _ref1.ends, last = _ref1.last, some = _ref1.some, addLocationDataFn = _ref1.addLocationDataFn, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;
-
-  exports.extend = extend;
-
-  exports.addLocationDataFn = addLocationDataFn;
-
-  YES = function() {
-    return true;
-  };
-
-  NO = function() {
-    return false;
-  };
-
-  THIS = function() {
-    return this;
-  };
-
-  NEGATE = function() {
-    this.negated = !this.negated;
-    return this;
-  };
-
-  exports.CodeFragment = CodeFragment = (function() {
-    function CodeFragment(parent, code) {
-      var _ref2;
-      this.code = "" + code;
-      this.locationData = parent != null ? parent.locationData : void 0;
-      this.type = (parent != null ? (_ref2 = parent.constructor) != null ? _ref2.name : void 0 : void 0) || 'unknown';
-    }
-
-    CodeFragment.prototype.toString = function() {
-      return "" + this.code + [this.locationData ? ": " + locationDataToString(this.locationData) : void 0];
-    };
-
-    return CodeFragment;
-
-  })();
-
-  fragmentsToText = function(fragments) {
-    var fragment;
-    return ((function() {
-      var _i, _len, _results;
-      _results = [];
-      for (_i = 0, _len = fragments.length; _i < _len; _i++) {
-        fragment = fragments[_i];
-        _results.push(fragment.code);
-      }
-      return _results;
-    })()).join('');
-  };
-
-  exports.Base = Base = (function() {
-    function Base() {}
-
-    Base.prototype.compile = function(o, lvl) {
-      return fragmentsToText(this.compileToFragments(o, lvl));
-    };
-
-    Base.prototype.compileToFragments = function(o, lvl) {
-      var node;
-      o = extend({}, o);
-      if (lvl) {
-        o.level = lvl;
-      }
-      node = this.unfoldSoak(o) || this;
-      node.tab = o.indent;
-      if (o.level === LEVEL_TOP || !node.isStatement(o)) {
-        return node.compileNode(o);
-      } else {
-        return node.compileClosure(o);
-      }
-    };
-
-    Base.prototype.compileClosure = function(o) {
-      var jumpNode;
-      if (jumpNode = this.jumps()) {
-        jumpNode.error('cannot use a pure statement in an expression');
-      }
-      o.sharedScope = true;
-      return Closure.wrap(this).compileNode(o);
-    };
-
-    Base.prototype.cache = function(o, level, reused) {
-      var ref, sub;
-      if (!this.isComplex()) {
-        ref = level ? this.compileToFragments(o, level) : this;
-        return [ref, ref];
-      } else {
-        ref = new Literal(reused || o.scope.freeVariable('ref'));
-        sub = new Assign(ref, this);
-        if (level) {
-          return [sub.compileToFragments(o, level), [this.makeCode(ref.value)]];
-        } else {
-          return [sub, ref];
-        }
-      }
-    };
-
-    Base.prototype.cacheToCodeFragments = function(cacheValues) {
-      return [fragmentsToText(cacheValues[0]), fragmentsToText(cacheValues[1])];
-    };
-
-    Base.prototype.makeReturn = function(res) {
-      var me;
-      me = this.unwrapAll();
-      if (res) {
-        return new Call(new Literal("" + res + ".push"), [me]);
-      } else {
-        return new Return(me);
-      }
-    };
-
-    Base.prototype.contains = function(pred) {
-      var node;
-      node = void 0;
-      this.traverseChildren(false, function(n) {
-        if (pred(n)) {
-          node = n;
-          return false;
-        }
-      });
-      return node;
-    };
-
-    Base.prototype.lastNonComment = function(list) {
-      var i;
-      i = list.length;
-      while (i--) {
-        if (!(list[i] instanceof Comment)) {
-          return list[i];
-        }
-      }
-      return null;
-    };
-
-    Base.prototype.toString = function(idt, name) {
-      var tree;
-      if (idt == null) {
-        idt = '';
-      }
-      if (name == null) {
-        name = this.constructor.name;
-      }
-      tree = '\n' + idt + name;
-      if (this.soak) {
-        tree += '?';
-      }
-      this.eachChild(function(node) {
-        return tree += node.toString(idt + TAB);
-      });
-      return tree;
-    };
-
-    Base.prototype.eachChild = function(func) {
-      var attr, child, _i, _j, _len, _len1, _ref2, _ref3;
-      if (!this.children) {
-        return this;
-      }
-      _ref2 = this.children;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        attr = _ref2[_i];
-        if (this[attr]) {
-          _ref3 = flatten([this[attr]]);
-          for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
-            child = _ref3[_j];
-            if (func(child) === false) {
-              return this;
-            }
-          }
-        }
-      }
-      return this;
-    };
-
-    Base.prototype.traverseChildren = function(crossScope, func) {
-      return this.eachChild(function(child) {
-        var recur;
-        recur = func(child);
-        if (recur !== false) {
-          return child.traverseChildren(crossScope, func);
-        }
-      });
-    };
-
-    Base.prototype.invert = function() {
-      return new Op('!', this);
-    };
-
-    Base.prototype.unwrapAll = function() {
-      var node;
-      node = this;
-      while (node !== (node = node.unwrap())) {
-        continue;
-      }
-      return node;
-    };
-
-    Base.prototype.children = [];
-
-    Base.prototype.isStatement = NO;
-
-    Base.prototype.jumps = NO;
-
-    Base.prototype.isComplex = YES;
-
-    Base.prototype.isChainable = NO;
-
-    Base.prototype.isAssignable = NO;
-
-    Base.prototype.unwrap = THIS;
-
-    Base.prototype.unfoldSoak = NO;
-
-    Base.prototype.assigns = NO;
-
-    Base.prototype.updateLocationDataIfMissing = function(locationData) {
-      this.locationData || (this.locationData = locationData);
-      return this.eachChild(function(child) {
-        return child.updateLocationDataIfMissing(locationData);
-      });
-    };
-
-    Base.prototype.error = function(message) {
-      return throwSyntaxError(message, this.locationData);
-    };
-
-    Base.prototype.makeCode = function(code) {
-      return new CodeFragment(this, code);
-    };
-
-    Base.prototype.wrapInBraces = function(fragments) {
-      return [].concat(this.makeCode('('), fragments, this.makeCode(')'));
-    };
-
-    Base.prototype.joinFragmentArrays = function(fragmentsList, joinStr) {
-      var answer, fragments, i, _i, _len;
-      answer = [];
-      for (i = _i = 0, _len = fragmentsList.length; _i < _len; i = ++_i) {
-        fragments = fragmentsList[i];
-        if (i) {
-          answer.push(this.makeCode(joinStr));
-        }
-        answer = answer.concat(fragments);
-      }
-      return answer;
-    };
-
-    return Base;
-
-  })();
-
-  exports.Block = Block = (function(_super) {
-    __extends(Block, _super);
-
-    function Block(nodes) {
-      this.expressions = compact(flatten(nodes || []));
-    }
-
-    Block.prototype.children = ['expressions'];
-
-    Block.prototype.push = function(node) {
-      this.expressions.push(node);
-      return this;
-    };
-
-    Block.prototype.pop = function() {
-      return this.expressions.pop();
-    };
-
-    Block.prototype.unshift = function(node) {
-      this.expressions.unshift(node);
-      return this;
-    };
-
-    Block.prototype.unwrap = function() {
-      if (this.expressions.length === 1) {
-        return this.expressions[0];
-      } else {
-        return this;
-      }
-    };
-
-    Block.prototype.isEmpty = function() {
-      return !this.expressions.length;
-    };
-
-    Block.prototype.isStatement = function(o) {
-      var exp, _i, _len, _ref2;
-      _ref2 = this.expressions;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        exp = _ref2[_i];
-        if (exp.isStatement(o)) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    Block.prototype.jumps = function(o) {
-      var exp, _i, _len, _ref2;
-      _ref2 = this.expressions;
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        exp = _ref2[_i];
-        if (exp.jumps(o)) {
-          return exp;
-        }
-      }
-    };
-
-    Block.prototype.makeReturn = function(res) {
-      var expr, len;
-      len = this.expressions.length;
-      while (len--) {
-        expr = this.expressions[len];
-        if (!(expr instanceof Comment)) {
-          this.expressions[len] = expr.makeReturn(res);
-          if (expr instanceof Return && !expr.expression) {
-            this.expressions.splice(len, 1);
-          }
-          break;
-        }
-      }
-      return this;
-    };
-
-    Block.prototype.compileToFragments = function(o, level) {
-      if (o == null) {
-        o = {};
-      }
-      if (o.scope) {
-        return Block.__super__.compileToFragments.call(this, o, level);
-      } else {
-        return this.compileRoot(o);
-      }
-    };
-
-    Block.prototype.compileNode = function(o) {
-      var answer, compiledNodes, fragments, index, node, top, _i, _len, _ref2;
-      this.tab = o.indent;
-      top = o.level === LEVEL_TOP;
-      compiledNodes = [];
-      _ref2 = this.expressions;
-      for (index = _i = 0, _len = _ref2.length; _i < _len; index = ++_i) {
-        node = _ref2[index];
-        node = node.unwrapAll();
-        node = node.unfoldSoak(o) || node;
-        if (node instanceof Block) {
-          compiledNodes.push(node.compileNode(o));
-        } else if (top) {
-          node.front = true;
-          fragments = node.compileToFragments(o);
-          if (!node.isStatement(o)) {
-            fragments.unshift(this.makeCode("" + this.tab));
-            fragments.push(this.makeCode(";"));
-          }
-          compiledNodes.push(fragments);
-        } else {
-          compiledNodes.push(node.compileToFragments(o, LEVEL_LIST));
-        }
-      }
-      if (top) {
-        if (this.spaced) {
-          return [].concat(this.joinFragmentArrays(compiledNodes, '\n\n'), this.makeCode("\n"));
-        } else {
-          return this.joinFragmentArrays(compiledNodes, '\n');
-        }
-      }
-      if (compiledNodes.length) {
-        answer = this.joinFragmentArrays(compiledNodes, ', ');
-      } else {
-        answer = [this.makeCode("void 0")];
-      }
-      if (compiledNodes.length > 1 && o.level >= LEVEL_LIST) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    Block.prototype.compileRoot = function(o) {
-      var exp, fragments, i, name, prelude, preludeExps, rest, _i, _len, _ref2;
-      o.indent = o.bare ? '' : TAB;
-      o.level = LEVEL_TOP;
-      this.spaced = true;
-      o.scope = new Scope(null, this, null);
-      _ref2 = o.locals || [];
-      for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
-        name = _ref2[_i];
-        o.scope.parameter(name);
-      }
-      prelude = [];
-      if (!o.bare) {
-        preludeExps = (function() {
-          var _j, _len1, _ref3, _results;
-          _ref3 = this.expressions;
-          _results = [];
-          for (i = _j = 0, _len1 = _ref3.length; _j < _len1; i = ++_j) {
-            exp = _ref3[i];
-            if (!(exp.unwrap() instanceof Comment)) {
-              break;
-            }
-            _results.push(exp);
-          }
-          return _results;
-        }).call(this);
-        rest = this.expressions.slice(preludeExps.length);
-        this.expressions = preludeExps;
-        if (preludeExps.length) {
-          prelude = this.compileNode(merge(o, {
-            indent: ''
-          }));
-          prelude.push(this.makeCode("\n"));
-        }
-        this.expressions = rest;
-      }
-      fragments = this.compileWithDeclarations(o);
-      if (o.bare) {
-        return fragments;
-      }
-      return [].concat(prelude, this.makeCode("(function() {\n"), fragments, this.makeCode("\n}).call(this);\n"));
-    };
-
-    Block.prototype.compileWithDeclarations = function(o) {
-      var assigns, declars, exp, fragments, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4;
-      fragments = [];
-      post = [];
-      _ref2 = this.expressions;
-      for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
-        exp = _ref2[i];
-        exp = exp.unwrap();
-        if (!(exp instanceof Comment || exp instanceof Literal)) {
-          break;
-        }
-      }
-      o = merge(o, {
-        level: LEVEL_TOP
-      });
-      if (i) {
-        rest = this.expressions.splice(i, 9e9);
-        _ref3 = [this.spaced, false], spaced = _ref3[0], this.spaced = _ref3[1];
-        _ref4 = [this.compileNode(o), spaced], fragments = _ref4[0], this.spaced = _ref4[1];
-        this.expressions = rest;
-      }
-      post = this.compileNode(o);
-      scope = o.scope;
-      if (scope.expressions === this) {
-        declars = o.scope.hasDeclarations();
-        assigns = scope.hasAssignments;
-        if (declars || assigns) {
-          if (i) {
-            fragments.push(this.makeCode('\n'));
-          }
-          fragments.push(this.makeCode("" + this.tab + "var "));
-          if (declars) {
-            fragments.push(this.makeCode(scope.declaredVariables().join(', ')));
-          }
-          if (assigns) {
-            if (declars) {
-              fragments.push(this.makeCode(",\n" + (this.tab + TAB)));
-            }
-            fragments.push(this.makeCode(scope.assignedVariables().join(",\n" + (this.tab + TAB))));
-          }
-          fragments.push(this.makeCode(";\n" + (this.spaced ? '\n' : '')));
-        }
-      }
-      return fragments.concat(post);
-    };
-
-    Block.wrap = function(nodes) {
-      if (nodes.length === 1 && nodes[0] instanceof Block) {
-        return nodes[0];
-      }
-      return new Block(nodes);
-    };
-
-    return Block;
-
-  })(Base);
-
-  exports.Literal = Literal = (function(_super) {
-    __extends(Literal, _super);
-
-    function Literal(value) {
-      this.value = value;
-    }
-
-    Literal.prototype.makeReturn = function() {
-      if (this.isStatement()) {
-        return this;
-      } else {
-        return Literal.__super__.makeReturn.apply(this, arguments);
-      }
-    };
-
-    Literal.prototype.isAssignable = function() {
-      return IDENTIFIER.test(this.value);
-    };
-
-    Literal.prototype.isStatement = function() {
-      var _ref2;
-      return (_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger';
-    };
-
-    Literal.prototype.isComplex = NO;
-
-    Literal.prototype.assigns = function(name) {
-      return name === this.value;
-    };
-
-    Literal.prototype.jumps = function(o) {
-      if (this.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) {
-        return this;
-      }
-      if (this.value === 'continue' && !(o != null ? o.loop : void 0)) {
-        return this;
-      }
-    };
-
-    Literal.prototype.compileNode = function(o) {
-      var answer, code, _ref2;
-      code = this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : this.value.reserved ? "\"" + this.value + "\"" : this.value;
-      answer = this.isStatement() ? "" + this.tab + code + ";" : code;
-      return [this.makeCode(answer)];
-    };
-
-    Literal.prototype.toString = function() {
-      return ' "' + this.value + '"';
-    };
-
-    return Literal;
-
-  })(Base);
-
-  exports.Undefined = (function(_super) {
-    __extends(Undefined, _super);
-
-    function Undefined() {
-      _ref2 = Undefined.__super__.constructor.apply(this, arguments);
-      return _ref2;
-    }
-
-    Undefined.prototype.isAssignable = NO;
-
-    Undefined.prototype.isComplex = NO;
-
-    Undefined.prototype.compileNode = function(o) {
-      return [this.makeCode(o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0')];
-    };
-
-    return Undefined;
-
-  })(Base);
-
-  exports.Null = (function(_super) {
-    __extends(Null, _super);
-
-    function Null() {
-      _ref3 = Null.__super__.constructor.apply(this, arguments);
-      return _ref3;
-    }
-
-    Null.prototype.isAssignable = NO;
-
-    Null.prototype.isComplex = NO;
-
-    Null.prototype.compileNode = function() {
-      return [this.makeCode("null")];
-    };
-
-    return Null;
-
-  })(Base);
-
-  exports.Bool = (function(_super) {
-    __extends(Bool, _super);
-
-    Bool.prototype.isAssignable = NO;
-
-    Bool.prototype.isComplex = NO;
-
-    Bool.prototype.compileNode = function() {
-      return [this.makeCode(this.val)];
-    };
-
-    function Bool(val) {
-      this.val = val;
-    }
-
-    return Bool;
-
-  })(Base);
-
-  exports.Return = Return = (function(_super) {
-    __extends(Return, _super);
-
-    function Return(expr) {
-      if (expr && !expr.unwrap().isUndefined) {
-        this.expression = expr;
-      }
-    }
-
-    Return.prototype.children = ['expression'];
-
-    Return.prototype.isStatement = YES;
-
-    Return.prototype.makeReturn = THIS;
-
-    Return.prototype.jumps = THIS;
-
-    Return.prototype.compileToFragments = function(o, level) {
-      var expr, _ref4;
-      expr = (_ref4 = this.expression) != null ? _ref4.makeReturn() : void 0;
-      if (expr && !(expr instanceof Return)) {
-        return expr.compileToFragments(o, level);
-      } else {
-        return Return.__super__.compileToFragments.call(this, o, level);
-      }
-    };
-
-    Return.prototype.compileNode = function(o) {
-      var answer;
-      answer = [];
-      answer.push(this.makeCode(this.tab + ("return" + [this.expression ? " " : void 0])));
-      if (this.expression) {
-        answer = answer.concat(this.expression.compileToFragments(o, LEVEL_PAREN));
-      }
-      answer.push(this.makeCode(";"));
-      return answer;
-    };
-
-    return Return;
-
-  })(Base);
-
-  exports.Value = Value = (function(_super) {
-    __extends(Value, _super);
-
-    function Value(base, props, tag) {
-      if (!props && base instanceof Value) {
-        return base;
-      }
-      this.base = base;
-      this.properties = props || [];
-      if (tag) {
-        this[tag] = true;
-      }
-      return this;
-    }
-
-    Value.prototype.children = ['base', 'properties'];
-
-    Value.prototype.add = function(props) {
-      this.properties = this.properties.concat(props);
-      return this;
-    };
-
-    Value.prototype.hasProperties = function() {
-      return !!this.properties.length;
-    };
-
-    Value.prototype.isArray = function() {
-      return !this.properties.length && this.base instanceof Arr;
-    };
-
-    Value.prototype.isComplex = function() {
-      return this.hasProperties() || this.base.isComplex();
-    };
-
-    Value.prototype.isAssignable = function() {
-      return this.hasProperties() || this.base.isAssignable();
-    };
-
-    Value.prototype.isSimpleNumber = function() {
-      return this.base instanceof Literal && SIMPLENUM.test(this.base.value);
-    };
-
-    Value.prototype.isString = function() {
-      return this.base instanceof Literal && IS_STRING.test(this.base.value);
-    };
-
-    Value.prototype.isAtomic = function() {
-      var node, _i, _len, _ref4;
-      _ref4 = this.properties.concat(this.base);
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        node = _ref4[_i];
-        if (node.soak || node instanceof Call) {
-          return false;
-        }
-      }
-      return true;
-    };
-
-    Value.prototype.isStatement = function(o) {
-      return !this.properties.length && this.base.isStatement(o);
-    };
-
-    Value.prototype.assigns = function(name) {
-      return !this.properties.length && this.base.assigns(name);
-    };
-
-    Value.prototype.jumps = function(o) {
-      return !this.properties.length && this.base.jumps(o);
-    };
-
-    Value.prototype.isObject = function(onlyGenerated) {
-      if (this.properties.length) {
-        return false;
-      }
-      return (this.base instanceof Obj) && (!onlyGenerated || this.base.generated);
-    };
-
-    Value.prototype.isSplice = function() {
-      return last(this.properties) instanceof Slice;
-    };
-
-    Value.prototype.unwrap = function() {
-      if (this.properties.length) {
-        return this;
-      } else {
-        return this.base;
-      }
-    };
-
-    Value.prototype.cacheReference = function(o) {
-      var base, bref, name, nref;
-      name = last(this.properties);
-      if (this.properties.length < 2 && !this.base.isComplex() && !(name != null ? name.isComplex() : void 0)) {
-        return [this, this];
-      }
-      base = new Value(this.base, this.properties.slice(0, -1));
-      if (base.isComplex()) {
-        bref = new Literal(o.scope.freeVariable('base'));
-        base = new Value(new Parens(new Assign(bref, base)));
-      }
-      if (!name) {
-        return [base, bref];
-      }
-      if (name.isComplex()) {
-        nref = new Literal(o.scope.freeVariable('name'));
-        name = new Index(new Assign(nref, name.index));
-        nref = new Index(nref);
-      }
-      return [base.add(name), new Value(bref || base.base, [nref || name])];
-    };
-
-    Value.prototype.compileNode = function(o) {
-      var fragments, prop, props, _i, _len;
-      this.base.front = this.front;
-      props = this.properties;
-      fragments = this.base.compileToFragments(o, (props.length ? LEVEL_ACCESS : null));
-      if ((this.base instanceof Parens || props.length) && SIMPLENUM.test(fragmentsToText(fragments))) {
-        fragments.push(this.makeCode('.'));
-      }
-      for (_i = 0, _len = props.length; _i < _len; _i++) {
-        prop = props[_i];
-        fragments.push.apply(fragments, prop.compileToFragments(o));
-      }
-      return fragments;
-    };
-
-    Value.prototype.unfoldSoak = function(o) {
-      var _ref4,
-        _this = this;
-      return (_ref4 = this.unfoldedSoak) != null ? _ref4 : this.unfoldedSoak = (function() {
-        var fst, i, ifn, prop, ref, snd, _i, _len, _ref5, _ref6;
-        if (ifn = _this.base.unfoldSoak(o)) {
-          (_ref5 = ifn.body.properties).push.apply(_ref5, _this.properties);
-          return ifn;
-        }
-        _ref6 = _this.properties;
-        for (i = _i = 0, _len = _ref6.length; _i < _len; i = ++_i) {
-          prop = _ref6[i];
-          if (!prop.soak) {
-            continue;
-          }
-          prop.soak = false;
-          fst = new Value(_this.base, _this.properties.slice(0, i));
-          snd = new Value(_this.base, _this.properties.slice(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: true
-          });
-        }
-        return false;
-      })();
-    };
-
-    return Value;
-
-  })(Base);
-
-  exports.Comment = Comment = (function(_super) {
-    __extends(Comment, _super);
-
-    function Comment(comment) {
-      this.comment = comment;
-    }
-
-    Comment.prototype.isStatement = YES;
-
-    Comment.prototype.makeReturn = THIS;
-
-    Comment.prototype.compileNode = function(o, level) {
-      var code;
-      code = "/*" + (multident(this.comment, this.tab)) + (__indexOf.call(this.comment, '\n') >= 0 ? "\n" + this.tab : '') + "*/\n";
-      if ((level || o.level) === LEVEL_TOP) {
-        code = o.indent + code;
-      }
-      return [this.makeCode(code)];
-    };
-
-    return Comment;
-
-  })(Base);
-
-  exports.Call = Call = (function(_super) {
-    __extends(Call, _super);
-
-    function Call(variable, args, soak) {
-      this.args = args != null ? args : [];
-      this.soak = soak;
-      this.isNew = false;
-      this.isSuper = variable === 'super';
-      this.variable = this.isSuper ? null : variable;
-    }
-
-    Call.prototype.children = ['variable', 'args'];
-
-    Call.prototype.newInstance = function() {
-      var base, _ref4;
-      base = ((_ref4 = this.variable) != null ? _ref4.base : void 0) || this.variable;
-      if (base instanceof Call && !base.isNew) {
-        base.newInstance();
-      } else {
-        this.isNew = true;
-      }
-      return this;
-    };
-
-    Call.prototype.superReference = function(o) {
-      var accesses, method;
-      method = o.scope.namedMethod();
-      if (method != null ? method.klass : void 0) {
-        accesses = [new Access(new Literal('__super__'))];
-        if (method["static"]) {
-          accesses.push(new Access(new Literal('constructor')));
-        }
-        accesses.push(new Access(new Literal(method.name)));
-        return (new Value(new Literal(method.klass), accesses)).compile(o);
-      } else if (method != null ? method.ctor : void 0) {
-        return "" + method.name + ".__super__.constructor";
-      } else {
-        return this.error('cannot call super outside of an instance method.');
-      }
-    };
-
-    Call.prototype.superThis = function(o) {
-      var method;
-      method = o.scope.method;
-      return (method && !method.klass && method.context) || "this";
-    };
-
-    Call.prototype.unfoldSoak = function(o) {
-      var call, ifn, left, list, rite, _i, _len, _ref4, _ref5;
-      if (this.soak) {
-        if (this.variable) {
-          if (ifn = unfoldSoak(o, this, 'variable')) {
-            return ifn;
-          }
-          _ref4 = new Value(this.variable).cacheReference(o), left = _ref4[0], rite = _ref4[1];
-        } else {
-          left = new Literal(this.superReference(o));
-          rite = new Value(left);
-        }
-        rite = new Call(rite, this.args);
-        rite.isNew = this.isNew;
-        left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
-        return new If(left, new Value(rite), {
-          soak: true
-        });
-      }
-      call = this;
-      list = [];
-      while (true) {
-        if (call.variable instanceof Call) {
-          list.push(call);
-          call = call.variable;
-          continue;
-        }
-        if (!(call.variable instanceof Value)) {
-          break;
-        }
-        list.push(call);
-        if (!((call = call.variable.base) instanceof Call)) {
-          break;
-        }
-      }
-      _ref5 = list.reverse();
-      for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
-        call = _ref5[_i];
-        if (ifn) {
-          if (call.variable instanceof Call) {
-            call.variable = ifn;
-          } else {
-            call.variable.base = ifn;
-          }
-        }
-        ifn = unfoldSoak(o, call, 'variable');
-      }
-      return ifn;
-    };
-
-    Call.prototype.compileNode = function(o) {
-      var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref4, _ref5;
-      if ((_ref4 = this.variable) != null) {
-        _ref4.front = this.front;
-      }
-      compiledArray = Splat.compileSplattedArray(o, this.args, true);
-      if (compiledArray.length) {
-        return this.compileSplat(o, compiledArray);
-      }
-      compiledArgs = [];
-      _ref5 = this.args;
-      for (argIndex = _i = 0, _len = _ref5.length; _i < _len; argIndex = ++_i) {
-        arg = _ref5[argIndex];
-        if (argIndex) {
-          compiledArgs.push(this.makeCode(", "));
-        }
-        compiledArgs.push.apply(compiledArgs, arg.compileToFragments(o, LEVEL_LIST));
-      }
-      fragments = [];
-      if (this.isSuper) {
-        preface = this.superReference(o) + (".call(" + (this.superThis(o)));
-        if (compiledArgs.length) {
-          preface += ", ";
-        }
-        fragments.push(this.makeCode(preface));
-      } else {
-        if (this.isNew) {
-          fragments.push(this.makeCode('new '));
-        }
-        fragments.push.apply(fragments, this.variable.compileToFragments(o, LEVEL_ACCESS));
-        fragments.push(this.makeCode("("));
-      }
-      fragments.push.apply(fragments, compiledArgs);
-      fragments.push(this.makeCode(")"));
-      return fragments;
-    };
-
-    Call.prototype.compileSplat = function(o, splatArgs) {
-      var answer, base, fun, idt, name, ref;
-      if (this.isSuper) {
-        return [].concat(this.makeCode("" + (this.superReference(o)) + ".apply(" + (this.superThis(o)) + ", "), splatArgs, this.makeCode(")"));
-      }
-      if (this.isNew) {
-        idt = this.tab + TAB;
-        return [].concat(this.makeCode("(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return Object(result) === result ? result : child;\n" + this.tab + "})("), this.variable.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), splatArgs, this.makeCode(", function(){})"));
-      }
-      answer = [];
-      base = new Value(this.variable);
-      if ((name = base.properties.pop()) && base.isComplex()) {
-        ref = o.scope.freeVariable('ref');
-        answer = answer.concat(this.makeCode("(" + ref + " = "), base.compileToFragments(o, LEVEL_LIST), this.makeCode(")"), name.compileToFragments(o));
-      } else {
-        fun = base.compileToFragments(o, LEVEL_ACCESS);
-        if (SIMPLENUM.test(fragmentsToText(fun))) {
-          fun = this.wrapInBraces(fun);
-        }
-        if (name) {
-          ref = fragmentsToText(fun);
-          fun.push.apply(fun, name.compileToFragments(o));
-        } else {
-          ref = 'null';
-        }
-        answer = answer.concat(fun);
-      }
-      return answer = answer.concat(this.makeCode(".apply(" + ref + ", "), splatArgs, this.makeCode(")"));
-    };
-
-    return Call;
-
-  })(Base);
-
-  exports.Extends = Extends = (function(_super) {
-    __extends(Extends, _super);
-
-    function Extends(child, parent) {
-      this.child = child;
-      this.parent = parent;
-    }
-
-    Extends.prototype.children = ['child', 'parent'];
-
-    Extends.prototype.compileToFragments = function(o) {
-      return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compileToFragments(o);
-    };
-
-    return Extends;
-
-  })(Base);
-
-  exports.Access = Access = (function(_super) {
-    __extends(Access, _super);
-
-    function Access(name, tag) {
-      this.name = name;
-      this.name.asKey = true;
-      this.soak = tag === 'soak';
-    }
-
-    Access.prototype.children = ['name'];
-
-    Access.prototype.compileToFragments = function(o) {
-      var name;
-      name = this.name.compileToFragments(o);
-      if (IDENTIFIER.test(fragmentsToText(name))) {
-        name.unshift(this.makeCode("."));
-      } else {
-        name.unshift(this.makeCode("["));
-        name.push(this.makeCode("]"));
-      }
-      return name;
-    };
-
-    Access.prototype.isComplex = NO;
-
-    return Access;
-
-  })(Base);
-
-  exports.Index = Index = (function(_super) {
-    __extends(Index, _super);
-
-    function Index(index) {
-      this.index = index;
-    }
-
-    Index.prototype.children = ['index'];
-
-    Index.prototype.compileToFragments = function(o) {
-      return [].concat(this.makeCode("["), this.index.compileToFragments(o, LEVEL_PAREN), this.makeCode("]"));
-    };
-
-    Index.prototype.isComplex = function() {
-      return this.index.isComplex();
-    };
-
-    return Index;
-
-  })(Base);
-
-  exports.Range = Range = (function(_super) {
-    __extends(Range, _super);
-
-    Range.prototype.children = ['from', 'to'];
-
-    function Range(from, to, tag) {
-      this.from = from;
-      this.to = to;
-      this.exclusive = tag === 'exclusive';
-      this.equals = this.exclusive ? '' : '=';
-    }
-
-    Range.prototype.compileVariables = function(o) {
-      var step, _ref4, _ref5, _ref6, _ref7;
-      o = merge(o, {
-        top: true
-      });
-      _ref4 = this.cacheToCodeFragments(this.from.cache(o, LEVEL_LIST)), this.fromC = _ref4[0], this.fromVar = _ref4[1];
-      _ref5 = this.cacheToCodeFragments(this.to.cache(o, LEVEL_LIST)), this.toC = _ref5[0], this.toVar = _ref5[1];
-      if (step = del(o, 'step')) {
-        _ref6 = this.cacheToCodeFragments(step.cache(o, LEVEL_LIST)), this.step = _ref6[0], this.stepVar = _ref6[1];
-      }
-      _ref7 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref7[0], this.toNum = _ref7[1];
-      if (this.stepVar) {
-        return this.stepNum = this.stepVar.match(SIMPLENUM);
-      }
-    };
-
-    Range.prototype.compileNode = function(o) {
-      var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref4, _ref5;
-      if (!this.fromVar) {
-        this.compileVariables(o);
-      }
-      if (!o.index) {
-        return this.compileArray(o);
-      }
-      known = this.fromNum && this.toNum;
-      idx = del(o, 'index');
-      idxName = del(o, 'name');
-      namedIndex = idxName && idxName !== idx;
-      varPart = "" + idx + " = " + this.fromC;
-      if (this.toC !== this.toVar) {
-        varPart += ", " + this.toC;
-      }
-      if (this.step !== this.stepVar) {
-        varPart += ", " + this.step;
-      }
-      _ref4 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref4[0], gt = _ref4[1];
-      condPart = this.stepNum ? +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref5 = [+this.fromNum, +this.toNum], from = _ref5[0], to = _ref5[1], _ref5), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = this.stepVar ? "" + this.stepVar + " > 0" : "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
-      stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--";
-      if (namedIndex) {
-        varPart = "" + idxName + " = " + varPart;
-      }
-      if (namedIndex) {
-        stepPart = "" + idxName + " = " + stepPart;
-      }
-      return [this.makeCode("" + varPart + "; " + condPart + "; " + stepPart)];
-    };
-
-    Range.prototype.compileArray = function(o) {
-      var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref4, _ref5, _results;
-      if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
-        range = (function() {
-          _results = [];
-          for (var _i = _ref4 = +this.fromNum, _ref5 = +this.toNum; _ref4 <= _ref5 ? _i <= _ref5 : _i >= _ref5; _ref4 <= _ref5 ? _i++ : _i--){ _results.push(_i); }
-          return _results;
-        }).apply(this);
-        if (this.exclusive) {
-          range.pop();
-        }
-        return [this.makeCode("[" + (range.join(', ')) + "]")];
-      }
-      idt = this.tab + TAB;
-      i = o.scope.freeVariable('i');
-      result = o.scope.freeVariable('results');
-      pre = "\n" + idt + result + " = [];";
-      if (this.fromNum && this.toNum) {
-        o.index = i;
-        body = fragmentsToText(this.compileNode(o));
-      } else {
-        vars = ("" + i + " = " + this.fromC) + (this.toC !== this.toVar ? ", " + this.toC : '');
-        cond = "" + this.fromVar + " <= " + this.toVar;
-        body = "var " + vars + "; " + cond + " ? " + i + " <" + this.equals + " " + this.toVar + " : " + i + " >" + this.equals + " " + this.toVar + "; " + cond + " ? " + i + "++ : " + i + "--";
-      }
-      post = "{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + o.indent;
-      hasArgs = function(node) {
-        return node != null ? node.contains(function(n) {
-          return n instanceof Literal && n.value === 'arguments' && !n.asKey;
-        }) : void 0;
-      };
-      if (hasArgs(this.from) || hasArgs(this.to)) {
-        args = ', arguments';
-      }
-      return [this.makeCode("(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")")];
-    };
-
-    return Range;
-
-  })(Base);
-
-  exports.Slice = Slice = (function(_super) {
-    __extends(Slice, _super);
-
-    Slice.prototype.children = ['range'];
-
-    function Slice(range) {
-      this.range = range;
-      Slice.__super__.constructor.call(this);
-    }
-
-    Slice.prototype.compileNode = function(o) {
-      var compiled, compiledText, from, fromCompiled, to, toStr, _ref4;
-      _ref4 = this.range, to = _ref4.to, from = _ref4.from;
-      fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')];
-      if (to) {
-        compiled = to.compileToFragments(o, LEVEL_PAREN);
-        compiledText = fragmentsToText(compiled);
-        if (!(!this.range.exclusive && +compiledText === -1)) {
-          toStr = ', ' + (this.range.exclusive ? compiledText : SIMPLENUM.test(compiledText) ? "" + (+compiledText + 1) : (compiled = to.compileToFragments(o, LEVEL_ACCESS), "+" + (fragmentsToText(compiled)) + " + 1 || 9e9"));
-        }
-      }
-      return [this.makeCode(".slice(" + (fragmentsToText(fromCompiled)) + (toStr || '') + ")")];
-    };
-
-    return Slice;
-
-  })(Base);
-
-  exports.Obj = Obj = (function(_super) {
-    __extends(Obj, _super);
-
-    function Obj(props, generated) {
-      this.generated = generated != null ? generated : false;
-      this.objects = this.properties = props || [];
-    }
-
-    Obj.prototype.children = ['properties'];
-
-    Obj.prototype.compileNode = function(o) {
-      var answer, i, idt, indent, join, lastNoncom, node, prop, props, _i, _j, _len, _len1;
-      props = this.properties;
-      if (!props.length) {
-        return [this.makeCode(this.front ? '({})' : '{}')];
-      }
-      if (this.generated) {
-        for (_i = 0, _len = props.length; _i < _len; _i++) {
-          node = props[_i];
-          if (node instanceof Value) {
-            node.error('cannot have an implicit value in an implicit object');
-          }
-        }
-      }
-      idt = o.indent += TAB;
-      lastNoncom = this.lastNonComment(this.properties);
-      answer = [];
-      for (i = _j = 0, _len1 = props.length; _j < _len1; i = ++_j) {
-        prop = props[i];
-        join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
-        indent = prop instanceof Comment ? '' : idt;
-        if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) {
-          prop.variable.error('Invalid object key');
-        }
-        if (prop instanceof Value && prop["this"]) {
-          prop = new Assign(prop.properties[0].name, prop, 'object');
-        }
-        if (!(prop instanceof Comment)) {
-          if (!(prop instanceof Assign)) {
-            prop = new Assign(prop, prop, 'object');
-          }
-          (prop.variable.base || prop.variable).asKey = true;
-        }
-        if (indent) {
-          answer.push(this.makeCode(indent));
-        }
-        answer.push.apply(answer, prop.compileToFragments(o, LEVEL_TOP));
-        if (join) {
-          answer.push(this.makeCode(join));
-        }
-      }
-      answer.unshift(this.makeCode("{" + (props.length && '\n')));
-      answer.push(this.makeCode("" + (props.length && '\n' + this.tab) + "}"));
-      if (this.front) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    Obj.prototype.assigns = function(name) {
-      var prop, _i, _len, _ref4;
-      _ref4 = this.properties;
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        prop = _ref4[_i];
-        if (prop.assigns(name)) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    return Obj;
-
-  })(Base);
-
-  exports.Arr = Arr = (function(_super) {
-    __extends(Arr, _super);
-
-    function Arr(objs) {
-      this.objects = objs || [];
-    }
-
-    Arr.prototype.children = ['objects'];
-
-    Arr.prototype.compileNode = function(o) {
-      var answer, compiledObjs, fragments, index, obj, _i, _len;
-      if (!this.objects.length) {
-        return [this.makeCode('[]')];
-      }
-      o.indent += TAB;
-      answer = Splat.compileSplattedArray(o, this.objects);
-      if (answer.length) {
-        return answer;
-      }
-      answer = [];
-      compiledObjs = (function() {
-        var _i, _len, _ref4, _results;
-        _ref4 = this.objects;
-        _results = [];
-        for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-          obj = _ref4[_i];
-          _results.push(obj.compileToFragments(o, LEVEL_LIST));
-        }
-        return _results;
-      }).call(this);
-      for (index = _i = 0, _len = compiledObjs.length; _i < _len; index = ++_i) {
-        fragments = compiledObjs[index];
-        if (index) {
-          answer.push(this.makeCode(", "));
-        }
-        answer.push.apply(answer, fragments);
-      }
-      if ((fragmentsToText(answer)).indexOf('\n') >= 0) {
-        answer.unshift(this.makeCode("[\n" + o.indent));
-        answer.push(this.makeCode("\n" + this.tab + "]"));
-      } else {
-        answer.unshift(this.makeCode("["));
-        answer.push(this.makeCode("]"));
-      }
-      return answer;
-    };
-
-    Arr.prototype.assigns = function(name) {
-      var obj, _i, _len, _ref4;
-      _ref4 = this.objects;
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        obj = _ref4[_i];
-        if (obj.assigns(name)) {
-          return true;
-        }
-      }
-      return false;
-    };
-
-    return Arr;
-
-  })(Base);
-
-  exports.Class = Class = (function(_super) {
-    __extends(Class, _super);
-
-    function Class(variable, parent, body) {
-      this.variable = variable;
-      this.parent = parent;
-      this.body = body != null ? body : new Block;
-      this.boundFuncs = [];
-      this.body.classBody = true;
-    }
-
-    Class.prototype.children = ['variable', 'parent', 'body'];
-
-    Class.prototype.determineName = function() {
-      var decl, tail;
-      if (!this.variable) {
-        return null;
-      }
-      decl = (tail = last(this.variable.properties)) ? tail instanceof Access && tail.name.value : this.variable.base.value;
-      if (__indexOf.call(STRICT_PROSCRIBED, decl) >= 0) {
-        this.variable.error("class variable name may not be " + decl);
-      }
-      return decl && (decl = IDENTIFIER.test(decl) && decl);
-    };
-
-    Class.prototype.setContext = function(name) {
-      return this.body.traverseChildren(false, function(node) {
-        if (node.classBody) {
-          return false;
-        }
-        if (node instanceof Literal && node.value === 'this') {
-          return node.value = name;
-        } else if (node instanceof Code) {
-          node.klass = name;
-          if (node.bound) {
-            return node.context = name;
-          }
-        }
-      });
-    };
-
-    Class.prototype.addBoundFunctions = function(o) {
-      var bvar, lhs, _i, _len, _ref4;
-      _ref4 = this.boundFuncs;
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        bvar = _ref4[_i];
-        lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o);
-        this.ctor.body.unshift(new Literal("" + lhs + " = " + (utility('bind')) + "(" + lhs + ", this)"));
-      }
-    };
-
-    Class.prototype.addProperties = function(node, name, o) {
-      var assign, base, exprs, func, props;
-      props = node.base.properties.slice(0);
-      exprs = (function() {
-        var _results;
-        _results = [];
-        while (assign = props.shift()) {
-          if (assign instanceof Assign) {
-            base = assign.variable.base;
-            delete assign.context;
-            func = assign.value;
-            if (base.value === 'constructor') {
-              if (this.ctor) {
-                assign.error('cannot define more than one constructor in a class');
-              }
-              if (func.bound) {
-                assign.error('cannot define a constructor as a bound function');
-              }
-              if (func instanceof Code) {
-                assign = this.ctor = func;
-              } else {
-                this.externalCtor = o.scope.freeVariable('class');
-                assign = new Assign(new Literal(this.externalCtor), func);
-              }
-            } else {
-              if (assign.variable["this"]) {
-                func["static"] = true;
-                if (func.bound) {
-                  func.context = name;
-                }
-              } else {
-                assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]);
-                if (func instanceof Code && func.bound) {
-                  this.boundFuncs.push(base);
-                  func.bound = false;
-                }
-              }
-            }
-          }
-          _results.push(assign);
-        }
-        return _results;
-      }).call(this);
-      return compact(exprs);
-    };
-
-    Class.prototype.walkBody = function(name, o) {
-      var _this = this;
-      return this.traverseChildren(false, function(child) {
-        var cont, exps, i, node, _i, _len, _ref4;
-        cont = true;
-        if (child instanceof Class) {
-          return false;
-        }
-        if (child instanceof Block) {
-          _ref4 = exps = child.expressions;
-          for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
-            node = _ref4[i];
-            if (node instanceof Value && node.isObject(true)) {
-              cont = false;
-              exps[i] = _this.addProperties(node, name, o);
-            }
-          }
-          child.expressions = exps = flatten(exps);
-        }
-        return cont && !(child instanceof Class);
-      });
-    };
-
-    Class.prototype.hoistDirectivePrologue = function() {
-      var expressions, index, node;
-      index = 0;
-      expressions = this.body.expressions;
-      while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) {
-        ++index;
-      }
-      return this.directives = expressions.splice(0, index);
-    };
-
-    Class.prototype.ensureConstructor = function(name, o) {
-      var missing, ref, superCall;
-      missing = !this.ctor;
-      this.ctor || (this.ctor = new Code);
-      this.ctor.ctor = this.ctor.name = name;
-      this.ctor.klass = null;
-      this.ctor.noReturn = true;
-      if (missing) {
-        if (this.parent) {
-          superCall = new Literal("" + name + ".__super__.constructor.apply(this, arguments)");
-        }
-        if (this.externalCtor) {
-          superCall = new Literal("" + this.externalCtor + ".apply(this, arguments)");
-        }
-        if (superCall) {
-          ref = new Literal(o.scope.freeVariable('ref'));
-          this.ctor.body.unshift(new Assign(ref, superCall));
-        }
-        this.addBoundFunctions(o);
-        if (superCall) {
-          this.ctor.body.push(ref);
-          this.ctor.body.makeReturn();
-        }
-        return this.body.expressions.unshift(this.ctor);
-      } else {
-        return this.addBoundFunctions(o);
-      }
-    };
-
-    Class.prototype.compileNode = function(o) {
-      var call, decl, klass, lname, name, params, _ref4;
-      decl = this.determineName();
-      name = decl || '_Class';
-      if (name.reserved) {
-        name = "_" + name;
-      }
-      lname = new Literal(name);
-      this.hoistDirectivePrologue();
-      this.setContext(name);
-      this.walkBody(name, o);
-      this.ensureConstructor(name, o);
-      this.body.spaced = true;
-      if (!(this.ctor instanceof Code)) {
-        this.body.expressions.unshift(this.ctor);
-      }
-      this.body.expressions.push(lname);
-      (_ref4 = this.body.expressions).unshift.apply(_ref4, this.directives);
-      call = Closure.wrap(this.body);
-      if (this.parent) {
-        this.superClass = new Literal(o.scope.freeVariable('super', false));
-        this.body.expressions.unshift(new Extends(lname, this.superClass));
-        call.args.push(this.parent);
-        params = call.variable.params || call.variable.base.params;
-        params.push(new Param(this.superClass));
-      }
-      klass = new Parens(call, true);
-      if (this.variable) {
-        klass = new Assign(this.variable, klass);
-      }
-      return klass.compileToFragments(o);
-    };
-
-    return Class;
-
-  })(Base);
-
-  exports.Assign = Assign = (function(_super) {
-    __extends(Assign, _super);
-
-    function Assign(variable, value, context, options) {
-      var forbidden, name, _ref4;
-      this.variable = variable;
-      this.value = value;
-      this.context = context;
-      this.param = options && options.param;
-      this.subpattern = options && options.subpattern;
-      forbidden = (_ref4 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref4) >= 0);
-      if (forbidden && this.context !== 'object') {
-        this.variable.error("variable name may not be \"" + name + "\"");
-      }
-    }
-
-    Assign.prototype.children = ['variable', 'value'];
-
-    Assign.prototype.isStatement = function(o) {
-      return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && __indexOf.call(this.context, "?") >= 0;
-    };
-
-    Assign.prototype.assigns = function(name) {
-      return this[this.context === 'object' ? 'value' : 'variable'].assigns(name);
-    };
-
-    Assign.prototype.unfoldSoak = function(o) {
-      return unfoldSoak(o, this, 'variable');
-    };
-
-    Assign.prototype.compileNode = function(o) {
-      var answer, compiledName, isValue, match, name, val, varBase, _ref4, _ref5, _ref6, _ref7;
-      if (isValue = this.variable instanceof Value) {
-        if (this.variable.isArray() || this.variable.isObject()) {
-          return this.compilePatternMatch(o);
-        }
-        if (this.variable.isSplice()) {
-          return this.compileSplice(o);
-        }
-        if ((_ref4 = this.context) === '||=' || _ref4 === '&&=' || _ref4 === '?=') {
-          return this.compileConditional(o);
-        }
-      }
-      compiledName = this.variable.compileToFragments(o, LEVEL_LIST);
-      name = fragmentsToText(compiledName);
-      if (!this.context) {
-        varBase = this.variable.unwrapAll();
-        if (!varBase.isAssignable()) {
-          this.variable.error("\"" + (this.variable.compile(o)) + "\" cannot be assigned");
-        }
-        if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) {
-          if (this.param) {
-            o.scope.add(name, 'var');
-          } else {
-            o.scope.find(name);
-          }
-        }
-      }
-      if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) {
-        if (match[1]) {
-          this.value.klass = match[1];
-        }
-        this.value.name = (_ref5 = (_ref6 = (_ref7 = match[2]) != null ? _ref7 : match[3]) != null ? _ref6 : match[4]) != null ? _ref5 : match[5];
-      }
-      val = this.value.compileToFragments(o, LEVEL_LIST);
-      if (this.context === 'object') {
-        return compiledName.concat(this.makeCode(": "), val);
-      }
-      answer = compiledName.concat(this.makeCode(" " + (this.context || '=') + " "), val);
-      if (o.level <= LEVEL_LIST) {
-        return answer;
-      } else {
-        return this.wrapInBraces(answer);
-      }
-    };
-
-    Assign.prototype.compilePatternMatch = function(o) {
-      var acc, assigns, code, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, vvarText, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
-      top = o.level === LEVEL_TOP;
-      value = this.value;
-      objects = this.variable.base.objects;
-      if (!(olen = objects.length)) {
-        code = value.compileToFragments(o);
-        if (o.level >= LEVEL_OP) {
-          return this.wrapInBraces(code);
-        } else {
-          return code;
-        }
-      }
-      isObject = this.variable.isObject();
-      if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) {
-        if (obj instanceof Assign) {
-          _ref4 = obj, (_ref5 = _ref4.variable, idx = _ref5.base), obj = _ref4.value;
-        } else {
-          idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0);
-        }
-        acc = IDENTIFIER.test(idx.unwrap().value || 0);
-        value = new Value(value);
-        value.properties.push(new (acc ? Access : Index)(idx));
-        if (_ref6 = obj.unwrap().value, __indexOf.call(RESERVED, _ref6) >= 0) {
-          obj.error("assignment to a reserved word: " + (obj.compile(o)));
-        }
-        return new Assign(obj, value, null, {
-          param: this.param
-        }).compileToFragments(o, LEVEL_TOP);
-      }
-      vvar = value.compileToFragments(o, LEVEL_LIST);
-      vvarText = fragmentsToText(vvar);
-      assigns = [];
-      splat = false;
-      if (!IDENTIFIER.test(vvarText) || this.variable.assigns(vvarText)) {
-        assigns.push([this.makeCode("" + (ref = o.scope.freeVariable('ref')) + " = ")].concat(__slice.call(vvar)));
-        vvar = [this.makeCode(ref)];
-        vvarText = ref;
-      }
-      for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) {
-        obj = objects[i];
-        idx = i;
-        if (isObject) {
-          if (obj instanceof Assign) {
-            _ref7 = obj, (_ref8 = _ref7.variable, idx = _ref8.base), obj = _ref7.value;
-          } else {
-            if (obj.base instanceof Parens) {
-              _ref9 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref9[0], idx = _ref9[1];
-            } else {
-              idx = obj["this"] ? obj.properties[0].name : obj;
-            }
-          }
-        }
-        if (!splat && obj instanceof Splat) {
-          name = obj.name.unwrap().value;
-          obj = obj.unwrap();
-          val = "" + olen + " <= " + vvarText + ".length ? " + (utility('slice')) + ".call(" + vvarText + ", " + i;
-          if (rest = olen - i - 1) {
-            ivar = o.scope.freeVariable('i');
-            val += ", " + ivar + " = " + vvarText + ".length - " + rest + ") : (" + ivar + " = " + i + ", [])";
-          } else {
-            val += ") : []";
-          }
-          val = new Literal(val);
-          splat = "" + ivar + "++";
-        } else {
-          name = obj.unwrap().value;
-          if (obj instanceof Splat) {
-            obj.error("multiple splats are disallowed in an assignment");
-          }
-          if (typeof idx === 'number') {
-            idx = new Literal(splat || idx);
-            acc = false;
-          } else {
-            acc = isObject && IDENTIFIER.test(idx.unwrap().value || 0);
-          }
-          val = new Value(new Literal(vvarText), [new (acc ? Access : Index)(idx)]);
-        }
-        if ((name != null) && __indexOf.call(RESERVED, name) >= 0) {
-          obj.error("assignment to a reserved word: " + (obj.compile(o)));
-        }
-        assigns.push(new Assign(obj, val, null, {
-          param: this.param,
-          subpattern: true
-        }).compileToFragments(o, LEVEL_LIST));
-      }
-      if (!(top || this.subpattern)) {
-        assigns.push(vvar);
-      }
-      fragments = this.joinFragmentArrays(assigns, ', ');
-      if (o.level < LEVEL_LIST) {
-        return fragments;
-      } else {
-        return this.wrapInBraces(fragments);
-      }
-    };
-
-    Assign.prototype.compileConditional = function(o) {
-      var left, right, _ref4;
-      _ref4 = this.variable.cacheReference(o), left = _ref4[0], right = _ref4[1];
-      if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
-        this.variable.error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been declared before");
-      }
-      if (__indexOf.call(this.context, "?") >= 0) {
-        o.isExistentialEquals = true;
-      }
-      return new Op(this.context.slice(0, -1), left, new Assign(right, this.value, '=')).compileToFragments(o);
-    };
-
-    Assign.prototype.compileSplice = function(o) {
-      var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref4, _ref5, _ref6;
-      _ref4 = this.variable.properties.pop().range, from = _ref4.from, to = _ref4.to, exclusive = _ref4.exclusive;
-      name = this.variable.compile(o);
-      if (from) {
-        _ref5 = this.cacheToCodeFragments(from.cache(o, LEVEL_OP)), fromDecl = _ref5[0], fromRef = _ref5[1];
-      } else {
-        fromDecl = fromRef = '0';
-      }
-      if (to) {
-        if ((from != null ? from.isSimpleNumber() : void 0) && to.isSimpleNumber()) {
-          to = +to.compile(o) - +fromRef;
-          if (!exclusive) {
-            to += 1;
-          }
-        } else {
-          to = to.compile(o, LEVEL_ACCESS) + ' - ' + fromRef;
-          if (!exclusive) {
-            to += ' + 1';
-          }
-        }
-      } else {
-        to = "9e9";
-      }
-      _ref6 = this.value.cache(o, LEVEL_LIST), valDef = _ref6[0], valRef = _ref6[1];
-      answer = [].concat(this.makeCode("[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat("), valDef, this.makeCode(")), "), valRef);
-      if (o.level > LEVEL_TOP) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    return Assign;
-
-  })(Base);
-
-  exports.Code = Code = (function(_super) {
-    __extends(Code, _super);
-
-    function Code(params, body, tag) {
-      this.params = params || [];
-      this.body = body || new Block;
-      this.bound = tag === 'boundfunc';
-      if (this.bound) {
-        this.context = '_this';
-      }
-    }
-
-    Code.prototype.children = ['params', 'body'];
-
-    Code.prototype.isStatement = function() {
-      return !!this.ctor;
-    };
-
-    Code.prototype.jumps = NO;
-
-    Code.prototype.compileNode = function(o) {
-      var answer, code, exprs, i, idt, lit, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref4, _ref5, _ref6, _ref7, _ref8;
-      o.scope = new Scope(o.scope, this.body, this);
-      o.scope.shared = del(o, 'sharedScope');
-      o.indent += TAB;
-      delete o.bare;
-      delete o.isExistentialEquals;
-      params = [];
-      exprs = [];
-      this.eachParamName(function(name) {
-        if (!o.scope.check(name)) {
-          return o.scope.parameter(name);
-        }
-      });
-      _ref4 = this.params;
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        param = _ref4[_i];
-        if (!param.splat) {
-          continue;
-        }
-        _ref5 = this.params;
-        for (_j = 0, _len1 = _ref5.length; _j < _len1; _j++) {
-          p = _ref5[_j].name;
-          if (p["this"]) {
-            p = p.properties[0].name;
-          }
-          if (p.value) {
-            o.scope.add(p.value, 'var', true);
-          }
-        }
-        splats = new Assign(new Value(new Arr((function() {
-          var _k, _len2, _ref6, _results;
-          _ref6 = this.params;
-          _results = [];
-          for (_k = 0, _len2 = _ref6.length; _k < _len2; _k++) {
-            p = _ref6[_k];
-            _results.push(p.asReference(o));
-          }
-          return _results;
-        }).call(this))), new Value(new Literal('arguments')));
-        break;
-      }
-      _ref6 = this.params;
-      for (_k = 0, _len2 = _ref6.length; _k < _len2; _k++) {
-        param = _ref6[_k];
-        if (param.isComplex()) {
-          val = ref = param.asReference(o);
-          if (param.value) {
-            val = new Op('?', ref, param.value);
-          }
-          exprs.push(new Assign(new Value(param.name), val, '=', {
-            param: true
-          }));
-        } else {
-          ref = param;
-          if (param.value) {
-            lit = new Literal(ref.name.value + ' == null');
-            val = new Assign(new Value(param.name), param.value, '=');
-            exprs.push(new If(lit, val));
-          }
-        }
-        if (!splats) {
-          params.push(ref);
-        }
-      }
-      wasEmpty = this.body.isEmpty();
-      if (splats) {
-        exprs.unshift(splats);
-      }
-      if (exprs.length) {
-        (_ref7 = this.body.expressions).unshift.apply(_ref7, exprs);
-      }
-      for (i = _l = 0, _len3 = params.length; _l < _len3; i = ++_l) {
-        p = params[i];
-        params[i] = p.compileToFragments(o);
-        o.scope.parameter(fragmentsToText(params[i]));
-      }
-      uniqs = [];
-      this.eachParamName(function(name, node) {
-        if (__indexOf.call(uniqs, name) >= 0) {
-          node.error("multiple parameters named '" + name + "'");
-        }
-        return uniqs.push(name);
-      });
-      if (!(wasEmpty || this.noReturn)) {
-        this.body.makeReturn();
-      }
-      if (this.bound) {
-        if ((_ref8 = o.scope.parent.method) != null ? _ref8.bound : void 0) {
-          this.bound = this.context = o.scope.parent.method.context;
-        } else if (!this["static"]) {
-          o.scope.parent.assign('_this', 'this');
-        }
-      }
-      idt = o.indent;
-      code = 'function';
-      if (this.ctor) {
-        code += ' ' + this.name;
-      }
-      code += '(';
-      answer = [this.makeCode(code)];
-      for (i = _m = 0, _len4 = params.length; _m < _len4; i = ++_m) {
-        p = params[i];
-        if (i) {
-          answer.push(this.makeCode(", "));
-        }
-        answer.push.apply(answer, p);
-      }
-      answer.push(this.makeCode(') {'));
-      if (!this.body.isEmpty()) {
-        answer = answer.concat(this.makeCode("\n"), this.body.compileWithDeclarations(o), this.makeCode("\n" + this.tab));
-      }
-      answer.push(this.makeCode('}'));
-      if (this.ctor) {
-        return [this.makeCode(this.tab)].concat(__slice.call(answer));
-      }
-      if (this.front || (o.level >= LEVEL_ACCESS)) {
-        return this.wrapInBraces(answer);
-      } else {
-        return answer;
-      }
-    };
-
-    Code.prototype.eachParamName = function(iterator) {
-      var param, _i, _len, _ref4, _results;
-      _ref4 = this.params;
-      _results = [];
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        param = _ref4[_i];
-        _results.push(param.eachName(iterator));
-      }
-      return _results;
-    };
-
-    Code.prototype.traverseChildren = function(crossScope, func) {
-      if (crossScope) {
-        return Code.__super__.traverseChildren.call(this, crossScope, func);
-      }
-    };
-
-    return Code;
-
-  })(Base);
-
-  exports.Param = Param = (function(_super) {
-    __extends(Param, _super);
-
-    function Param(name, value, splat) {
-      var _ref4;
-      this.name = name;
-      this.value = value;
-      this.splat = splat;
-      if (_ref4 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref4) >= 0) {
-        this.name.error("parameter name \"" + name + "\" is not allowed");
-      }
-    }
-
-    Param.prototype.children = ['name', 'value'];
-
-    Param.prototype.compileToFragments = function(o) {
-      return this.name.compileToFragments(o, LEVEL_LIST);
-    };
-
-    Param.prototype.asReference = function(o) {
-      var node;
-      if (this.reference) {
-        return this.reference;
-      }
-      node = this.name;
-      if (node["this"]) {
-        node = node.properties[0].name;
-        if (node.value.reserved) {
-          node = new Literal(o.scope.freeVariable(node.value));
-        }
-      } else if (node.isComplex()) {
-        node = new Literal(o.scope.freeVariable('arg'));
-      }
-      node = new Value(node);
-      if (this.splat) {
-        node = new Splat(node);
-      }
-      return this.reference = node;
-    };
-
-    Param.prototype.isComplex = function() {
-      return this.name.isComplex();
-    };
-
-    Param.prototype.eachName = function(iterator, name) {
-      var atParam, node, obj, _i, _len, _ref4;
-      if (name == null) {
-        name = this.name;
-      }
-      atParam = function(obj) {
-        var node;
-        node = obj.properties[0].name;
-        if (!node.value.reserved) {
-          return iterator(node.value, node);
-        }
-      };
-      if (name instanceof Literal) {
-        return iterator(name.value, name);
-      }
-      if (name instanceof Value) {
-        return atParam(name);
-      }
-      _ref4 = name.objects;
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        obj = _ref4[_i];
-        if (obj instanceof Assign) {
-          this.eachName(iterator, obj.value.unwrap());
-        } else if (obj instanceof Splat) {
-          node = obj.name.unwrap();
-          iterator(node.value, node);
-        } else if (obj instanceof Value) {
-          if (obj.isArray() || obj.isObject()) {
-            this.eachName(iterator, obj.base);
-          } else if (obj["this"]) {
-            atParam(obj);
-          } else {
-            iterator(obj.base.value, obj.base);
-          }
-        } else {
-          obj.error("illegal parameter " + (obj.compile()));
-        }
-      }
-    };
-
-    return Param;
-
-  })(Base);
-
-  exports.Splat = Splat = (function(_super) {
-    __extends(Splat, _super);
-
-    Splat.prototype.children = ['name'];
-
-    Splat.prototype.isAssignable = YES;
-
-    function Splat(name) {
-      this.name = name.compile ? name : new Literal(name);
-    }
-
-    Splat.prototype.assigns = function(name) {
-      return this.name.assigns(name);
-    };
-
-    Splat.prototype.compileToFragments = function(o) {
-      return this.name.compileToFragments(o);
-    };
-
-    Splat.prototype.unwrap = function() {
-      return this.name;
-    };
-
-    Splat.compileSplattedArray = function(o, list, apply) {
-      var args, base, compiledNode, concatPart, fragments, i, index, node, _i, _len;
-      index = -1;
-      while ((node = list[++index]) && !(node instanceof Splat)) {
-        continue;
-      }
-      if (index >= list.length) {
-        return [];
-      }
-      if (list.length === 1) {
-        node = list[0];
-        fragments = node.compileToFragments(o, LEVEL_LIST);
-        if (apply) {
-          return fragments;
-        }
-        return [].concat(node.makeCode("" + (utility('slice')) + ".call("), fragments, node.makeCode(")"));
-      }
-      args = list.slice(index);
-      for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
-        node = args[i];
-        compiledNode = node.compileToFragments(o, LEVEL_LIST);
-        args[i] = node instanceof Splat ? [].concat(node.makeCode("" + (utility('slice')) + ".call("), compiledNode, node.makeCode(")")) : [].concat(node.makeCode("["), compiledNode, node.makeCode("]"));
-      }
-      if (index === 0) {
-        node = list[0];
-        concatPart = node.joinFragmentArrays(args.slice(1), ', ');
-        return args[0].concat(node.makeCode(".concat("), concatPart, node.makeCode(")"));
-      }
-      base = (function() {
-        var _j, _len1, _ref4, _results;
-        _ref4 = list.slice(0, index);
-        _results = [];
-        for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
-          node = _ref4[_j];
-          _results.push(node.compileToFragments(o, LEVEL_LIST));
-        }
-        return _results;
-      })();
-      base = list[0].joinFragmentArrays(base, ', ');
-      concatPart = list[index].joinFragmentArrays(args, ', ');
-      return [].concat(list[0].makeCode("["), base, list[index].makeCode("].concat("), concatPart, (last(list)).makeCode(")"));
-    };
-
-    return Splat;
-
-  })(Base);
-
-  exports.While = While = (function(_super) {
-    __extends(While, _super);
-
-    function While(condition, options) {
-      this.condition = (options != null ? options.invert : void 0) ? condition.invert() : condition;
-      this.guard = options != null ? options.guard : void 0;
-    }
-
-    While.prototype.children = ['condition', 'guard', 'body'];
-
-    While.prototype.isStatement = YES;
-
-    While.prototype.makeReturn = function(res) {
-      if (res) {
-        return While.__super__.makeReturn.apply(this, arguments);
-      } else {
-        this.returns = !this.jumps({
-          loop: true
-        });
-        return this;
-      }
-    };
-
-    While.prototype.addBody = function(body) {
-      this.body = body;
-      return this;
-    };
-
-    While.prototype.jumps = function() {
-      var expressions, node, _i, _len;
-      expressions = this.body.expressions;
-      if (!expressions.length) {
-        return false;
-      }
-      for (_i = 0, _len = expressions.length; _i < _len; _i++) {
-        node = expressions[_i];
-        if (node.jumps({
-          loop: true
-        })) {
-          return node;
-        }
-      }
-      return false;
-    };
-
-    While.prototype.compileNode = function(o) {
-      var answer, body, rvar, set;
-      o.indent += TAB;
-      set = '';
-      body = this.body;
-      if (body.isEmpty()) {
-        body = this.makeCode('');
-      } else {
-        if (this.returns) {
-          body.makeReturn(rvar = o.scope.freeVariable('results'));
-          set = "" + this.tab + rvar + " = [];\n";
-        }
-        if (this.guard) {
-          if (body.expressions.length > 1) {
-            body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
-          } else {
-            if (this.guard) {
-              body = Block.wrap([new If(this.guard, body)]);
-            }
-          }
-        }
-        body = [].concat(this.makeCode("\n"), body.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab));
-      }
-      answer = [].concat(this.makeCode(set + this.tab + "while ("), this.condition.compileToFragments(o, LEVEL_PAREN), this.makeCode(") {"), body, this.makeCode("}"));
-      if (this.returns) {
-        answer.push(this.makeCode("\n" + this.tab + "return " + rvar + ";"));
-      }
-      return answer;
-    };
-
-    return While;
-
-  })(Base);
-
-  exports.Op = Op = (function(_super) {
-    var CONVERSIONS, INVERSIONS;
-
-    __extends(Op, _super);
-
-    function Op(op, first, second, flip) {
-      if (op === 'in') {
-        return new In(first, second);
-      }
-      if (op === 'do') {
-        return this.generateDo(first);
-      }
-      if (op === 'new') {
-        if (first instanceof Call && !first["do"] && !first.isNew) {
-          return first.newInstance();
-        }
-        if (first instanceof Code && first.bound || first["do"]) {
-          first = new Parens(first);
-        }
-      }
-      this.operator = CONVERSIONS[op] || op;
-      this.first = first;
-      this.second = second;
-      this.flip = !!flip;
-      return this;
-    }
-
-    CONVERSIONS = {
-      '==': '===',
-      '!=': '!==',
-      'of': 'in'
-    };
-
-    INVERSIONS = {
-      '!==': '===',
-      '===': '!=='
-    };
-
-    Op.prototype.children = ['first', 'second'];
-
-    Op.prototype.isSimpleNumber = NO;
-
-    Op.prototype.isUnary = function() {
-      return !this.second;
-    };
-
-    Op.prototype.isComplex = function() {
-      var _ref4;
-      return !(this.isUnary() && ((_ref4 = this.operator) === '+' || _ref4 === '-')) || this.first.isComplex();
-    };
-
-    Op.prototype.isChainable = function() {
-      var _ref4;
-      return (_ref4 = this.operator) === '<' || _ref4 === '>' || _ref4 === '>=' || _ref4 === '<=' || _ref4 === '===' || _ref4 === '!==';
-    };
-
-    Op.prototype.invert = function() {
-      var allInvertable, curr, fst, op, _ref4;
-      if (this.isChainable() && this.first.isChainable()) {
-        allInvertable = true;
-        curr = this;
-        while (curr && curr.operator) {
-          allInvertable && (allInvertable = curr.operator in INVERSIONS);
-          curr = curr.first;
-        }
-        if (!allInvertable) {
-          return new Parens(this).invert();
-        }
-        curr = this;
-        while (curr && curr.operator) {
-          curr.invert = !curr.invert;
-          curr.operator = INVERSIONS[curr.operator];
-          curr = curr.first;
-        }
-        return this;
-      } else if (op = INVERSIONS[this.operator]) {
-        this.operator = op;
-        if (this.first.unwrap() instanceof Op) {
-          this.first.invert();
-        }
-        return this;
-      } else if (this.second) {
-        return new Parens(this).invert();
-      } else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref4 = fst.operator) === '!' || _ref4 === 'in' || _ref4 === 'instanceof')) {
-        return fst;
-      } else {
-        return new Op('!', this);
-      }
-    };
-
-    Op.prototype.unfoldSoak = function(o) {
-      var _ref4;
-      return ((_ref4 = this.operator) === '++' || _ref4 === '--' || _ref4 === 'delete') && unfoldSoak(o, this, 'first');
-    };
-
-    Op.prototype.generateDo = function(exp) {
-      var call, func, param, passedParams, ref, _i, _len, _ref4;
-      passedParams = [];
-      func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
-      _ref4 = func.params || [];
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        param = _ref4[_i];
-        if (param.value) {
-          passedParams.push(param.value);
-          delete param.value;
-        } else {
-          passedParams.push(param);
-        }
-      }
-      call = new Call(exp, passedParams);
-      call["do"] = true;
-      return call;
-    };
-
-    Op.prototype.compileNode = function(o) {
-      var answer, isChain, _ref4, _ref5;
-      isChain = this.isChainable() && this.first.isChainable();
-      if (!isChain) {
-        this.first.front = this.front;
-      }
-      if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) {
-        this.error('delete operand may not be argument or var');
-      }
-      if (((_ref4 = this.operator) === '--' || _ref4 === '++') && (_ref5 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref5) >= 0)) {
-        this.error("cannot increment/decrement \"" + (this.first.unwrapAll().value) + "\"");
-      }
-      if (this.isUnary()) {
-        return this.compileUnary(o);
-      }
-      if (isChain) {
-        return this.compileChain(o);
-      }
-      if (this.operator === '?') {
-        return this.compileExistence(o);
-      }
-      answer = [].concat(this.first.compileToFragments(o, LEVEL_OP), this.makeCode(' ' + this.operator + ' '), this.second.compileToFragments(o, LEVEL_OP));
-      if (o.level <= LEVEL_OP) {
-        return answer;
-      } else {
-        return this.wrapInBraces(answer);
-      }
-    };
-
-    Op.prototype.compileChain = function(o) {
-      var fragments, fst, shared, _ref4;
-      _ref4 = this.first.second.cache(o), this.first.second = _ref4[0], shared = _ref4[1];
-      fst = this.first.compileToFragments(o, LEVEL_OP);
-      fragments = fst.concat(this.makeCode(" " + (this.invert ? '&&' : '||') + " "), shared.compileToFragments(o), this.makeCode(" " + this.operator + " "), this.second.compileToFragments(o, LEVEL_OP));
-      return this.wrapInBraces(fragments);
-    };
-
-    Op.prototype.compileExistence = function(o) {
-      var fst, ref;
-      if (this.first.isComplex()) {
-        ref = new Literal(o.scope.freeVariable('ref'));
-        fst = new Parens(new Assign(ref, this.first));
-      } else {
-        fst = this.first;
-        ref = fst;
-      }
-      return new If(new Existence(fst), ref, {
-        type: 'if'
-      }).addElse(this.second).compileToFragments(o);
-    };
-
-    Op.prototype.compileUnary = function(o) {
-      var op, parts, plusMinus;
-      parts = [];
-      op = this.operator;
-      parts.push([this.makeCode(op)]);
-      if (op === '!' && this.first instanceof Existence) {
-        this.first.negated = !this.first.negated;
-        return this.first.compileToFragments(o);
-      }
-      if (o.level >= LEVEL_ACCESS) {
-        return (new Parens(this)).compileToFragments(o);
-      }
-      plusMinus = op === '+' || op === '-';
-      if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) {
-        parts.push([this.makeCode(' ')]);
-      }
-      if ((plusMinus && this.first instanceof Op) || (op === 'new' && this.first.isStatement(o))) {
-        this.first = new Parens(this.first);
-      }
-      parts.push(this.first.compileToFragments(o, LEVEL_OP));
-      if (this.flip) {
-        parts.reverse();
-      }
-      return this.joinFragmentArrays(parts, '');
-    };
-
-    Op.prototype.toString = function(idt) {
-      return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator);
-    };
-
-    return Op;
-
-  })(Base);
-
-  exports.In = In = (function(_super) {
-    __extends(In, _super);
-
-    function In(object, array) {
-      this.object = object;
-      this.array = array;
-    }
-
-    In.prototype.children = ['object', 'array'];
-
-    In.prototype.invert = NEGATE;
-
-    In.prototype.compileNode = function(o) {
-      var hasSplat, obj, _i, _len, _ref4;
-      if (this.array instanceof Value && this.array.isArray()) {
-        _ref4 = this.array.base.objects;
-        for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-          obj = _ref4[_i];
-          if (!(obj instanceof Splat)) {
-            continue;
-          }
-          hasSplat = true;
-          break;
-        }
-        if (!hasSplat) {
-          return this.compileOrTest(o);
-        }
-      }
-      return this.compileLoopTest(o);
-    };
-
-    In.prototype.compileOrTest = function(o) {
-      var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref4, _ref5, _ref6;
-      if (this.array.base.objects.length === 0) {
-        return [this.makeCode("" + (!!this.negated))];
-      }
-      _ref4 = this.object.cache(o, LEVEL_OP), sub = _ref4[0], ref = _ref4[1];
-      _ref5 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref5[0], cnj = _ref5[1];
-      tests = [];
-      _ref6 = this.array.base.objects;
-      for (i = _i = 0, _len = _ref6.length; _i < _len; i = ++_i) {
-        item = _ref6[i];
-        if (i) {
-          tests.push(this.makeCode(cnj));
-        }
-        tests = tests.concat((i ? ref : sub), this.makeCode(cmp), item.compileToFragments(o, LEVEL_ACCESS));
-      }
-      if (o.level < LEVEL_OP) {
-        return tests;
-      } else {
-        return this.wrapInBraces(tests);
-      }
-    };
-
-    In.prototype.compileLoopTest = function(o) {
-      var fragments, ref, sub, _ref4;
-      _ref4 = this.object.cache(o, LEVEL_LIST), sub = _ref4[0], ref = _ref4[1];
-      fragments = [].concat(this.makeCode(utility('indexOf') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0')));
-      if ((fragmentsToText(sub)) === (fragmentsToText(ref))) {
-        return fragments;
-      }
-      fragments = sub.concat(this.makeCode(', '), fragments);
-      if (o.level < LEVEL_LIST) {
-        return fragments;
-      } else {
-        return this.wrapInBraces(fragments);
-      }
-    };
-
-    In.prototype.toString = function(idt) {
-      return In.__super__.toString.call(this, idt, this.constructor.name + (this.negated ? '!' : ''));
-    };
-
-    return In;
-
-  })(Base);
-
-  exports.Try = Try = (function(_super) {
-    __extends(Try, _super);
-
-    function Try(attempt, errorVariable, recovery, ensure) {
-      this.attempt = attempt;
-      this.errorVariable = errorVariable;
-      this.recovery = recovery;
-      this.ensure = ensure;
-    }
-
-    Try.prototype.children = ['attempt', 'recovery', 'ensure'];
-
-    Try.prototype.isStatement = YES;
-
-    Try.prototype.jumps = function(o) {
-      var _ref4;
-      return this.attempt.jumps(o) || ((_ref4 = this.recovery) != null ? _ref4.jumps(o) : void 0);
-    };
-
-    Try.prototype.makeReturn = function(res) {
-      if (this.attempt) {
-        this.attempt = this.attempt.makeReturn(res);
-      }
-      if (this.recovery) {
-        this.recovery = this.recovery.makeReturn(res);
-      }
-      return this;
-    };
-
-    Try.prototype.compileNode = function(o) {
-      var catchPart, ensurePart, placeholder, tryPart;
-      o.indent += TAB;
-      tryPart = this.attempt.compileToFragments(o, LEVEL_TOP);
-      catchPart = this.recovery ? (placeholder = new Literal('_error'), this.errorVariable ? this.recovery.unshift(new Assign(this.errorVariable, placeholder)) : void 0, [].concat(this.makeCode(" catch ("), placeholder.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
-      ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : [];
-      return [].concat(this.makeCode("" + this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart);
-    };
-
-    return Try;
-
-  })(Base);
-
-  exports.Throw = Throw = (function(_super) {
-    __extends(Throw, _super);
-
-    function Throw(expression) {
-      this.expression = expression;
-    }
-
-    Throw.prototype.children = ['expression'];
-
-    Throw.prototype.isStatement = YES;
-
-    Throw.prototype.jumps = NO;
-
-    Throw.prototype.makeReturn = THIS;
-
-    Throw.prototype.compileNode = function(o) {
-      return [].concat(this.makeCode(this.tab + "throw "), this.expression.compileToFragments(o), this.makeCode(";"));
-    };
-
-    return Throw;
-
-  })(Base);
-
-  exports.Existence = Existence = (function(_super) {
-    __extends(Existence, _super);
-
-    function Existence(expression) {
-      this.expression = expression;
-    }
-
-    Existence.prototype.children = ['expression'];
-
-    Existence.prototype.invert = NEGATE;
-
-    Existence.prototype.compileNode = function(o) {
-      var cmp, cnj, code, _ref4;
-      this.expression.front = this.front;
-      code = this.expression.compile(o, LEVEL_OP);
-      if (IDENTIFIER.test(code) && !o.scope.check(code)) {
-        _ref4 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref4[0], cnj = _ref4[1];
-        code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null";
-      } else {
-        code = "" + code + " " + (this.negated ? '==' : '!=') + " null";
-      }
-      return [this.makeCode(o.level <= LEVEL_COND ? code : "(" + code + ")")];
-    };
-
-    return Existence;
-
-  })(Base);
-
-  exports.Parens = Parens = (function(_super) {
-    __extends(Parens, _super);
-
-    function Parens(body) {
-      this.body = body;
-    }
-
-    Parens.prototype.children = ['body'];
-
-    Parens.prototype.unwrap = function() {
-      return this.body;
-    };
-
-    Parens.prototype.isComplex = function() {
-      return this.body.isComplex();
-    };
-
-    Parens.prototype.compileNode = function(o) {
-      var bare, expr, fragments;
-      expr = this.body.unwrap();
-      if (expr instanceof Value && expr.isAtomic()) {
-        expr.front = this.front;
-        return expr.compileToFragments(o);
-      }
-      fragments = expr.compileToFragments(o, LEVEL_PAREN);
-      bare = o.level < LEVEL_OP && (expr instanceof Op || expr instanceof Call || (expr instanceof For && expr.returns));
-      if (bare) {
-        return fragments;
-      } else {
-        return this.wrapInBraces(fragments);
-      }
-    };
-
-    return Parens;
-
-  })(Base);
-
-  exports.For = For = (function(_super) {
-    __extends(For, _super);
-
-    function For(body, source) {
-      var _ref4;
-      this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
-      this.body = Block.wrap([body]);
-      this.own = !!source.own;
-      this.object = !!source.object;
-      if (this.object) {
-        _ref4 = [this.index, this.name], this.name = _ref4[0], this.index = _ref4[1];
-      }
-      if (this.index instanceof Value) {
-        this.index.error('index cannot be a pattern matching expression');
-      }
-      this.range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length;
-      this.pattern = this.name instanceof Value;
-      if (this.range && this.index) {
-        this.index.error('indexes do not apply to range loops');
-      }
-      if (this.range && this.pattern) {
-        this.name.error('cannot pattern match over range loops');
-      }
-      this.returns = false;
-    }
-
-    For.prototype.children = ['body', 'source', 'guard', 'step'];
-
-    For.prototype.compileNode = function(o) {
-      var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref4, _ref5;
-      body = Block.wrap([this.body]);
-      lastJumps = (_ref4 = last(body.expressions)) != null ? _ref4.jumps() : void 0;
-      if (lastJumps && lastJumps instanceof Return) {
-        this.returns = false;
-      }
-      source = this.range ? this.source.base : this.source;
-      scope = o.scope;
-      name = this.name && (this.name.compile(o, LEVEL_LIST));
-      index = this.index && (this.index.compile(o, LEVEL_LIST));
-      if (name && !this.pattern) {
-        scope.find(name);
-      }
-      if (index) {
-        scope.find(index);
-      }
-      if (this.returns) {
-        rvar = scope.freeVariable('results');
-      }
-      ivar = (this.object && index) || scope.freeVariable('i');
-      kvar = (this.range && name) || index || ivar;
-      kvarAssign = kvar !== ivar ? "" + kvar + " = " : "";
-      if (this.step && !this.range) {
-        _ref5 = this.cacheToCodeFragments(this.step.cache(o, LEVEL_LIST)), step = _ref5[0], stepVar = _ref5[1];
-        stepNum = stepVar.match(SIMPLENUM);
-      }
-      if (this.pattern) {
-        name = ivar;
-      }
-      varPart = '';
-      guardPart = '';
-      defPart = '';
-      idt1 = this.tab + TAB;
-      if (this.range) {
-        forPartFragments = source.compileToFragments(merge(o, {
-          index: ivar,
-          name: name,
-          step: this.step
-        }));
-      } else {
-        svar = this.source.compile(o, LEVEL_LIST);
-        if ((name || this.own) && !IDENTIFIER.test(svar)) {
-          defPart += "" + this.tab + (ref = scope.freeVariable('ref')) + " = " + svar + ";\n";
-          svar = ref;
-        }
-        if (name && !this.pattern) {
-          namePart = "" + name + " = " + svar + "[" + kvar + "]";
-        }
-        if (!this.object) {
-          if (step !== stepVar) {
-            defPart += "" + this.tab + step + ";\n";
-          }
-          if (!(this.step && stepNum && (down = +stepNum < 0))) {
-            lvar = scope.freeVariable('len');
-          }
-          declare = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length";
-          declareDown = "" + kvarAssign + ivar + " = " + svar + ".length - 1";
-          compare = "" + ivar + " < " + lvar;
-          compareDown = "" + ivar + " >= 0";
-          if (this.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 = "" + (kvar !== ivar ? "++" + ivar : "" + ivar + "++");
-          }
-          forPartFragments = [this.makeCode("" + declare + "; " + compare + "; " + kvarAssign + increment)];
-        }
-      }
-      if (this.returns) {
-        resultPart = "" + this.tab + rvar + " = [];\n";
-        returnResult = "\n" + this.tab + "return " + rvar + ";";
-        body.makeReturn(rvar);
-      }
-      if (this.guard) {
-        if (body.expressions.length > 1) {
-          body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue")));
-        } else {
-          if (this.guard) {
-            body = Block.wrap([new If(this.guard, body)]);
-          }
-        }
-      }
-      if (this.pattern) {
-        body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]")));
-      }
-      defPartFragments = [].concat(this.makeCode(defPart), this.pluckDirectCall(o, body));
-      if (namePart) {
-        varPart = "\n" + idt1 + namePart + ";";
-      }
-      if (this.object) {
-        forPartFragments = [this.makeCode("" + kvar + " in " + svar)];
-        if (this.own) {
-          guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) continue;";
-        }
-      }
-      bodyFragments = body.compileToFragments(merge(o, {
-        indent: idt1
-      }), LEVEL_TOP);
-      if (bodyFragments && (bodyFragments.length > 0)) {
-        bodyFragments = [].concat(this.makeCode("\n"), bodyFragments, this.makeCode("\n"));
-      }
-      return [].concat(defPartFragments, this.makeCode("" + (resultPart || '') + this.tab + "for ("), forPartFragments, this.makeCode(") {" + guardPart + varPart), bodyFragments, this.makeCode("" + this.tab + "}" + (returnResult || '')));
-    };
-
-    For.prototype.pluckDirectCall = function(o, body) {
-      var base, defs, expr, fn, idx, ref, val, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
-      defs = [];
-      _ref4 = body.expressions;
-      for (idx = _i = 0, _len = _ref4.length; _i < _len; idx = ++_i) {
-        expr = _ref4[idx];
-        expr = expr.unwrapAll();
-        if (!(expr instanceof Call)) {
-          continue;
-        }
-        val = expr.variable.unwrapAll();
-        if (!((val instanceof Code) || (val instanceof Value && ((_ref5 = val.base) != null ? _ref5.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref6 = (_ref7 = val.properties[0].name) != null ? _ref7.value : void 0) === 'call' || _ref6 === 'apply')))) {
-          continue;
-        }
-        fn = ((_ref8 = val.base) != null ? _ref8.unwrapAll() : void 0) || val;
-        ref = new Literal(o.scope.freeVariable('fn'));
-        base = new Value(ref);
-        if (val.base) {
-          _ref9 = [base, val], val.base = _ref9[0], base = _ref9[1];
-        }
-        body.expressions[idx] = new Call(base, expr.args);
-        defs = defs.concat(this.makeCode(this.tab), new Assign(ref, fn).compileToFragments(o, LEVEL_TOP), this.makeCode(';\n'));
-      }
-      return defs;
-    };
-
-    return For;
-
-  })(While);
-
-  exports.Switch = Switch = (function(_super) {
-    __extends(Switch, _super);
-
-    function Switch(subject, cases, otherwise) {
-      this.subject = subject;
-      this.cases = cases;
-      this.otherwise = otherwise;
-    }
-
-    Switch.prototype.children = ['subject', 'cases', 'otherwise'];
-
-    Switch.prototype.isStatement = YES;
-
-    Switch.prototype.jumps = function(o) {
-      var block, conds, _i, _len, _ref4, _ref5, _ref6;
-      if (o == null) {
-        o = {
-          block: true
-        };
-      }
-      _ref4 = this.cases;
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        _ref5 = _ref4[_i], conds = _ref5[0], block = _ref5[1];
-        if (block.jumps(o)) {
-          return block;
-        }
-      }
-      return (_ref6 = this.otherwise) != null ? _ref6.jumps(o) : void 0;
-    };
-
-    Switch.prototype.makeReturn = function(res) {
-      var pair, _i, _len, _ref4, _ref5;
-      _ref4 = this.cases;
-      for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
-        pair = _ref4[_i];
-        pair[1].makeReturn(res);
-      }
-      if (res) {
-        this.otherwise || (this.otherwise = new Block([new Literal('void 0')]));
-      }
-      if ((_ref5 = this.otherwise) != null) {
-        _ref5.makeReturn(res);
-      }
-      return this;
-    };
-
-    Switch.prototype.compileNode = function(o) {
-      var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref4, _ref5, _ref6;
-      idt1 = o.indent + TAB;
-      idt2 = o.indent = idt1 + TAB;
-      fragments = [].concat(this.makeCode(this.tab + "switch ("), (this.subject ? this.subject.compileToFragments(o, LEVEL_PAREN) : this.makeCode("false")), this.makeCode(") {\n"));
-      _ref4 = this.cases;
-      for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
-        _ref5 = _ref4[i], conditions = _ref5[0], block = _ref5[1];
-        _ref6 = flatten([conditions]);
-        for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
-          cond = _ref6[_j];
-          if (!this.subject) {
-            cond = cond.invert();
-          }
-          fragments = fragments.concat(this.makeCode(idt1 + "case "), cond.compileToFragments(o, LEVEL_PAREN), this.makeCode(":\n"));
-        }
-        if ((body = block.compileToFragments(o, LEVEL_TOP)).length > 0) {
-          fragments = fragments.concat(body, this.makeCode('\n'));
-        }
-        if (i === this.cases.length - 1 && !this.otherwise) {
-          break;
-        }
-        expr = this.lastNonComment(block.expressions);
-        if (expr instanceof Return || (expr instanceof Literal && expr.jumps() && expr.value !== 'debugger')) {
-          continue;
-        }
-        fragments.push(cond.makeCode(idt2 + 'break;\n'));
-      }
-      if (this.otherwise && this.otherwise.expressions.length) {
-        fragments.push.apply(fragments, [this.makeCode(idt1 + "default:\n")].concat(__slice.call(this.otherwise.compileToFragments(o, LEVEL_TOP)), [this.makeCode("\n")]));
-      }
-      fragments.push(this.makeCode(this.tab + '}'));
-      return fragments;
-    };
-
-    return Switch;
-
-  })(Base);
-
-  exports.If = If = (function(_super) {
-    __extends(If, _super);
-
-    function If(condition, body, options) {
-      this.body = body;
-      if (options == null) {
-        options = {};
-      }
-      this.condition = options.type === 'unless' ? condition.invert() : condition;
-      this.elseBody = null;
-      this.isChain = false;
-      this.soak = options.soak;
-    }
-
-    If.prototype.children = ['condition', 'body', 'elseBody'];
-
-    If.prototype.bodyNode = function() {
-      var _ref4;
-      return (_ref4 = this.body) != null ? _ref4.unwrap() : void 0;
-    };
-
-    If.prototype.elseBodyNode = function() {
-      var _ref4;
-      return (_ref4 = this.elseBody) != null ? _ref4.unwrap() : void 0;
-    };
-
-    If.prototype.addElse = function(elseBody) {
-      if (this.isChain) {
-        this.elseBodyNode().addElse(elseBody);
-      } else {
-        this.isChain = elseBody instanceof If;
-        this.elseBody = this.ensureBlock(elseBody);
-      }
-      return this;
-    };
-
-    If.prototype.isStatement = function(o) {
-      var _ref4;
-      return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref4 = this.elseBodyNode()) != null ? _ref4.isStatement(o) : void 0);
-    };
-
-    If.prototype.jumps = function(o) {
-      var _ref4;
-      return this.body.jumps(o) || ((_ref4 = this.elseBody) != null ? _ref4.jumps(o) : void 0);
-    };
-
-    If.prototype.compileNode = function(o) {
-      if (this.isStatement(o)) {
-        return this.compileStatement(o);
-      } else {
-        return this.compileExpression(o);
-      }
-    };
-
-    If.prototype.makeReturn = function(res) {
-      if (res) {
-        this.elseBody || (this.elseBody = new Block([new Literal('void 0')]));
-      }
-      this.body && (this.body = new Block([this.body.makeReturn(res)]));
-      this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)]));
-      return this;
-    };
-
-    If.prototype.ensureBlock = function(node) {
-      if (node instanceof Block) {
-        return node;
-      } else {
-        return new Block([node]);
-      }
-    };
-
-    If.prototype.compileStatement = function(o) {
-      var answer, body, child, cond, exeq, ifPart, indent;
-      child = del(o, 'chainChild');
-      exeq = del(o, 'isExistentialEquals');
-      if (exeq) {
-        return new If(this.condition.invert(), this.elseBodyNode(), {
-          type: 'if'
-        }).compileToFragments(o);
-      }
-      indent = o.indent + TAB;
-      cond = this.condition.compileToFragments(o, LEVEL_PAREN);
-      body = this.ensureBlock(this.body).compileToFragments(merge(o, {
-        indent: indent
-      }));
-      ifPart = [].concat(this.makeCode("if ("), cond, this.makeCode(") {\n"), body, this.makeCode("\n" + this.tab + "}"));
-      if (!child) {
-        ifPart.unshift(this.makeCode(this.tab));
-      }
-      if (!this.elseBody) {
-        return ifPart;
-      }
-      answer = ifPart.concat(this.makeCode(' else '));
-      if (this.isChain) {
-        o.chainChild = true;
-        answer = answer.concat(this.elseBody.unwrap().compileToFragments(o, LEVEL_TOP));
-      } else {
-        answer = answer.concat(this.makeCode("{\n"), this.elseBody.compileToFragments(merge(o, {
-          indent: indent
-        }), LEVEL_TOP), this.makeCode("\n" + this.tab + "}"));
-      }
-      return answer;
-    };
-
-    If.prototype.compileExpression = function(o) {
-      var alt, body, cond, fragments;
-      cond = this.condition.compileToFragments(o, LEVEL_COND);
-      body = this.bodyNode().compileToFragments(o, LEVEL_LIST);
-      alt = this.elseBodyNode() ? this.elseBodyNode().compileToFragments(o, LEVEL_LIST) : [this.makeCode('void 0')];
-      fragments = cond.concat(this.makeCode(" ? "), body, this.makeCode(" : "), alt);
-      if (o.level >= LEVEL_COND) {
-        return this.wrapInBraces(fragments);
-      } else {
-        return fragments;
-      }
-    };
-
-    If.prototype.unfoldSoak = function() {
-      return this.soak && this;
-    };
-
-    return If;
-
-  })(Base);
-
-  Closure = {
-    wrap: function(expressions, statement, noReturn) {
-      var args, argumentsNode, call, func, meth;
-      if (expressions.jumps()) {
-        return expressions;
-      }
-      func = new Code([], Block.wrap([expressions]));
-      args = [];
-      argumentsNode = expressions.contains(this.isLiteralArguments);
-      if (argumentsNode && expressions.classBody) {
-        argumentsNode.error("Class bodies shouldn't reference arguments");
-      }
-      if (argumentsNode || expressions.contains(this.isLiteralThis)) {
-        meth = new Literal(argumentsNode ? 'apply' : 'call');
-        args = [new Literal('this')];
-        if (argumentsNode) {
-          args.push(new Literal('arguments'));
-        }
-        func = new Value(func, [new Access(meth)]);
-      }
-      func.noReturn = noReturn;
-      call = new Call(func, args);
-      if (statement) {
-        return Block.wrap([call]);
-      } else {
-        return call;
-      }
-    },
-    isLiteralArguments: function(node) {
-      return node instanceof Literal && node.value === 'arguments' && !node.asKey;
-    },
-    isLiteralThis: function(node) {
-      return (node instanceof Literal && node.value === 'this' && !node.asKey) || (node instanceof Code && node.bound) || (node instanceof Call && node.isSuper);
-    }
-  };
-
-  unfoldSoak = function(o, parent, name) {
-    var ifn;
-    if (!(ifn = parent[name].unfoldSoak(o))) {
-      return;
-    }
-    parent[name] = ifn.body;
-    ifn.body = new Value(parent);
-    return ifn;
-  };
-
-  UTILITIES = {
-    "extends": function() {
-      return "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; }";
-    },
-    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';
-    }
-  };
-
-  LEVEL_TOP = 1;
-
-  LEVEL_PAREN = 2;
-
-  LEVEL_LIST = 3;
-
-  LEVEL_COND = 4;
-
-  LEVEL_OP = 5;
-
-  LEVEL_ACCESS = 6;
-
-  TAB = '  ';
-
-  IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
-
-  IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$");
-
-  SIMPLENUM = /^[+-]?\d+$/;
-
-  METHOD_DEF = RegExp("^(?:(" + IDENTIFIER_STR + ")\\.prototype(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|(" + IDENTIFIER_STR + ")$");
-
-  IS_STRING = /^['"]/;
-
-  utility = function(name) {
-    var ref;
-    ref = "__" + name;
-    Scope.root.assign(ref, UTILITIES[name]());
-    return ref;
-  };
-
-  multident = function(code, tab) {
-    code = code.replace(/\n/g, '$&' + tab);
-    return code.replace(/\s+$/, '');
-  };
-
-
-});
-
-define('ace/mode/coffee/scope', ['require', 'exports', 'module' , 'ace/mode/coffee/helpers'], function(require, exports, module) {
-
-  var Scope, extend, last, _ref;
-
-  _ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
-
-  exports.Scope = Scope = (function() {
-    Scope.root = null;
-
-    function Scope(parent, expressions, method) {
-      this.parent = parent;
-      this.expressions = expressions;
-      this.method = method;
-      this.variables = [
-        {
-          name: 'arguments',
-          type: 'arguments'
-        }
-      ];
-      this.positions = {};
-      if (!this.parent) {
-        Scope.root = this;
-      }
-    }
-
-    Scope.prototype.add = function(name, type, immediate) {
-      if (this.shared && !immediate) {
-        return this.parent.add(name, type, immediate);
-      }
-      if (Object.prototype.hasOwnProperty.call(this.positions, name)) {
-        return this.variables[this.positions[name]].type = type;
-      } else {
-        return this.positions[name] = this.variables.push({
-          name: name,
-          type: type
-        }) - 1;
-      }
-    };
-
-    Scope.prototype.namedMethod = function() {
-      var _ref1;
-      if (((_ref1 = this.method) != null ? _ref1.name : void 0) || !this.parent) {
-        return this.method;
-      }
-      return this.parent.namedMethod();
-    };
-
-    Scope.prototype.find = function(name) {
-      if (this.check(name)) {
-        return true;
-      }
-      this.add(name, 'var');
-      return false;
-    };
-
-    Scope.prototype.parameter = function(name) {
-      if (this.shared && this.parent.check(name, true)) {
-        return;
-      }
-      return this.add(name, 'param');
-    };
-
-    Scope.prototype.check = function(name) {
-      var _ref1;
-      return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
-    };
-
-    Scope.prototype.temporary = function(name, index) {
-      if (name.length > 1) {
-        return '_' + name + (index > 1 ? index - 1 : '');
-      } else {
-        return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
-      }
-    };
-
-    Scope.prototype.type = function(name) {
-      var v, _i, _len, _ref1;
-      _ref1 = this.variables;
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        v = _ref1[_i];
-        if (v.name === name) {
-          return v.type;
-        }
-      }
-      return null;
-    };
-
-    Scope.prototype.freeVariable = function(name, reserve) {
-      var index, temp;
-      if (reserve == null) {
-        reserve = true;
-      }
-      index = 0;
-      while (this.check((temp = this.temporary(name, index)))) {
-        index++;
-      }
-      if (reserve) {
-        this.add(temp, 'var', true);
-      }
-      return temp;
-    };
-
-    Scope.prototype.assign = function(name, value) {
-      this.add(name, {
-        value: value,
-        assigned: true
-      }, true);
-      return this.hasAssignments = true;
-    };
-
-    Scope.prototype.hasDeclarations = function() {
-      return !!this.declaredVariables().length;
-    };
-
-    Scope.prototype.declaredVariables = function() {
-      var realVars, tempVars, v, _i, _len, _ref1;
-      realVars = [];
-      tempVars = [];
-      _ref1 = this.variables;
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        v = _ref1[_i];
-        if (v.type === 'var') {
-          (v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
-        }
-      }
-      return realVars.sort().concat(tempVars.sort());
-    };
-
-    Scope.prototype.assignedVariables = function() {
-      var v, _i, _len, _ref1, _results;
-      _ref1 = this.variables;
-      _results = [];
-      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
-        v = _ref1[_i];
-        if (v.type.assigned) {
-          _results.push("" + v.name + " = " + v.type.value);
-        }
-      }
-      return _results;
-    };
-
-    return Scope;
-
-  })();
-
-
-});
\ No newline at end of file
diff --git a/try/ace/worker-css.js b/try/ace/worker-css.js
deleted file mode 100644
index cd9036c..0000000
--- a/try/ace/worker-css.js
+++ /dev/null
@@ -1,8240 +0,0 @@
-"no use strict";
-;(function(window) {
-if (typeof window.window != "undefined" && window.document) {
-    return;
-}
-
-window.console = {
-    log: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    },
-    error: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    }
-};
-window.window = window;
-window.ace = window;
-
-window.normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-        
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-    
-    return moduleName;
-};
-
-window.require = function(parentId, id) {
-    if (!id) {
-        id = parentId
-        parentId = null;
-    }
-    if (!id.charAt)
-        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
-
-    id = normalizeModule(parentId, id);
-
-    var module = require.modules[id];
-    if (module) {
-        if (!module.initialized) {
-            module.initialized = true;
-            module.exports = module.factory().exports;
-        }
-        return module.exports;
-    }
-    
-    var chunks = id.split("/");
-    chunks[0] = require.tlns[chunks[0]] || chunks[0];
-    var path = chunks.join("/") + ".js";
-    
-    require.id = id;
-    importScripts(path);
-    return require(parentId, id);
-};
-
-require.modules = {};
-require.tlns = {};
-
-window.define = function(id, deps, factory) {
-    if (arguments.length == 2) {
-        factory = deps;
-        if (typeof id != "string") {
-            deps = id;
-            id = require.id;
-        }
-    } else if (arguments.length == 1) {
-        factory = id;
-        id = require.id;
-    }
-
-    if (id.indexOf("text!") === 0) 
-        return;
-    
-    var req = function(deps, factory) {
-        return require(id, deps, factory);
-    };
-
-    require.modules[id] = {
-        factory: function() {
-            var module = {
-                exports: {}
-            };
-            var returnExports = factory(req, module.exports, module);
-            if (returnExports)
-                module.exports = returnExports;
-            return module;
-        }
-    };
-};
-
-window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
-    require.tlns = topLevelNamespaces;
-}
-
-window.initSender = function initSender() {
-
-    var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
-    var oop = require("ace/lib/oop");
-    
-    var Sender = function() {};
-    
-    (function() {
-        
-        oop.implement(this, EventEmitter);
-                
-        this.callback = function(data, callbackId) {
-            postMessage({
-                type: "call",
-                id: callbackId,
-                data: data
-            });
-        };
-    
-        this.emit = function(name, data) {
-            postMessage({
-                type: "event",
-                name: name,
-                data: data
-            });
-        };
-        
-    }).call(Sender.prototype);
-    
-    return new Sender();
-}
-
-window.main = null;
-window.sender = null;
-
-window.onmessage = function(e) {
-    var msg = e.data;
-    if (msg.command) {
-        if (main[msg.command])
-            main[msg.command].apply(main, msg.args);
-        else
-            throw new Error("Unknown command:" + msg.command);
-    }
-    else if (msg.init) {        
-        initBaseUrls(msg.tlns);
-        require("ace/lib/es5-shim");
-        sender = initSender();
-        var clazz = require(msg.module)[msg.classname];
-        main = new clazz(sender);
-    } 
-    else if (msg.event && sender) {
-        sender._emit(msg.event, msg.data);
-    }
-};
-})(this);
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
-
-define('ace/mode/css_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/worker/mirror', 'ace/mode/css/csslint'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var lang = require("../lib/lang");
-var Mirror = require("../worker/mirror").Mirror;
-var CSSLint = require("./css/csslint").CSSLint;
-
-var Worker = exports.Worker = function(sender) {
-    Mirror.call(this, sender);
-    this.setTimeout(400);
-    this.ruleset = null;
-    this.setDisabledRules("ids");
-    this.setInfoRules("adjoining-classes|qualified-headings|zero-units|gradients|import|outline-none");
-};
-
-oop.inherits(Worker, Mirror);
-
-(function() {
-    this.setInfoRules = function(ruleNames) {
-        if (typeof ruleNames == "string")
-            ruleNames = ruleNames.split("|");
-        this.infoRules = lang.arrayToMap(ruleNames);
-        this.doc.getValue() && this.deferredUpdate.schedule(100);
-    };
-
-    this.setDisabledRules = function(ruleNames) {
-        if (!ruleNames) {
-            this.ruleset = null;
-        } else {
-            if (typeof ruleNames == "string")
-                ruleNames = ruleNames.split("|");
-            var all = {};
-
-            CSSLint.getRules().forEach(function(x){
-                all[x.id] = true;
-            });
-            ruleNames.forEach(function(x) {
-                delete all[x];
-            });
-            
-            this.ruleset = all;
-        }
-        this.doc.getValue() && this.deferredUpdate.schedule(100);
-    };
-
-    this.onUpdate = function() {
-        var value = this.doc.getValue();
-        var infoRules = this.infoRules;
-
-        var result = CSSLint.verify(value, this.ruleset);
-        this.sender.emit("csslint", result.messages.map(function(msg) {
-            return {
-                row: msg.line - 1,
-                column: msg.col - 1,
-                text: msg.message,
-                type: infoRules[msg.rule.id] ? "info" : msg.type
-            }
-        }));
-    };
-
-}).call(Worker.prototype);
-
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
-define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var Document = require("../document").Document;
-var lang = require("../lib/lang");
-    
-var Mirror = exports.Mirror = function(sender) {
-    this.sender = sender;
-    var doc = this.doc = new Document("");
-    
-    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
-    
-    var _self = this;
-    sender.on("change", function(e) {
-        doc.applyDeltas(e.data);
-        deferredUpdate.schedule(_self.$timeout);
-    });
-};
-
-(function() {
-    
-    this.$timeout = 500;
-    
-    this.setTimeout = function(timeout) {
-        this.$timeout = timeout;
-    };
-    
-    this.setValue = function(value) {
-        this.doc.setValue(value);
-        this.deferredUpdate.schedule(this.$timeout);
-    };
-    
-    this.getValue = function(callbackId) {
-        this.sender.callback(this.doc.getValue(), callbackId);
-    };
-    
-    this.onUpdate = function() {
-    };
-    
-}).call(Mirror.prototype);
-
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-define('ace/mode/css/csslint', ['require', 'exports', 'module' ], function(require, exports, module) {
-var parserlib = {};
-(function(){
-function EventTarget(){
-    this._listeners = {};    
-}
-
-EventTarget.prototype = {
-    constructor: EventTarget,
-    addListener: function(type, listener){
-        if (!this._listeners[type]){
-            this._listeners[type] = [];
-        }
-
-        this._listeners[type].push(listener);
-    },    
-    fire: function(event){
-        if (typeof event == "string"){
-            event = { type: event };
-        }
-        if (typeof event.target != "undefined"){
-            event.target = this;
-        }
-        
-        if (typeof event.type == "undefined"){
-            throw new Error("Event object missing 'type' property.");
-        }
-        
-        if (this._listeners[event.type]){
-            var listeners = this._listeners[event.type].concat();
-            for (var i=0, len=listeners.length; i < len; i++){
-                listeners[i].call(this, event);
-            }
-        }            
-    },
-    removeListener: function(type, listener){
-        if (this._listeners[type]){
-            var listeners = this._listeners[type];
-            for (var i=0, len=listeners.length; i < len; i++){
-                if (listeners[i] === listener){
-                    listeners.splice(i, 1);
-                    break;
-                }
-            }
-            
-            
-        }            
-    }
-};
-function StringReader(text){
-    this._input = text.replace(/\n\r?/g, "\n");
-    this._line = 1;
-    this._col = 1;
-    this._cursor = 0;
-}
-
-StringReader.prototype = {
-    constructor: StringReader,
-    getCol: function(){
-        return this._col;
-    },
-    getLine: function(){
-        return this._line ;
-    },
-    eof: function(){
-        return (this._cursor == this._input.length);
-    },
-    peek: function(count){
-        var c = null;
-        count = (typeof count == "undefined" ? 1 : count);
-        if (this._cursor < this._input.length){
-            c = this._input.charAt(this._cursor + count - 1);
-        }
-
-        return c;
-    },
-    read: function(){
-        var c = null;
-        if (this._cursor < this._input.length){
-            if (this._input.charAt(this._cursor) == "\n"){
-                this._line++;
-                this._col=1;
-            } else {
-                this._col++;
-            }
-            c = this._input.charAt(this._cursor++);
-        }
-
-        return c;
-    },
-    mark: function(){
-        this._bookmark = {
-            cursor: this._cursor,
-            line:   this._line,
-            col:    this._col
-        };
-    },
-
-    reset: function(){
-        if (this._bookmark){
-            this._cursor = this._bookmark.cursor;
-            this._line = this._bookmark.line;
-            this._col = this._bookmark.col;
-            delete this._bookmark;
-        }
-    },
-    readTo: function(pattern){
-
-        var buffer = "",
-            c;
-        while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){
-            c = this.read();
-            if (c){
-                buffer += c;
-            } else {
-                throw new Error("Expected \"" + pattern + "\" at line " + this._line  + ", col " + this._col + ".");
-            }
-        }
-
-        return buffer;
-
-    },
-    readWhile: function(filter){
-
-        var buffer = "",
-            c = this.read();
-
-        while(c !== null && filter(c)){
-            buffer += c;
-            c = this.read();
-        }
-
-        return buffer;
-
-    },
-    readMatch: function(matcher){
-
-        var source = this._input.substring(this._cursor),
-            value = null;
-        if (typeof matcher == "string"){
-            if (source.indexOf(matcher) === 0){
-                value = this.readCount(matcher.length);
-            }
-        } else if (matcher instanceof RegExp){
-            if (matcher.test(source)){
-                value = this.readCount(RegExp.lastMatch.length);
-            }
-        }
-
-        return value;
-    },
-    readCount: function(count){
-        var buffer = "";
-
-        while(count--){
-            buffer += this.read();
-        }
-
-        return buffer;
-    }
-
-};
-function SyntaxError(message, line, col){
-    this.col = col;
-    this.line = line;
-    this.message = message;
-
-}
-SyntaxError.prototype = new Error();
-function SyntaxUnit(text, line, col, type){
-    this.col = col;
-    this.line = line;
-    this.text = text;
-    this.type = type;
-}
-SyntaxUnit.fromToken = function(token){
-    return new SyntaxUnit(token.value, token.startLine, token.startCol);
-};
-
-SyntaxUnit.prototype = {
-    constructor: SyntaxUnit,
-    valueOf: function(){
-        return this.toString();
-    },
-    toString: function(){
-        return this.text;
-    }
-
-};
-function TokenStreamBase(input, tokenData){
-    this._reader = input ? new StringReader(input.toString()) : null;
-    this._token = null;
-    this._tokenData = tokenData;
-    this._lt = [];
-    this._ltIndex = 0;
-    
-    this._ltIndexCache = [];
-}
-TokenStreamBase.createTokenData = function(tokens){
-
-    var nameMap     = [],
-        typeMap     = {},
-        tokenData     = tokens.concat([]),
-        i            = 0,
-        len            = tokenData.length+1;
-    
-    tokenData.UNKNOWN = -1;
-    tokenData.unshift({name:"EOF"});
-
-    for (; i < len; i++){
-        nameMap.push(tokenData[i].name);
-        tokenData[tokenData[i].name] = i;
-        if (tokenData[i].text){
-            typeMap[tokenData[i].text] = i;
-        }
-    }
-    
-    tokenData.name = function(tt){
-        return nameMap[tt];
-    };
-    
-    tokenData.type = function(c){
-        return typeMap[c];
-    };
-    
-    return tokenData;
-};
-
-TokenStreamBase.prototype = {
-    constructor: TokenStreamBase,    
-    match: function(tokenTypes, channel){
-        if (!(tokenTypes instanceof Array)){
-            tokenTypes = [tokenTypes];
-        }
-                
-        var tt  = this.get(channel),
-            i   = 0,
-            len = tokenTypes.length;
-            
-        while(i < len){
-            if (tt == tokenTypes[i++]){
-                return true;
-            }
-        }
-        this.unget();
-        return false;
-    },        
-    mustMatch: function(tokenTypes, channel){
-
-        var token;
-        if (!(tokenTypes instanceof Array)){
-            tokenTypes = [tokenTypes];
-        }
-
-        if (!this.match.apply(this, arguments)){    
-            token = this.LT(1);
-            throw new SyntaxError("Expected " + this._tokenData[tokenTypes[0]].name + 
-                " at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol);
-        }
-    },
-    advance: function(tokenTypes, channel){
-        
-        while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){
-            this.get();
-        }
-
-        return this.LA(0);    
-    },      
-    get: function(channel){
-    
-        var tokenInfo   = this._tokenData,
-            reader      = this._reader,
-            value,
-            i           =0,
-            len         = tokenInfo.length,
-            found       = false,
-            token,
-            info;
-        if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){  
-                           
-            i++;
-            this._token = this._lt[this._ltIndex++];
-            info = tokenInfo[this._token.type];
-            while((info.channel !== undefined && channel !== info.channel) &&
-                    this._ltIndex < this._lt.length){
-                this._token = this._lt[this._ltIndex++];
-                info = tokenInfo[this._token.type];
-                i++;
-            }
-            if ((info.channel === undefined || channel === info.channel) &&
-                    this._ltIndex <= this._lt.length){
-                this._ltIndexCache.push(i);
-                return this._token.type;
-            }
-        }
-        token = this._getToken();
-        if (token.type > -1 && !tokenInfo[token.type].hide){
-            token.channel = tokenInfo[token.type].channel;
-            this._token = token;
-            this._lt.push(token);
-            this._ltIndexCache.push(this._lt.length - this._ltIndex + i);  
-            if (this._lt.length > 5){
-                this._lt.shift();                
-            }
-            if (this._ltIndexCache.length > 5){
-                this._ltIndexCache.shift();
-            }
-            this._ltIndex = this._lt.length;
-        }
-        info = tokenInfo[token.type];
-        if (info && 
-                (info.hide || 
-                (info.channel !== undefined && channel !== info.channel))){
-            return this.get(channel);
-        } else {
-            return token.type;
-        }
-    },
-    LA: function(index){
-        var total = index,
-            tt;
-        if (index > 0){
-            if (index > 5){
-                throw new Error("Too much lookahead.");
-            }
-            while(total){
-                tt = this.get();   
-                total--;                            
-            }
-            while(total < index){
-                this.unget();
-                total++;
-            }
-        } else if (index < 0){
-        
-            if(this._lt[this._ltIndex+index]){
-                tt = this._lt[this._ltIndex+index].type;
-            } else {
-                throw new Error("Too much lookbehind.");
-            }
-        
-        } else {
-            tt = this._token.type;
-        }
-        
-        return tt;
-    
-    },    
-    LT: function(index){
-        this.LA(index);
-        return this._lt[this._ltIndex+index-1];    
-    },
-    peek: function(){
-        return this.LA(1);
-    },
-    token: function(){
-        return this._token;
-    },
-    tokenName: function(tokenType){
-        if (tokenType < 0 || tokenType > this._tokenData.length){
-            return "UNKNOWN_TOKEN";
-        } else {
-            return this._tokenData[tokenType].name;
-        }
-    },    
-    tokenType: function(tokenName){
-        return this._tokenData[tokenName] || -1;
-    },      
-    unget: function(){
-        if (this._ltIndexCache.length){
-            this._ltIndex -= this._ltIndexCache.pop();//--;
-            this._token = this._lt[this._ltIndex - 1];
-        } else {
-            throw new Error("Too much lookahead.");
-        }
-    }
-
-};
-
-
-
-
-parserlib.util = {
-StringReader: StringReader,
-SyntaxError : SyntaxError,
-SyntaxUnit  : SyntaxUnit,
-EventTarget : EventTarget,
-TokenStreamBase : TokenStreamBase
-};
-})();
-(function(){
-var EventTarget = parserlib.util.EventTarget,
-TokenStreamBase = parserlib.util.TokenStreamBase,
-StringReader = parserlib.util.StringReader,
-SyntaxError = parserlib.util.SyntaxError,
-SyntaxUnit  = parserlib.util.SyntaxUnit;
-
-
-var Colors = {
-    aliceblue       :"#f0f8ff",
-    antiquewhite    :"#faebd7",
-    aqua            :"#00ffff",
-    aquamarine      :"#7fffd4",
-    azure           :"#f0ffff",
-    beige           :"#f5f5dc",
-    bisque          :"#ffe4c4",
-    black           :"#000000",
-    blanchedalmond  :"#ffebcd",
-    blue            :"#0000ff",
-    blueviolet      :"#8a2be2",
-    brown           :"#a52a2a",
-    burlywood       :"#deb887",
-    cadetblue       :"#5f9ea0",
-    chartreuse      :"#7fff00",
-    chocolate       :"#d2691e",
-    coral           :"#ff7f50",
-    cornflowerblue  :"#6495ed",
-    cornsilk        :"#fff8dc",
-    crimson         :"#dc143c",
-    cyan            :"#00ffff",
-    darkblue        :"#00008b",
-    darkcyan        :"#008b8b",
-    darkgoldenrod   :"#b8860b",
-    darkgray        :"#a9a9a9",
-    darkgreen       :"#006400",
-    darkkhaki       :"#bdb76b",
-    darkmagenta     :"#8b008b",
-    darkolivegreen  :"#556b2f",
-    darkorange      :"#ff8c00",
-    darkorchid      :"#9932cc",
-    darkred         :"#8b0000",
-    darksalmon      :"#e9967a",
-    darkseagreen    :"#8fbc8f",
-    darkslateblue   :"#483d8b",
-    darkslategray   :"#2f4f4f",
-    darkturquoise   :"#00ced1",
-    darkviolet      :"#9400d3",
-    deeppink        :"#ff1493",
-    deepskyblue     :"#00bfff",
-    dimgray         :"#696969",
-    dodgerblue      :"#1e90ff",
-    firebrick       :"#b22222",
-    floralwhite     :"#fffaf0",
-    forestgreen     :"#228b22",
-    fuchsia         :"#ff00ff",
-    gainsboro       :"#dcdcdc",
-    ghostwhite      :"#f8f8ff",
-    gold            :"#ffd700",
-    goldenrod       :"#daa520",
-    gray            :"#808080",
-    green           :"#008000",
-    greenyellow     :"#adff2f",
-    honeydew        :"#f0fff0",
-    hotpink         :"#ff69b4",
-    indianred       :"#cd5c5c",
-    indigo          :"#4b0082",
-    ivory           :"#fffff0",
-    khaki           :"#f0e68c",
-    lavender        :"#e6e6fa",
-    lavenderblush   :"#fff0f5",
-    lawngreen       :"#7cfc00",
-    lemonchiffon    :"#fffacd",
-    lightblue       :"#add8e6",
-    lightcoral      :"#f08080",
-    lightcyan       :"#e0ffff",
-    lightgoldenrodyellow  :"#fafad2",
-    lightgray       :"#d3d3d3",
-    lightgreen      :"#90ee90",
-    lightpink       :"#ffb6c1",
-    lightsalmon     :"#ffa07a",
-    lightseagreen   :"#20b2aa",
-    lightskyblue    :"#87cefa",
-    lightslategray  :"#778899",
-    lightsteelblue  :"#b0c4de",
-    lightyellow     :"#ffffe0",
-    lime            :"#00ff00",
-    limegreen       :"#32cd32",
-    linen           :"#faf0e6",
-    magenta         :"#ff00ff",
-    maroon          :"#800000",
-    mediumaquamarine:"#66cdaa",
-    mediumblue      :"#0000cd",
-    mediumorchid    :"#ba55d3",
-    mediumpurple    :"#9370d8",
-    mediumseagreen  :"#3cb371",
-    mediumslateblue :"#7b68ee",
-    mediumspringgreen   :"#00fa9a",
-    mediumturquoise :"#48d1cc",
-    mediumvioletred :"#c71585",
-    midnightblue    :"#191970",
-    mintcream       :"#f5fffa",
-    mistyrose       :"#ffe4e1",
-    moccasin        :"#ffe4b5",
-    navajowhite     :"#ffdead",
-    navy            :"#000080",
-    oldlace         :"#fdf5e6",
-    olive           :"#808000",
-    olivedrab       :"#6b8e23",
-    orange          :"#ffa500",
-    orangered       :"#ff4500",
-    orchid          :"#da70d6",
-    palegoldenrod   :"#eee8aa",
-    palegreen       :"#98fb98",
-    paleturquoise   :"#afeeee",
-    palevioletred   :"#d87093",
-    papayawhip      :"#ffefd5",
-    peachpuff       :"#ffdab9",
-    peru            :"#cd853f",
-    pink            :"#ffc0cb",
-    plum            :"#dda0dd",
-    powderblue      :"#b0e0e6",
-    purple          :"#800080",
-    red             :"#ff0000",
-    rosybrown       :"#bc8f8f",
-    royalblue       :"#4169e1",
-    saddlebrown     :"#8b4513",
-    salmon          :"#fa8072",
-    sandybrown      :"#f4a460",
-    seagreen        :"#2e8b57",
-    seashell        :"#fff5ee",
-    sienna          :"#a0522d",
-    silver          :"#c0c0c0",
-    skyblue         :"#87ceeb",
-    slateblue       :"#6a5acd",
-    slategray       :"#708090",
-    snow            :"#fffafa",
-    springgreen     :"#00ff7f",
-    steelblue       :"#4682b4",
-    tan             :"#d2b48c",
-    teal            :"#008080",
-    thistle         :"#d8bfd8",
-    tomato          :"#ff6347",
-    turquoise       :"#40e0d0",
-    violet          :"#ee82ee",
-    wheat           :"#f5deb3",
-    white           :"#ffffff",
-    whitesmoke      :"#f5f5f5",
-    yellow          :"#ffff00",
-    yellowgreen     :"#9acd32",
-    activeBorder        :"Active window border.",
-    activecaption       :"Active window caption.",
-    appworkspace        :"Background color of multiple document interface.",
-    background          :"Desktop background.",
-    buttonface          :"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.",
-    buttonhighlight     :"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.",
-    buttonshadow        :"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.",
-    buttontext          :"Text on push buttons.",
-    captiontext         :"Text in caption, size box, and scrollbar arrow box.",
-    graytext            :"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.",
-    highlight           :"Item(s) selected in a control.",
-    highlighttext       :"Text of item(s) selected in a control.",
-    inactiveborder      :"Inactive window border.",
-    inactivecaption     :"Inactive window caption.",
-    inactivecaptiontext :"Color of text in an inactive caption.",
-    infobackground      :"Background color for tooltip controls.",
-    infotext            :"Text color for tooltip controls.",
-    menu                :"Menu background.",
-    menutext            :"Text in menus.",
-    scrollbar           :"Scroll bar gray area.",
-    threeddarkshadow    :"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.",
-    threedface          :"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.",
-    threedhighlight     :"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.",
-    threedlightshadow   :"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.",
-    threedshadow        :"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.",
-    window              :"Window background.",
-    windowframe         :"Window frame.",
-    windowtext          :"Text in windows."
-};
-function Combinator(text, line, col){
-    
-    SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE);
-    this.type = "unknown";
-    if (/^\s+$/.test(text)){
-        this.type = "descendant";
-    } else if (text == ">"){
-        this.type = "child";
-    } else if (text == "+"){
-        this.type = "adjacent-sibling";
-    } else if (text == "~"){
-        this.type = "sibling";
-    }
-
-}
-
-Combinator.prototype = new SyntaxUnit();
-Combinator.prototype.constructor = Combinator;
-function MediaFeature(name, value){
-    
-    SyntaxUnit.call(this, "(" + name + (value !== null ? ":" + value : "") + ")", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE);
-    this.name = name;
-    this.value = value;
-}
-
-MediaFeature.prototype = new SyntaxUnit();
-MediaFeature.prototype.constructor = MediaFeature;
-function MediaQuery(modifier, mediaType, features, line, col){
-    
-    SyntaxUnit.call(this, (modifier ? modifier + " ": "") + (mediaType ? mediaType : "") + (mediaType && features.length > 0 ? " and " : "") + features.join(" and "), line, col, Parser.MEDIA_QUERY_TYPE);
-    this.modifier = modifier;
-    this.mediaType = mediaType;
-    this.features = features;
-
-}
-
-MediaQuery.prototype = new SyntaxUnit();
-MediaQuery.prototype.constructor = MediaQuery;
-function Parser(options){
-    EventTarget.call(this);
-
-
-    this.options = options || {};
-
-    this._tokenStream = null;
-}
-Parser.DEFAULT_TYPE = 0;
-Parser.COMBINATOR_TYPE = 1;
-Parser.MEDIA_FEATURE_TYPE = 2;
-Parser.MEDIA_QUERY_TYPE = 3;
-Parser.PROPERTY_NAME_TYPE = 4;
-Parser.PROPERTY_VALUE_TYPE = 5;
-Parser.PROPERTY_VALUE_PART_TYPE = 6;
-Parser.SELECTOR_TYPE = 7;
-Parser.SELECTOR_PART_TYPE = 8;
-Parser.SELECTOR_SUB_PART_TYPE = 9;
-
-Parser.prototype = function(){
-
-    var proto = new EventTarget(),  //new prototype
-        prop,
-        additions =  {
-            constructor: Parser,
-            DEFAULT_TYPE : 0,
-            COMBINATOR_TYPE : 1,
-            MEDIA_FEATURE_TYPE : 2,
-            MEDIA_QUERY_TYPE : 3,
-            PROPERTY_NAME_TYPE : 4,
-            PROPERTY_VALUE_TYPE : 5,
-            PROPERTY_VALUE_PART_TYPE : 6,
-            SELECTOR_TYPE : 7,
-            SELECTOR_PART_TYPE : 8,
-            SELECTOR_SUB_PART_TYPE : 9,            
-        
-            _stylesheet: function(){ 
-               
-                var tokenStream = this._tokenStream,
-                    charset     = null,
-                    count,
-                    token,
-                    tt;
-                    
-                this.fire("startstylesheet");
-                this._charset();
-                
-                this._skipCruft();
-                while (tokenStream.peek() == Tokens.IMPORT_SYM){
-                    this._import();
-                    this._skipCruft();
-                }
-                while (tokenStream.peek() == Tokens.NAMESPACE_SYM){
-                    this._namespace();
-                    this._skipCruft();
-                }
-                tt = tokenStream.peek();
-                while(tt > Tokens.EOF){
-                
-                    try {
-                
-                        switch(tt){
-                            case Tokens.MEDIA_SYM:
-                                this._media();
-                                this._skipCruft();
-                                break;
-                            case Tokens.PAGE_SYM:
-                                this._page(); 
-                                this._skipCruft();
-                                break;                   
-                            case Tokens.FONT_FACE_SYM:
-                                this._font_face(); 
-                                this._skipCruft();
-                                break;  
-                            case Tokens.KEYFRAMES_SYM:
-                                this._keyframes(); 
-                                this._skipCruft();
-                                break;                                
-                            case Tokens.UNKNOWN_SYM:  //unknown @ rule
-                                tokenStream.get();
-                                if (!this.options.strict){
-                                    this.fire({
-                                        type:       "error",
-                                        error:      null,
-                                        message:    "Unknown @ rule: " + tokenStream.LT(0).value + ".",
-                                        line:       tokenStream.LT(0).startLine,
-                                        col:        tokenStream.LT(0).startCol
-                                    });                          
-                                    count=0;
-                                    while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){
-                                        count++;    //keep track of nesting depth
-                                    }
-                                    
-                                    while(count){
-                                        tokenStream.advance([Tokens.RBRACE]);
-                                        count--;
-                                    }
-                                    
-                                } else {
-                                    throw new SyntaxError("Unknown @ rule.", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol);
-                                }                                
-                                break;
-                            case Tokens.S:
-                                this._readWhitespace();
-                                break;
-                            default:                            
-                                if(!this._ruleset()){
-                                    switch(tt){
-                                        case Tokens.CHARSET_SYM:
-                                            token = tokenStream.LT(1);
-                                            this._charset(false);
-                                            throw new SyntaxError("@charset not allowed here.", token.startLine, token.startCol);
-                                        case Tokens.IMPORT_SYM:
-                                            token = tokenStream.LT(1);
-                                            this._import(false);
-                                            throw new SyntaxError("@import not allowed here.", token.startLine, token.startCol);
-                                        case Tokens.NAMESPACE_SYM:
-                                            token = tokenStream.LT(1);
-                                            this._namespace(false);
-                                            throw new SyntaxError("@namespace not allowed here.", token.startLine, token.startCol);
-                                        default:
-                                            tokenStream.get();  //get the last token
-                                            this._unexpectedToken(tokenStream.token());
-                                    }
-                                
-                                }
-                        }
-                    } catch(ex) {
-                        if (ex instanceof SyntaxError && !this.options.strict){
-                            this.fire({
-                                type:       "error",
-                                error:      ex,
-                                message:    ex.message,
-                                line:       ex.line,
-                                col:        ex.col
-                            });                     
-                        } else {
-                            throw ex;
-                        }
-                    }
-                    
-                    tt = tokenStream.peek();
-                }
-                
-                if (tt != Tokens.EOF){
-                    this._unexpectedToken(tokenStream.token());
-                }
-            
-                this.fire("endstylesheet");
-            },
-            
-            _charset: function(emit){
-                var tokenStream = this._tokenStream,
-                    charset,
-                    token,
-                    line,
-                    col;
-                    
-                if (tokenStream.match(Tokens.CHARSET_SYM)){
-                    line = tokenStream.token().startLine;
-                    col = tokenStream.token().startCol;
-                
-                    this._readWhitespace();
-                    tokenStream.mustMatch(Tokens.STRING);
-                    
-                    token = tokenStream.token();
-                    charset = token.value;
-                    
-                    this._readWhitespace();
-                    tokenStream.mustMatch(Tokens.SEMICOLON);
-                    
-                    if (emit !== false){
-                        this.fire({ 
-                            type:   "charset",
-                            charset:charset,
-                            line:   line,
-                            col:    col
-                        });
-                    }
-                }            
-            },
-            
-            _import: function(emit){    
-            
-                var tokenStream = this._tokenStream,
-                    tt,
-                    uri,
-                    importToken,
-                    mediaList   = [];
-                tokenStream.mustMatch(Tokens.IMPORT_SYM);
-                importToken = tokenStream.token();
-                this._readWhitespace();
-                
-                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);
-                uri = tokenStream.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1");                
-
-                this._readWhitespace();
-                
-                mediaList = this._media_query_list();
-                tokenStream.mustMatch(Tokens.SEMICOLON);
-                this._readWhitespace();
-                
-                if (emit !== false){
-                    this.fire({
-                        type:   "import",
-                        uri:    uri,
-                        media:  mediaList,
-                        line:   importToken.startLine,
-                        col:    importToken.startCol
-                    });
-                }
-        
-            },
-            
-            _namespace: function(emit){    
-            
-                var tokenStream = this._tokenStream,
-                    line,
-                    col,
-                    prefix,
-                    uri;
-                tokenStream.mustMatch(Tokens.NAMESPACE_SYM);
-                line = tokenStream.token().startLine;
-                col = tokenStream.token().startCol;
-                this._readWhitespace();
-                if (tokenStream.match(Tokens.IDENT)){
-                    prefix = tokenStream.token().value;
-                    this._readWhitespace();
-                }
-                
-                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);
-                uri = tokenStream.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1");                
-
-                this._readWhitespace();
-                tokenStream.mustMatch(Tokens.SEMICOLON);
-                this._readWhitespace();
-                
-                if (emit !== false){
-                    this.fire({
-                        type:   "namespace",
-                        prefix: prefix,
-                        uri:    uri,
-                        line:   line,
-                        col:    col
-                    });
-                }
-        
-            },            
-                       
-            _media: function(){
-                var tokenStream     = this._tokenStream,
-                    line,
-                    col,
-                    mediaList;//       = [];
-                tokenStream.mustMatch(Tokens.MEDIA_SYM);
-                line = tokenStream.token().startLine;
-                col = tokenStream.token().startCol;
-                
-                this._readWhitespace();               
-
-                mediaList = this._media_query_list();
-
-                tokenStream.mustMatch(Tokens.LBRACE);
-                this._readWhitespace();
-                
-                this.fire({
-                    type:   "startmedia",
-                    media:  mediaList,
-                    line:   line,
-                    col:    col
-                });
-                
-                while(true) {
-                    if (tokenStream.peek() == Tokens.PAGE_SYM){
-                        this._page();
-                    } else if (!this._ruleset()){
-                        break;
-                    }                
-                }
-                
-                tokenStream.mustMatch(Tokens.RBRACE);
-                this._readWhitespace();
-        
-                this.fire({
-                    type:   "endmedia",
-                    media:  mediaList,
-                    line:   line,
-                    col:    col
-                });
-            },                           
-            _media_query_list: function(){
-                var tokenStream = this._tokenStream,
-                    mediaList   = [];
-                
-                
-                this._readWhitespace();
-                
-                if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){
-                    mediaList.push(this._media_query());
-                }
-                
-                while(tokenStream.match(Tokens.COMMA)){
-                    this._readWhitespace();
-                    mediaList.push(this._media_query());
-                }
-                
-                return mediaList;
-            },
-            _media_query: function(){
-                var tokenStream = this._tokenStream,
-                    type        = null,
-                    ident       = null,
-                    token       = null,
-                    expressions = [];
-                    
-                if (tokenStream.match(Tokens.IDENT)){
-                    ident = tokenStream.token().value.toLowerCase();
-                    if (ident != "only" && ident != "not"){
-                        tokenStream.unget();
-                        ident = null;
-                    } else {
-                        token = tokenStream.token();
-                    }
-                }
-                                
-                this._readWhitespace();
-                
-                if (tokenStream.peek() == Tokens.IDENT){
-                    type = this._media_type();
-                    if (token === null){
-                        token = tokenStream.token();
-                    }
-                } else if (tokenStream.peek() == Tokens.LPAREN){
-                    if (token === null){
-                        token = tokenStream.LT(1);
-                    }
-                    expressions.push(this._media_expression());
-                }                               
-                
-                if (type === null && expressions.length === 0){
-                    return null;
-                } else {                
-                    this._readWhitespace();
-                    while (tokenStream.match(Tokens.IDENT)){
-                        if (tokenStream.token().value.toLowerCase() != "and"){
-                            this._unexpectedToken(tokenStream.token());
-                        }
-                        
-                        this._readWhitespace();
-                        expressions.push(this._media_expression());
-                    }
-                }
-
-                return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);
-            },
-            _media_type: function(){
-                return this._media_feature();           
-            },
-            _media_expression: function(){
-                var tokenStream = this._tokenStream,
-                    feature     = null,
-                    token,
-                    expression  = null;
-                
-                tokenStream.mustMatch(Tokens.LPAREN);
-                
-                feature = this._media_feature();
-                this._readWhitespace();
-                
-                if (tokenStream.match(Tokens.COLON)){
-                    this._readWhitespace();
-                    token = tokenStream.LT(1);
-                    expression = this._expression();
-                }
-                
-                tokenStream.mustMatch(Tokens.RPAREN);
-                this._readWhitespace();
-
-                return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null));            
-            },
-            _media_feature: function(){
-                var tokenStream = this._tokenStream;
-                    
-                tokenStream.mustMatch(Tokens.IDENT);
-                
-                return SyntaxUnit.fromToken(tokenStream.token());            
-            },
-            _page: function(){            
-                var tokenStream = this._tokenStream,
-                    line,
-                    col,
-                    identifier  = null,
-                    pseudoPage  = null;
-                tokenStream.mustMatch(Tokens.PAGE_SYM);
-                line = tokenStream.token().startLine;
-                col = tokenStream.token().startCol;
-                
-                this._readWhitespace();
-                
-                if (tokenStream.match(Tokens.IDENT)){
-                    identifier = tokenStream.token().value;
-                    if (identifier.toLowerCase() === "auto"){
-                        this._unexpectedToken(tokenStream.token());
-                    }
-                }                
-                if (tokenStream.peek() == Tokens.COLON){
-                    pseudoPage = this._pseudo_page();
-                }
-            
-                this._readWhitespace();
-                
-                this.fire({
-                    type:   "startpage",
-                    id:     identifier,
-                    pseudo: pseudoPage,
-                    line:   line,
-                    col:    col
-                });                   
-
-                this._readDeclarations(true, true);                
-                
-                this.fire({
-                    type:   "endpage",
-                    id:     identifier,
-                    pseudo: pseudoPage,
-                    line:   line,
-                    col:    col
-                });             
-            
-            },
-            _margin: function(){
-                var tokenStream = this._tokenStream,
-                    line,
-                    col,
-                    marginSym   = this._margin_sym();
-
-                if (marginSym){
-                    line = tokenStream.token().startLine;
-                    col = tokenStream.token().startCol;
-                
-                    this.fire({
-                        type: "startpagemargin",
-                        margin: marginSym,
-                        line:   line,
-                        col:    col
-                    });    
-                    
-                    this._readDeclarations(true);
-
-                    this.fire({
-                        type: "endpagemargin",
-                        margin: marginSym,
-                        line:   line,
-                        col:    col
-                    });    
-                    return true;
-                } else {
-                    return false;
-                }
-            },
-            _margin_sym: function(){
-            
-                var tokenStream = this._tokenStream;
-            
-                if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,
-                        Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,
-                        Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM, 
-                        Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,
-                        Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM, 
-                        Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,
-                        Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM]))
-                {
-                    return SyntaxUnit.fromToken(tokenStream.token());                
-                } else {
-                    return null;
-                }
-            
-            },
-            
-            _pseudo_page: function(){
-        
-                var tokenStream = this._tokenStream;
-                
-                tokenStream.mustMatch(Tokens.COLON);
-                tokenStream.mustMatch(Tokens.IDENT);
-                
-                return tokenStream.token().value;
-            },
-            
-            _font_face: function(){     
-                var tokenStream = this._tokenStream,
-                    line,
-                    col;
-                tokenStream.mustMatch(Tokens.FONT_FACE_SYM);
-                line = tokenStream.token().startLine;
-                col = tokenStream.token().startCol;
-                
-                this._readWhitespace();
-
-                this.fire({
-                    type:   "startfontface",
-                    line:   line,
-                    col:    col
-                });                    
-                
-                this._readDeclarations(true);
-                
-                this.fire({
-                    type:   "endfontface",
-                    line:   line,
-                    col:    col
-                });              
-            },
-
-            _operator: function(inFunction){    
-                 
-                var tokenStream = this._tokenStream,
-                    token       = null;
-                
-                if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) ||
-                    (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){
-                    token =  tokenStream.token();
-                    this._readWhitespace();
-                } 
-                return token ? PropertyValuePart.fromToken(token) : null;
-                
-            },
-            
-            _combinator: function(){    
-                 
-                var tokenStream = this._tokenStream,
-                    value       = null,
-                    token;
-                
-                if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){                
-                    token = tokenStream.token();
-                    value = new Combinator(token.value, token.startLine, token.startCol);
-                    this._readWhitespace();
-                }
-                
-                return value;
-            },
-            
-            _unary_operator: function(){
-                 
-                var tokenStream = this._tokenStream;
-                
-                if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){
-                    return tokenStream.token().value;
-                } else {
-                    return null;
-                }         
-            },
-            
-            _property: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    value       = null,
-                    hack        = null,
-                    tokenValue,
-                    token,
-                    line,
-                    col;
-                if (tokenStream.peek() == Tokens.STAR && this.options.starHack){
-                    tokenStream.get();
-                    token = tokenStream.token();
-                    hack = token.value;
-                    line = token.startLine;
-                    col = token.startCol;
-                }
-                
-                if(tokenStream.match(Tokens.IDENT)){
-                    token = tokenStream.token();
-                    tokenValue = token.value;
-                    if (tokenValue.charAt(0) == "_" && this.options.underscoreHack){
-                        hack = "_";
-                        tokenValue = tokenValue.substring(1);
-                    }
-                    
-                    value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol));
-                    this._readWhitespace();
-                }
-                
-                return value;
-            },
-            _ruleset: function(){    
-                 
-                var tokenStream = this._tokenStream,
-                    tt,
-                    selectors;
-                try {
-                    selectors = this._selectors_group();
-                } catch (ex){
-                    if (ex instanceof SyntaxError && !this.options.strict){
-                        this.fire({
-                            type:       "error",
-                            error:      ex,
-                            message:    ex.message,
-                            line:       ex.line,
-                            col:        ex.col
-                        });                          
-                        tt = tokenStream.advance([Tokens.RBRACE]);
-                        if (tt == Tokens.RBRACE){
-                        } else {
-                            throw ex;
-                        }                        
-                        
-                    } else {
-                        throw ex;
-                    }                
-                    return true;
-                }
-                if (selectors){ 
-                                    
-                    this.fire({
-                        type:       "startrule",
-                        selectors:  selectors,
-                        line:       selectors[0].line,
-                        col:        selectors[0].col
-                    });                
-                    
-                    this._readDeclarations(true);                
-                    
-                    this.fire({
-                        type:       "endrule",
-                        selectors:  selectors,
-                        line:       selectors[0].line,
-                        col:        selectors[0].col
-                    });  
-                    
-                }
-                
-                return selectors;
-                
-            },
-            _selectors_group: function(){           
-                var tokenStream = this._tokenStream,
-                    selectors   = [],
-                    selector;
-                    
-                selector = this._selector();
-                if (selector !== null){
-                
-                    selectors.push(selector);
-                    while(tokenStream.match(Tokens.COMMA)){
-                        this._readWhitespace();
-                        selector = this._selector();
-                        if (selector !== null){
-                            selectors.push(selector);
-                        } else {
-                            this._unexpectedToken(tokenStream.LT(1));
-                        }
-                    }
-                }
-
-                return selectors.length ? selectors : null;
-            },
-            _selector: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    selector    = [],
-                    nextSelector = null,
-                    combinator  = null,
-                    ws          = null;
-                nextSelector = this._simple_selector_sequence();
-                if (nextSelector === null){
-                    return null;
-                }
-                
-                selector.push(nextSelector);
-                
-                do {
-                    combinator = this._combinator();
-                    
-                    if (combinator !== null){
-                        selector.push(combinator);
-                        nextSelector = this._simple_selector_sequence();
-                        if (nextSelector === null){
-                            this._unexpectedToken(tokenStream.LT(1));
-                        } else {
-                            selector.push(nextSelector);
-                        }
-                    } else {
-                        if (this._readWhitespace()){           
-                            ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol);
-                            combinator = this._combinator();
-                            nextSelector = this._simple_selector_sequence();
-                            if (nextSelector === null){                        
-                                if (combinator !== null){
-                                    this._unexpectedToken(tokenStream.LT(1));
-                                }
-                            } else {
-                                
-                                if (combinator !== null){
-                                    selector.push(combinator);
-                                } else {
-                                    selector.push(ws);
-                                }
-                                
-                                selector.push(nextSelector);
-                            }     
-                        } else {
-                            break;
-                        }               
-                    
-                    }
-                } while(true);
-                
-                return new Selector(selector, selector[0].line, selector[0].col);
-            },
-            _simple_selector_sequence: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    elementName = null,
-                    modifiers   = [],
-                    selectorText= "",
-                    components  = [
-                        function(){
-                            return tokenStream.match(Tokens.HASH) ?
-                                    new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) :
-                                    null;
-                        },
-                        this._class,
-                        this._attrib,
-                        this._pseudo,
-                        this._negation
-                    ],
-                    i           = 0,
-                    len         = components.length,
-                    component   = null,
-                    found       = false,
-                    line,
-                    col;
-                line = tokenStream.LT(1).startLine;
-                col = tokenStream.LT(1).startCol;
-                                        
-                elementName = this._type_selector();
-                if (!elementName){
-                    elementName = this._universal();
-                }
-                
-                if (elementName !== null){
-                    selectorText += elementName;
-                }                
-                
-                while(true){
-                    if (tokenStream.peek() === Tokens.S){
-                        break;
-                    }
-                    while(i < len && component === null){
-                        component = components[i++].call(this);
-                    }
-        
-                    if (component === null){
-                        if (selectorText === ""){
-                            return null;
-                        } else {
-                            break;
-                        }
-                    } else {
-                        i = 0;
-                        modifiers.push(component);
-                        selectorText += component.toString(); 
-                        component = null;
-                    }
-                }
-
-                 
-                return selectorText !== "" ?
-                        new SelectorPart(elementName, modifiers, selectorText, line, col) :
-                        null;
-            },            
-            _type_selector: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    ns          = this._namespace_prefix(),
-                    elementName = this._element_name();
-                    
-                if (!elementName){                    
-                    if (ns){
-                        tokenStream.unget();
-                        if (ns.length > 1){
-                            tokenStream.unget();
-                        }
-                    }
-                
-                    return null;
-                } else {     
-                    if (ns){
-                        elementName.text = ns + elementName.text;
-                        elementName.col -= ns.length;
-                    }
-                    return elementName;
-                }
-            },
-            _class: function(){    
-                 
-                var tokenStream = this._tokenStream,
-                    token;
-                
-                if (tokenStream.match(Tokens.DOT)){
-                    tokenStream.mustMatch(Tokens.IDENT);    
-                    token = tokenStream.token();
-                    return new SelectorSubPart("." + token.value, "class", token.startLine, token.startCol - 1);        
-                } else {
-                    return null;
-                }
-        
-            },
-            _element_name: function(){    
-                
-                var tokenStream = this._tokenStream,
-                    token;
-                
-                if (tokenStream.match(Tokens.IDENT)){
-                    token = tokenStream.token();
-                    return new SelectorSubPart(token.value, "elementName", token.startLine, token.startCol);        
-                
-                } else {
-                    return null;
-                }
-            },
-            _namespace_prefix: function(){
-                var tokenStream = this._tokenStream,
-                    value       = "";
-                if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){
-                        
-                    if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){
-                        value += tokenStream.token().value;
-                    }
-                    
-                    tokenStream.mustMatch(Tokens.PIPE);
-                    value += "|";
-                    
-                }
-                
-                return value.length ? value : null;                
-            },
-            _universal: function(){
-                var tokenStream = this._tokenStream,
-                    value       = "",
-                    ns;
-                    
-                ns = this._namespace_prefix();
-                if(ns){
-                    value += ns;
-                }
-                
-                if(tokenStream.match(Tokens.STAR)){
-                    value += "*";
-                }
-                
-                return value.length ? value : null;
-                
-           },
-            _attrib: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    value       = null,
-                    ns,
-                    token;
-                
-                if (tokenStream.match(Tokens.LBRACKET)){
-                    token = tokenStream.token();
-                    value = token.value;
-                    value += this._readWhitespace();
-                    
-                    ns = this._namespace_prefix();
-                    
-                    if (ns){
-                        value += ns;
-                    }
-                                        
-                    tokenStream.mustMatch(Tokens.IDENT);
-                    value += tokenStream.token().value;                    
-                    value += this._readWhitespace();
-                    
-                    if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH,
-                            Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){
-                    
-                        value += tokenStream.token().value;                    
-                        value += this._readWhitespace();
-                        
-                        tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);
-                        value += tokenStream.token().value;                    
-                        value += this._readWhitespace();
-                    }
-                    
-                    tokenStream.mustMatch(Tokens.RBRACKET);
-                                        
-                    return new SelectorSubPart(value + "]", "attribute", token.startLine, token.startCol);
-                } else {
-                    return null;
-                }
-            },
-            _pseudo: function(){   
-            
-                var tokenStream = this._tokenStream,
-                    pseudo      = null,
-                    colons      = ":",
-                    line,
-                    col;
-                
-                if (tokenStream.match(Tokens.COLON)){
-                
-                    if (tokenStream.match(Tokens.COLON)){
-                        colons += ":";
-                    }
-                
-                    if (tokenStream.match(Tokens.IDENT)){
-                        pseudo = tokenStream.token().value;
-                        line = tokenStream.token().startLine;
-                        col = tokenStream.token().startCol - colons.length;
-                    } else if (tokenStream.peek() == Tokens.FUNCTION){
-                        line = tokenStream.LT(1).startLine;
-                        col = tokenStream.LT(1).startCol - colons.length;
-                        pseudo = this._functional_pseudo();
-                    }
-                    
-                    if (pseudo){
-                        pseudo = new SelectorSubPart(colons + pseudo, "pseudo", line, col);
-                    }
-                }
-        
-                return pseudo;
-            },
-            _functional_pseudo: function(){            
-                
-                var tokenStream = this._tokenStream,
-                    value = null;
-                
-                if(tokenStream.match(Tokens.FUNCTION)){
-                    value = tokenStream.token().value;
-                    value += this._readWhitespace();
-                    value += this._expression();
-                    tokenStream.mustMatch(Tokens.RPAREN);
-                    value += ")";
-                }
-                
-                return value;
-            },
-            _expression: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    value       = "";
-                    
-                while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION,
-                        Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH,
-                        Tokens.FREQ, Tokens.ANGLE, Tokens.TIME,
-                        Tokens.RESOLUTION, Tokens.SLASH])){
-                    
-                    value += tokenStream.token().value;
-                    value += this._readWhitespace();                        
-                }
-                
-                return value.length ? value : null;
-                
-            },
-            _negation: function(){
-
-                var tokenStream = this._tokenStream,
-                    line,
-                    col,
-                    value       = "",
-                    arg,
-                    subpart     = null;
-                    
-                if (tokenStream.match(Tokens.NOT)){
-                    value = tokenStream.token().value;
-                    line = tokenStream.token().startLine;
-                    col = tokenStream.token().startCol;
-                    value += this._readWhitespace();
-                    arg = this._negation_arg();
-                    value += arg;
-                    value += this._readWhitespace();
-                    tokenStream.match(Tokens.RPAREN);
-                    value += tokenStream.token().value;
-                    
-                    subpart = new SelectorSubPart(value, "not", line, col);
-                    subpart.args.push(arg);
-                }
-                
-                return subpart;
-            },
-            _negation_arg: function(){                       
-                 
-                var tokenStream = this._tokenStream,
-                    args        = [
-                        this._type_selector,
-                        this._universal,
-                        function(){
-                            return tokenStream.match(Tokens.HASH) ?
-                                    new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) :
-                                    null;                        
-                        },
-                        this._class,
-                        this._attrib,
-                        this._pseudo                    
-                    ],
-                    arg         = null,
-                    i           = 0,
-                    len         = args.length,
-                    elementName,
-                    line,
-                    col,
-                    part;
-                    
-                line = tokenStream.LT(1).startLine;
-                col = tokenStream.LT(1).startCol;
-                
-                while(i < len && arg === null){
-                    
-                    arg = args[i].call(this);
-                    i++;
-                }
-                if (arg === null){
-                    this._unexpectedToken(tokenStream.LT(1));
-                }
-                if (arg.type == "elementName"){
-                    part = new SelectorPart(arg, [], arg.toString(), line, col);
-                } else {
-                    part = new SelectorPart(null, [arg], arg.toString(), line, col);
-                }
-                
-                return part;                
-            },
-            
-            _declaration: function(){    
-            
-                var tokenStream = this._tokenStream,
-                    property    = null,
-                    expr        = null,
-                    prio        = null,
-                    error       = null,
-                    invalid     = null,
-                    propertyName= "";
-                
-                property = this._property();
-                if (property !== null){
-
-                    tokenStream.mustMatch(Tokens.COLON);
-                    this._readWhitespace();
-                    
-                    expr = this._expr();
-                    if (!expr || expr.length === 0){
-                        this._unexpectedToken(tokenStream.LT(1));
-                    }
-                    
-                    prio = this._prio();
-                    propertyName = property.toString();
-                    if (this.options.starHack && property.hack == "*" ||
-                            this.options.underscoreHack && property.hack == "_") {
-                         
-                        propertyName = property.text;
-                    }
-                    
-                    try {
-                        this._validateProperty(propertyName, expr);
-                    } catch (ex) {
-                        invalid = ex;
-                    }
-                    
-                    this.fire({
-                        type:       "property",
-                        property:   property,
-                        value:      expr,
-                        important:  prio,
-                        line:       property.line,
-                        col:        property.col,
-                        invalid:    invalid
-                    });                      
-                    
-                    return true;
-                } else {
-                    return false;
-                }
-            },
-            
-            _prio: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    result      = tokenStream.match(Tokens.IMPORTANT_SYM);
-                    
-                this._readWhitespace();
-                return result;
-            },
-            
-            _expr: function(inFunction){
-        
-                var tokenStream = this._tokenStream,
-                    values      = [],
-                    value       = null,
-                    operator    = null;
-                    
-                value = this._term();
-                if (value !== null){
-                
-                    values.push(value);
-                    
-                    do {
-                        operator = this._operator(inFunction);
-                        if (operator){
-                            values.push(operator);
-                        } /*else {
-							values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));
-							valueParts = [];
-						}*/
-                        
-                        value = this._term();
-                        
-                        if (value === null){
-                            break;
-                        } else {
-                            values.push(value);
-                        }
-                    } while(true);
-                }
-        
-                return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null;
-            },
-            
-            _term: function(){                           
-        
-                var tokenStream = this._tokenStream,
-                    unary       = null,
-                    value       = null,
-                    token,
-                    line,
-                    col;
-                unary = this._unary_operator();
-                if (unary !== null){
-                    line = tokenStream.token().startLine;
-                    col = tokenStream.token().startCol;
-                }                
-                if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){
-                
-                    value = this._ie_function();
-                    if (unary === null){
-                        line = tokenStream.token().startLine;
-                        col = tokenStream.token().startCol;
-                    }
-                } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH,
-                        Tokens.ANGLE, Tokens.TIME,
-                        Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){
-                 
-                    value = tokenStream.token().value;
-                    if (unary === null){
-                        line = tokenStream.token().startLine;
-                        col = tokenStream.token().startCol;
-                    }
-                    this._readWhitespace();
-                } else {
-                    token = this._hexcolor();
-                    if (token === null){
-                        if (unary === null){
-                            line = tokenStream.LT(1).startLine;
-                            col = tokenStream.LT(1).startCol;
-                        }                    
-                        if (value === null){
-                            if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){
-                                value = this._ie_function();
-                            } else {
-                                value = this._function();
-                            }
-                        }
-                    
-                    } else {
-                        value = token.value;
-                        if (unary === null){
-                            line = token.startLine;
-                            col = token.startCol;
-                        }                    
-                    }
-                
-                }                
-                
-                return value !== null ?
-                        new PropertyValuePart(unary !== null ? unary + value : value, line, col) :
-                        null;
-        
-            },
-            
-            _function: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    functionText = null,
-                    expr        = null,
-                    lt;
-                    
-                if (tokenStream.match(Tokens.FUNCTION)){
-                    functionText = tokenStream.token().value;
-                    this._readWhitespace();
-                    expr = this._expr(true);
-                    functionText += expr;
-                    if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){
-                        do {
-                        
-                            if (this._readWhitespace()){
-                                functionText += tokenStream.token().value;
-                            }
-                            if (tokenStream.LA(0) == Tokens.COMMA){
-                                functionText += tokenStream.token().value;
-                            }
-                        
-                            tokenStream.match(Tokens.IDENT);
-                            functionText += tokenStream.token().value;
-                            
-                            tokenStream.match(Tokens.EQUALS);
-                            functionText += tokenStream.token().value;
-                            lt = tokenStream.peek();
-                            while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){
-                                tokenStream.get();
-                                functionText += tokenStream.token().value;
-                                lt = tokenStream.peek();
-                            }
-                        } while(tokenStream.match([Tokens.COMMA, Tokens.S]));
-                    }
-                    
-                    tokenStream.match(Tokens.RPAREN);    
-                    functionText += ")";
-                    this._readWhitespace();
-                }                
-                
-                return functionText;
-            }, 
-            
-            _ie_function: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    functionText = null,
-                    expr        = null,
-                    lt;
-                if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){
-                    functionText = tokenStream.token().value;
-                    
-                    do {
-                    
-                        if (this._readWhitespace()){
-                            functionText += tokenStream.token().value;
-                        }
-                        if (tokenStream.LA(0) == Tokens.COMMA){
-                            functionText += tokenStream.token().value;
-                        }
-                    
-                        tokenStream.match(Tokens.IDENT);
-                        functionText += tokenStream.token().value;
-                        
-                        tokenStream.match(Tokens.EQUALS);
-                        functionText += tokenStream.token().value;
-                        lt = tokenStream.peek();
-                        while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){
-                            tokenStream.get();
-                            functionText += tokenStream.token().value;
-                            lt = tokenStream.peek();
-                        }
-                    } while(tokenStream.match([Tokens.COMMA, Tokens.S]));                    
-                    
-                    tokenStream.match(Tokens.RPAREN);    
-                    functionText += ")";
-                    this._readWhitespace();
-                }                
-                
-                return functionText;
-            }, 
-            
-            _hexcolor: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    token = null,
-                    color;
-                    
-                if(tokenStream.match(Tokens.HASH)){
-                    
-                    token = tokenStream.token();
-                    color = token.value;
-                    if (!/#[a-f0-9]{3,6}/i.test(color)){
-                        throw new SyntaxError("Expected a hex color but found '" + color + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol);
-                    }
-                    this._readWhitespace();
-                }
-                
-                return token;
-            },
-            
-            _keyframes: function(){
-                var tokenStream = this._tokenStream,
-                    token,
-                    tt,
-                    name,
-                    prefix = "";            
-                    
-                tokenStream.mustMatch(Tokens.KEYFRAMES_SYM);
-                token = tokenStream.token();
-                if (/^@\-([^\-]+)\-/.test(token.value)) {
-                    prefix = RegExp.$1;
-                }
-                
-                this._readWhitespace();
-                name = this._keyframe_name();
-                
-                this._readWhitespace();
-                tokenStream.mustMatch(Tokens.LBRACE);
-                    
-                this.fire({
-                    type:   "startkeyframes",
-                    name:   name,
-                    prefix: prefix,
-                    line:   token.startLine,
-                    col:    token.startCol
-                });                
-                
-                this._readWhitespace();
-                tt = tokenStream.peek();
-                while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) {
-                    this._keyframe_rule();
-                    this._readWhitespace();
-                    tt = tokenStream.peek();
-                }           
-                
-                this.fire({
-                    type:   "endkeyframes",
-                    name:   name,
-                    prefix: prefix,
-                    line:   token.startLine,
-                    col:    token.startCol
-                });                      
-                    
-                this._readWhitespace();
-                tokenStream.mustMatch(Tokens.RBRACE);                    
-                
-            },
-            
-            _keyframe_name: function(){
-                var tokenStream = this._tokenStream,
-                    token;
-
-                tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);
-                return SyntaxUnit.fromToken(tokenStream.token());            
-            },
-            
-            _keyframe_rule: function(){
-                var tokenStream = this._tokenStream,
-                    token,
-                    keyList = this._key_list();
-                                    
-                this.fire({
-                    type:   "startkeyframerule",
-                    keys:   keyList,
-                    line:   keyList[0].line,
-                    col:    keyList[0].col
-                });                
-                
-                this._readDeclarations(true);                
-                
-                this.fire({
-                    type:   "endkeyframerule",
-                    keys:   keyList,
-                    line:   keyList[0].line,
-                    col:    keyList[0].col
-                });  
-                
-            },
-            
-            _key_list: function(){
-                var tokenStream = this._tokenStream,
-                    token,
-                    key,
-                    keyList = [];
-                keyList.push(this._key());
-                    
-                this._readWhitespace();
-                    
-                while(tokenStream.match(Tokens.COMMA)){
-                    this._readWhitespace();
-                    keyList.push(this._key());
-                    this._readWhitespace();
-                }
-
-                return keyList;
-            },
-                        
-            _key: function(){
-                 
-                var tokenStream = this._tokenStream,
-                    token;
-                    
-                if (tokenStream.match(Tokens.PERCENTAGE)){
-                    return SyntaxUnit.fromToken(tokenStream.token());
-                } else if (tokenStream.match(Tokens.IDENT)){
-                    token = tokenStream.token();                    
-                    
-                    if (/from|to/i.test(token.value)){
-                        return SyntaxUnit.fromToken(token);
-                    }
-                    
-                    tokenStream.unget();
-                }
-                this._unexpectedToken(tokenStream.LT(1));
-            },
-            _skipCruft: function(){
-                while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){
-                }
-            },
-            _readDeclarations: function(checkStart, readMargins){
-                var tokenStream = this._tokenStream,
-                    tt;
-                       
-
-                this._readWhitespace();
-                
-                if (checkStart){
-                    tokenStream.mustMatch(Tokens.LBRACE);            
-                }
-                
-                this._readWhitespace();
-
-                try {
-                    
-                    while(true){
-                    
-                        if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){
-                        } else if (this._declaration()){
-                            if (!tokenStream.match(Tokens.SEMICOLON)){
-                                break;
-                            }
-                        } else {
-                            break;
-                        }
-                        this._readWhitespace();
-                    }
-                    
-                    tokenStream.mustMatch(Tokens.RBRACE);
-                    this._readWhitespace();
-                    
-                } catch (ex) {
-                    if (ex instanceof SyntaxError && !this.options.strict){
-                        this.fire({
-                            type:       "error",
-                            error:      ex,
-                            message:    ex.message,
-                            line:       ex.line,
-                            col:        ex.col
-                        });                          
-                        tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]);
-                        if (tt == Tokens.SEMICOLON){
-                            this._readDeclarations(false, readMargins);                            
-                        } else if (tt != Tokens.RBRACE){
-                            throw ex;
-                        }                        
-                        
-                    } else {
-                        throw ex;
-                    }
-                }    
-            
-            },      
-            _readWhitespace: function(){
-            
-                var tokenStream = this._tokenStream,
-                    ws = "";
-                    
-                while(tokenStream.match(Tokens.S)){
-                    ws += tokenStream.token().value;
-                }
-                
-                return ws;
-            },
-            _unexpectedToken: function(token){
-                throw new SyntaxError("Unexpected token '" + token.value + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol);
-            },
-            _verifyEnd: function(){
-                if (this._tokenStream.LA(1) != Tokens.EOF){
-                    this._unexpectedToken(this._tokenStream.LT(1));
-                }            
-            },
-            _validateProperty: function(property, value){
-                Validation.validate(property, value);
-            },
-            
-            parse: function(input){    
-                this._tokenStream = new TokenStream(input, Tokens);
-                this._stylesheet();
-            },
-            
-            parseStyleSheet: function(input){
-                return this.parse(input);
-            },
-            
-            parseMediaQuery: function(input){
-                this._tokenStream = new TokenStream(input, Tokens);
-                var result = this._media_query();
-                this._verifyEnd();
-                return result;            
-            },             
-            parsePropertyValue: function(input){
-            
-                this._tokenStream = new TokenStream(input, Tokens);
-                this._readWhitespace();
-                
-                var result = this._expr();
-                this._readWhitespace();
-                this._verifyEnd();
-                return result;
-            },
-            parseRule: function(input){
-                this._tokenStream = new TokenStream(input, Tokens);
-                this._readWhitespace();
-                
-                var result = this._ruleset();
-                this._readWhitespace();
-                this._verifyEnd();
-                return result;            
-            },
-            parseSelector: function(input){
-            
-                this._tokenStream = new TokenStream(input, Tokens);
-                this._readWhitespace();
-                
-                var result = this._selector();
-                this._readWhitespace();
-                this._verifyEnd();
-                return result;
-            },
-            parseStyleAttribute: function(input){
-                input += "}"; // for error recovery in _readDeclarations()
-                this._tokenStream = new TokenStream(input, Tokens);
-                this._readDeclarations();
-            }
-        };
-    for (prop in additions){
-        if (additions.hasOwnProperty(prop)){
-            proto[prop] = additions[prop];
-        }
-    }   
-    
-    return proto;
-}();
-var Properties = {
-    "alignment-adjust"              : "auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>",
-    "alignment-baseline"            : "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical",
-    "animation"                     : 1,
-    "animation-delay"               : { multi: "<time>", comma: true },
-    "animation-direction"           : { multi: "normal | alternate", comma: true },
-    "animation-duration"            : { multi: "<time>", comma: true },
-    "animation-iteration-count"     : { multi: "<number> | infinite", comma: true },
-    "animation-name"                : { multi: "none | <ident>", comma: true },
-    "animation-play-state"          : { multi: "running | paused", comma: true },
-    "animation-timing-function"     : 1,
-    "-moz-animation-delay"               : { multi: "<time>", comma: true },
-    "-moz-animation-direction"           : { multi: "normal | alternate", comma: true },
-    "-moz-animation-duration"            : { multi: "<time>", comma: true },
-    "-moz-animation-iteration-count"     : { multi: "<number> | infinite", comma: true },
-    "-moz-animation-name"                : { multi: "none | <ident>", comma: true },
-    "-moz-animation-play-state"          : { multi: "running | paused", comma: true },
-    
-    "-ms-animation-delay"               : { multi: "<time>", comma: true },
-    "-ms-animation-direction"           : { multi: "normal | alternate", comma: true },
-    "-ms-animation-duration"            : { multi: "<time>", comma: true },
-    "-ms-animation-iteration-count"     : { multi: "<number> | infinite", comma: true },
-    "-ms-animation-name"                : { multi: "none | <ident>", comma: true },
-    "-ms-animation-play-state"          : { multi: "running | paused", comma: true },
-    
-    "-webkit-animation-delay"               : { multi: "<time>", comma: true },
-    "-webkit-animation-direction"           : { multi: "normal | alternate", comma: true },
-    "-webkit-animation-duration"            : { multi: "<time>", comma: true },
-    "-webkit-animation-iteration-count"     : { multi: "<number> | infinite", comma: true },
-    "-webkit-animation-name"                : { multi: "none | <ident>", comma: true },
-    "-webkit-animation-play-state"          : { multi: "running | paused", comma: true },
-    
-    "-o-animation-delay"               : { multi: "<time>", comma: true },
-    "-o-animation-direction"           : { multi: "normal | alternate", comma: true },
-    "-o-animation-duration"            : { multi: "<time>", comma: true },
-    "-o-animation-iteration-count"     : { multi: "<number> | infinite", comma: true },
-    "-o-animation-name"                : { multi: "none | <ident>", comma: true },
-    "-o-animation-play-state"          : { multi: "running | paused", comma: true },        
-    
-    "appearance"                    : "icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit",
-    "azimuth"                       : function (expression) {
-        var simple      = "<angle> | leftwards | rightwards | inherit",
-            direction   = "left-side | far-left | left | center-left | center | center-right | right | far-right | right-side",
-            behind      = false,
-            valid       = false,
-            part;
-        
-        if (!ValidationTypes.isAny(expression, simple)) {
-            if (ValidationTypes.isAny(expression, "behind")) {
-                behind = true;
-                valid = true;
-            }
-            
-            if (ValidationTypes.isAny(expression, direction)) {
-                valid = true;
-                if (!behind) {
-                    ValidationTypes.isAny(expression, "behind");
-                }
-            }
-        }
-        
-        if (expression.hasNext()) {
-            part = expression.next();
-            if (valid) {
-                throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-            } else {
-                throw new ValidationError("Expected (<'azimuth'>) but found '" + part + "'.", part.line, part.col);
-            }
-        }        
-    },
-    "backface-visibility"           : "visible | hidden",
-    "background"                    : 1,
-    "background-attachment"         : { multi: "<attachment>", comma: true },
-    "background-clip"               : { multi: "<box>", comma: true },
-    "background-color"              : "<color> | inherit",
-    "background-image"              : { multi: "<bg-image>", comma: true },
-    "background-origin"             : { multi: "<box>", comma: true },
-    "background-position"           : { multi: "<bg-position>", comma: true },
-    "background-repeat"             : { multi: "<repeat-style>" },
-    "background-size"               : { multi: "<bg-size>", comma: true },
-    "baseline-shift"                : "baseline | sub | super | <percentage> | <length>",
-    "behavior"                      : 1,
-    "binding"                       : 1,
-    "bleed"                         : "<length>",
-    "bookmark-label"                : "<content> | <attr> | <string>",
-    "bookmark-level"                : "none | <integer>",
-    "bookmark-state"                : "open | closed",
-    "bookmark-target"               : "none | <uri> | <attr>",
-    "border"                        : "<border-width> || <border-style> || <color>",
-    "border-bottom"                 : "<border-width> || <border-style> || <color>",
-    "border-bottom-color"           : "<color>",
-    "border-bottom-left-radius"     :  "<x-one-radius>",
-    "border-bottom-right-radius"    :  "<x-one-radius>",
-    "border-bottom-style"           : "<border-style>",
-    "border-bottom-width"           : "<border-width>",
-    "border-collapse"               : "collapse | separate | inherit",
-    "border-color"                  : { multi: "<color> | inherit", max: 4 },
-    "border-image"                  : 1,
-    "border-image-outset"           : { multi: "<length> | <number>", max: 4 },
-    "border-image-repeat"           : { multi: "stretch | repeat | round", max: 2 },
-    "border-image-slice"            : function(expression) {
-        
-        var valid   = false,
-            numeric = "<number> | <percentage>",
-            fill    = false,
-            count   = 0,
-            max     = 4,
-            part;
-        
-        if (ValidationTypes.isAny(expression, "fill")) {
-            fill = true;
-            valid = true;
-        }
-        
-        while (expression.hasNext() && count < max) {
-            valid = ValidationTypes.isAny(expression, numeric);
-            if (!valid) {
-                break;
-            }
-            count++;
-        }
-        
-        
-        if (!fill) {
-            ValidationTypes.isAny(expression, "fill");
-        } else {
-            valid = true;
-        }
-        
-        if (expression.hasNext()) {
-            part = expression.next();
-            if (valid) {
-                throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-            } else {
-                throw new ValidationError("Expected ([<number> | <percentage>]{1,4} && fill?) but found '" + part + "'.", part.line, part.col);
-            }
-        }         
-    },
-    "border-image-source"           : "<image> | none",
-    "border-image-width"            : { multi: "<length> | <percentage> | <number> | auto", max: 4 },
-    "border-left"                   : "<border-width> || <border-style> || <color>",
-    "border-left-color"             : "<color> | inherit",
-    "border-left-style"             : "<border-style>",
-    "border-left-width"             : "<border-width>",
-    "border-radius"                 : function(expression) {
-        
-        var valid   = false,
-            numeric = "<length> | <percentage>",
-            slash   = false,
-            fill    = false,
-            count   = 0,
-            max     = 8,
-            part;
-
-        while (expression.hasNext() && count < max) {
-            valid = ValidationTypes.isAny(expression, numeric);
-            if (!valid) {
-            
-                if (expression.peek() == "/" && count > 0 && !slash) {
-                    slash = true;
-                    max = count + 5;
-                    expression.next();
-                } else {
-                    break;
-                }
-            }
-            count++;
-        }
-        
-        if (expression.hasNext()) {
-            part = expression.next();
-            if (valid) {
-                throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-            } else {
-                throw new ValidationError("Expected (<'border-radius'>) but found '" + part + "'.", part.line, part.col);
-            }
-        }         
-    },
-    "border-right"                  : "<border-width> || <border-style> || <color>",
-    "border-right-color"            : "<color> | inherit",
-    "border-right-style"            : "<border-style>",
-    "border-right-width"            : "<border-width>",
-    "border-spacing"                : { multi: "<length> | inherit", max: 2 },
-    "border-style"                  : { multi: "<border-style>", max: 4 },
-    "border-top"                    : "<border-width> || <border-style> || <color>",
-    "border-top-color"              : "<color> | inherit",
-    "border-top-left-radius"        : "<x-one-radius>",
-    "border-top-right-radius"       : "<x-one-radius>",
-    "border-top-style"              : "<border-style>",
-    "border-top-width"              : "<border-width>",
-    "border-width"                  : { multi: "<border-width>", max: 4 },
-    "bottom"                        : "<margin-width> | inherit", 
-    "box-align"                     : "start | end | center | baseline | stretch",        //http://www.w3.org/TR/2009/WD-css3-flexbox-20090723/
-    "box-decoration-break"          : "slice |clone",
-    "box-direction"                 : "normal | reverse | inherit",
-    "box-flex"                      : "<number>",
-    "box-flex-group"                : "<integer>",
-    "box-lines"                     : "single | multiple",
-    "box-ordinal-group"             : "<integer>",
-    "box-orient"                    : "horizontal | vertical | inline-axis | block-axis | inherit",
-    "box-pack"                      : "start | end | center | justify",
-    "box-shadow"                    : function (expression) {
-        var result      = false,
-            part;
-
-        if (!ValidationTypes.isAny(expression, "none")) {
-            Validation.multiProperty("<shadow>", expression, true, Infinity);                       
-        } else {
-            if (expression.hasNext()) {
-                part = expression.next();
-                throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-            }   
-        }
-    },
-    "box-sizing"                    : "content-box | border-box | inherit",
-    "break-after"                   : "auto | always | avoid | left | right | page | column | avoid-page | avoid-column",
-    "break-before"                  : "auto | always | avoid | left | right | page | column | avoid-page | avoid-column",
-    "break-inside"                  : "auto | avoid | avoid-page | avoid-column",
-    "caption-side"                  : "top | bottom | inherit",
-    "clear"                         : "none | right | left | both | inherit",
-    "clip"                          : 1,
-    "color"                         : "<color> | inherit",
-    "color-profile"                 : 1,
-    "column-count"                  : "<integer> | auto",                      //http://www.w3.org/TR/css3-multicol/
-    "column-fill"                   : "auto | balance",
-    "column-gap"                    : "<length> | normal",
-    "column-rule"                   : "<border-width> || <border-style> || <color>",
-    "column-rule-color"             : "<color>",
-    "column-rule-style"             : "<border-style>",
-    "column-rule-width"             : "<border-width>",
-    "column-span"                   : "none | all",
-    "column-width"                  : "<length> | auto",
-    "columns"                       : 1,
-    "content"                       : 1,
-    "counter-increment"             : 1,
-    "counter-reset"                 : 1,
-    "crop"                          : "<shape> | auto",
-    "cue"                           : "cue-after | cue-before | inherit",
-    "cue-after"                     : 1,
-    "cue-before"                    : 1,
-    "cursor"                        : 1,
-    "direction"                     : "ltr | rtl | inherit",
-    "display"                       : "inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | box | inline-box | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker",
-    "dominant-baseline"             : 1,
-    "drop-initial-after-adjust"     : "central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>",
-    "drop-initial-after-align"      : "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical",
-    "drop-initial-before-adjust"    : "before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>",
-    "drop-initial-before-align"     : "caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical",
-    "drop-initial-size"             : "auto | line | <length> | <percentage>",
-    "drop-initial-value"            : "initial | <integer>",
-    "elevation"                     : "<angle> | below | level | above | higher | lower | inherit",
-    "empty-cells"                   : "show | hide | inherit",
-    "filter"                        : 1,
-    "fit"                           : "fill | hidden | meet | slice",
-    "fit-position"                  : 1,
-    "float"                         : "left | right | none | inherit",    
-    "float-offset"                  : 1,
-    "font"                          : 1,
-    "font-family"                   : 1,
-    "font-size"                     : "<absolute-size> | <relative-size> | <length> | <percentage> | inherit",
-    "font-size-adjust"              : "<number> | none | inherit",
-    "font-stretch"                  : "normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit",
-    "font-style"                    : "normal | italic | oblique | inherit",
-    "font-variant"                  : "normal | small-caps | inherit",
-    "font-weight"                   : "normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit",
-    "grid-cell-stacking"            : "columns | rows | layer",
-    "grid-column"                   : 1,
-    "grid-columns"                  : 1,
-    "grid-column-align"             : "start | end | center | stretch",
-    "grid-column-sizing"            : 1,
-    "grid-column-span"              : "<integer>",
-    "grid-flow"                     : "none | rows | columns",
-    "grid-layer"                    : "<integer>",
-    "grid-row"                      : 1,
-    "grid-rows"                     : 1,
-    "grid-row-align"                : "start | end | center | stretch",
-    "grid-row-span"                 : "<integer>",
-    "grid-row-sizing"               : 1,
-    "hanging-punctuation"           : 1,
-    "height"                        : "<margin-width> | inherit",
-    "hyphenate-after"               : "<integer> | auto",
-    "hyphenate-before"              : "<integer> | auto",
-    "hyphenate-character"           : "<string> | auto",
-    "hyphenate-lines"               : "no-limit | <integer>",
-    "hyphenate-resource"            : 1,
-    "hyphens"                       : "none | manual | auto",
-    "icon"                          : 1,
-    "image-orientation"             : "angle | auto",
-    "image-rendering"               : 1,
-    "image-resolution"              : 1,
-    "inline-box-align"              : "initial | last | <integer>",
-    "left"                          : "<margin-width> | inherit",
-    "letter-spacing"                : "<length> | normal | inherit",
-    "line-height"                   : "<number> | <length> | <percentage> | normal | inherit",
-    "line-break"                    : "auto | loose | normal | strict",
-    "line-stacking"                 : 1,
-    "line-stacking-ruby"            : "exclude-ruby | include-ruby",
-    "line-stacking-shift"           : "consider-shifts | disregard-shifts",
-    "line-stacking-strategy"        : "inline-line-height | block-line-height | max-height | grid-height",
-    "list-style"                    : 1,
-    "list-style-image"              : "<uri> | none | inherit",
-    "list-style-position"           : "inside | outside | inherit",
-    "list-style-type"               : "disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit",
-    "margin"                        : { multi: "<margin-width> | inherit", max: 4 },
-    "margin-bottom"                 : "<margin-width> | inherit",
-    "margin-left"                   : "<margin-width> | inherit",
-    "margin-right"                  : "<margin-width> | inherit",
-    "margin-top"                    : "<margin-width> | inherit",
-    "mark"                          : 1,
-    "mark-after"                    : 1,
-    "mark-before"                   : 1,
-    "marks"                         : 1,
-    "marquee-direction"             : 1,
-    "marquee-play-count"            : 1,
-    "marquee-speed"                 : 1,
-    "marquee-style"                 : 1,
-    "max-height"                    : "<length> | <percentage> | none | inherit",
-    "max-width"                     : "<length> | <percentage> | none | inherit",
-    "min-height"                    : "<length> | <percentage> | inherit",
-    "min-width"                     : "<length> | <percentage> | inherit",
-    "move-to"                       : 1,
-    "nav-down"                      : 1,
-    "nav-index"                     : 1,
-    "nav-left"                      : 1,
-    "nav-right"                     : 1,
-    "nav-up"                        : 1,
-    "opacity"                       : "<number> | inherit",
-    "orphans"                       : "<integer> | inherit",
-    "outline"                       : 1,
-    "outline-color"                 : "<color> | invert | inherit",
-    "outline-offset"                : 1,
-    "outline-style"                 : "<border-style> | inherit",
-    "outline-width"                 : "<border-width> | inherit",
-    "overflow"                      : "visible | hidden | scroll | auto | inherit",
-    "overflow-style"                : 1,
-    "overflow-x"                    : 1,
-    "overflow-y"                    : 1,
-    "padding"                       : { multi: "<padding-width> | inherit", max: 4 },
-    "padding-bottom"                : "<padding-width> | inherit",
-    "padding-left"                  : "<padding-width> | inherit",
-    "padding-right"                 : "<padding-width> | inherit",
-    "padding-top"                   : "<padding-width> | inherit",
-    "page"                          : 1,
-    "page-break-after"              : "auto | always | avoid | left | right | inherit",
-    "page-break-before"             : "auto | always | avoid | left | right | inherit",
-    "page-break-inside"             : "auto | avoid | inherit",
-    "page-policy"                   : 1,
-    "pause"                         : 1,
-    "pause-after"                   : 1,
-    "pause-before"                  : 1,
-    "perspective"                   : 1,
-    "perspective-origin"            : 1,
-    "phonemes"                      : 1,
-    "pitch"                         : 1,
-    "pitch-range"                   : 1,
-    "play-during"                   : 1,
-    "pointer-events"                : "auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit",
-    "position"                      : "static | relative | absolute | fixed | inherit",
-    "presentation-level"            : 1,
-    "punctuation-trim"              : 1,
-    "quotes"                        : 1,
-    "rendering-intent"              : 1,
-    "resize"                        : 1,
-    "rest"                          : 1,
-    "rest-after"                    : 1,
-    "rest-before"                   : 1,
-    "richness"                      : 1,
-    "right"                         : "<margin-width> | inherit",
-    "rotation"                      : 1,
-    "rotation-point"                : 1,
-    "ruby-align"                    : 1,
-    "ruby-overhang"                 : 1,
-    "ruby-position"                 : 1,
-    "ruby-span"                     : 1,
-    "size"                          : 1,
-    "speak"                         : "normal | none | spell-out | inherit",
-    "speak-header"                  : "once | always | inherit",
-    "speak-numeral"                 : "digits | continuous | inherit",
-    "speak-punctuation"             : "code | none | inherit",
-    "speech-rate"                   : 1,
-    "src"                           : 1,
-    "stress"                        : 1,
-    "string-set"                    : 1,
-    
-    "table-layout"                  : "auto | fixed | inherit",
-    "tab-size"                      : "<integer> | <length>",
-    "target"                        : 1,
-    "target-name"                   : 1,
-    "target-new"                    : 1,
-    "target-position"               : 1,
-    "text-align"                    : "left | right | center | justify | inherit" ,
-    "text-align-last"               : 1,
-    "text-decoration"               : 1,
-    "text-emphasis"                 : 1,
-    "text-height"                   : 1,
-    "text-indent"                   : "<length> | <percentage> | inherit",
-    "text-justify"                  : "auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida",
-    "text-outline"                  : 1,
-    "text-overflow"                 : 1,
-    "text-rendering"                : "auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit",
-    "text-shadow"                   : 1,
-    "text-transform"                : "capitalize | uppercase | lowercase | none | inherit",
-    "text-wrap"                     : "normal | none | avoid",
-    "top"                           : "<margin-width> | inherit",
-    "transform"                     : 1,
-    "transform-origin"              : 1,
-    "transform-style"               : 1,
-    "transition"                    : 1,
-    "transition-delay"              : 1,
-    "transition-duration"           : 1,
-    "transition-property"           : 1,
-    "transition-timing-function"    : 1,
-    "unicode-bidi"                  : "normal | embed | bidi-override | inherit",
-    "user-modify"                   : "read-only | read-write | write-only | inherit",
-    "user-select"                   : "none | text | toggle | element | elements | all | inherit",
-    "vertical-align"                : "auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>",
-    "visibility"                    : "visible | hidden | collapse | inherit",
-    "voice-balance"                 : 1,
-    "voice-duration"                : 1,
-    "voice-family"                  : 1,
-    "voice-pitch"                   : 1,
-    "voice-pitch-range"             : 1,
-    "voice-rate"                    : 1,
-    "voice-stress"                  : 1,
-    "voice-volume"                  : 1,
-    "volume"                        : 1,
-    "white-space"                   : "normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap", //http://perishablepress.com/wrapping-content/
-    "white-space-collapse"          : 1,
-    "widows"                        : "<integer> | inherit",
-    "width"                         : "<length> | <percentage> | auto | inherit" ,
-    "word-break"                    : "normal | keep-all | break-all",
-    "word-spacing"                  : "<length> | normal | inherit",
-    "word-wrap"                     : 1,
-    "z-index"                       : "<integer> | auto | inherit",
-    "zoom"                          : "<number> | <percentage> | normal"
-};
-function PropertyName(text, hack, line, col){
-    
-    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_NAME_TYPE);
-    this.hack = hack;
-
-}
-
-PropertyName.prototype = new SyntaxUnit();
-PropertyName.prototype.constructor = PropertyName;
-PropertyName.prototype.toString = function(){
-    return (this.hack ? this.hack : "") + this.text;
-};
-function PropertyValue(parts, line, col){
-
-    SyntaxUnit.call(this, parts.join(" "), line, col, Parser.PROPERTY_VALUE_TYPE);
-    this.parts = parts;
-    
-}
-
-PropertyValue.prototype = new SyntaxUnit();
-PropertyValue.prototype.constructor = PropertyValue;
-function PropertyValueIterator(value){
-    this._i = 0;
-    this._parts = value.parts;
-    this._marks = [];
-    this.value = value;
-    
-}
-PropertyValueIterator.prototype.count = function(){
-    return this._parts.length;
-};
-PropertyValueIterator.prototype.isFirst = function(){
-    return this._i === 0;
-};
-PropertyValueIterator.prototype.hasNext = function(){
-    return (this._i < this._parts.length);
-};
-PropertyValueIterator.prototype.mark = function(){
-    this._marks.push(this._i);
-};
-PropertyValueIterator.prototype.peek = function(count){
-    return this.hasNext() ? this._parts[this._i + (count || 0)] : null;
-};
-PropertyValueIterator.prototype.next = function(){
-    return this.hasNext() ? this._parts[this._i++] : null;
-};
-PropertyValueIterator.prototype.previous = function(){
-    return this._i > 0 ? this._parts[--this._i] : null;
-};
-PropertyValueIterator.prototype.restore = function(){
-    if (this._marks.length){
-        this._i = this._marks.pop();
-    }
-};
-function PropertyValuePart(text, line, col){
-
-    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE);
-    this.type = "unknown";
-    
-    var temp;
-    if (/^([+\-]?[\d\.]+)([a-z]+)$/i.test(text)){  //dimension
-        this.type = "dimension";
-        this.value = +RegExp.$1;
-        this.units = RegExp.$2;
-        switch(this.units.toLowerCase()){
-        
-            case "em":
-            case "rem":
-            case "ex":
-            case "px":
-            case "cm":
-            case "mm":
-            case "in":
-            case "pt":
-            case "pc":
-            case "ch":
-                this.type = "length";
-                break;
-                
-            case "deg":
-            case "rad":
-            case "grad":
-                this.type = "angle";
-                break;
-            
-            case "ms":
-            case "s":
-                this.type = "time";
-                break;
-            
-            case "hz":
-            case "khz":
-                this.type = "frequency";
-                break;
-            
-            case "dpi":
-            case "dpcm":
-                this.type = "resolution";
-                break;
-                
-        }
-        
-    } else if (/^([+\-]?[\d\.]+)%$/i.test(text)){  //percentage
-        this.type = "percentage";
-        this.value = +RegExp.$1;
-    } else if (/^([+\-]?[\d\.]+)%$/i.test(text)){  //percentage
-        this.type = "percentage";
-        this.value = +RegExp.$1;
-    } else if (/^([+\-]?\d+)$/i.test(text)){  //integer
-        this.type = "integer";
-        this.value = +RegExp.$1;
-    } else if (/^([+\-]?[\d\.]+)$/i.test(text)){  //number
-        this.type = "number";
-        this.value = +RegExp.$1;
-    
-    } else if (/^#([a-f0-9]{3,6})/i.test(text)){  //hexcolor
-        this.type = "color";
-        temp = RegExp.$1;
-        if (temp.length == 3){
-            this.red    = parseInt(temp.charAt(0)+temp.charAt(0),16);
-            this.green  = parseInt(temp.charAt(1)+temp.charAt(1),16);
-            this.blue   = parseInt(temp.charAt(2)+temp.charAt(2),16);            
-        } else {
-            this.red    = parseInt(temp.substring(0,2),16);
-            this.green  = parseInt(temp.substring(2,4),16);
-            this.blue   = parseInt(temp.substring(4,6),16);            
-        }
-    } else if (/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i.test(text)){ //rgb() color with absolute numbers
-        this.type   = "color";
-        this.red    = +RegExp.$1;
-        this.green  = +RegExp.$2;
-        this.blue   = +RegExp.$3;
-    } else if (/^rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text)){ //rgb() color with percentages
-        this.type   = "color";
-        this.red    = +RegExp.$1 * 255 / 100;
-        this.green  = +RegExp.$2 * 255 / 100;
-        this.blue   = +RegExp.$3 * 255 / 100;
-    } else if (/^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d\.]+)\s*\)/i.test(text)){ //rgba() color with absolute numbers
-        this.type   = "color";
-        this.red    = +RegExp.$1;
-        this.green  = +RegExp.$2;
-        this.blue   = +RegExp.$3;
-        this.alpha  = +RegExp.$4;
-    } else if (/^rgba\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d\.]+)\s*\)/i.test(text)){ //rgba() color with percentages
-        this.type   = "color";
-        this.red    = +RegExp.$1 * 255 / 100;
-        this.green  = +RegExp.$2 * 255 / 100;
-        this.blue   = +RegExp.$3 * 255 / 100;
-        this.alpha  = +RegExp.$4;        
-    } else if (/^hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)/i.test(text)){ //hsl()
-        this.type   = "color";
-        this.hue    = +RegExp.$1;
-        this.saturation = +RegExp.$2 / 100;
-        this.lightness  = +RegExp.$3 / 100;        
-    } else if (/^hsla\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*([\d\.]+)\s*\)/i.test(text)){ //hsla() color with percentages
-        this.type   = "color";
-        this.hue    = +RegExp.$1;
-        this.saturation = +RegExp.$2 / 100;
-        this.lightness  = +RegExp.$3 / 100;        
-        this.alpha  = +RegExp.$4;        
-    } else if (/^url\(["']?([^\)"']+)["']?\)/i.test(text)){ //URI
-        this.type   = "uri";
-        this.uri    = RegExp.$1;
-    } else if (/^([^\(]+)\(/i.test(text)){
-        this.type   = "function";
-        this.name   = RegExp.$1;
-        this.value  = text;
-    } else if (/^["'][^"']*["']/.test(text)){    //string
-        this.type   = "string";
-        this.value  = eval(text);
-    } else if (Colors[text.toLowerCase()]){  //named color
-        this.type   = "color";
-        temp        = Colors[text.toLowerCase()].substring(1);
-        this.red    = parseInt(temp.substring(0,2),16);
-        this.green  = parseInt(temp.substring(2,4),16);
-        this.blue   = parseInt(temp.substring(4,6),16);         
-    } else if (/^[\,\/]$/.test(text)){
-        this.type   = "operator";
-        this.value  = text;
-    } else if (/^[a-z\-\u0080-\uFFFF][a-z0-9\-\u0080-\uFFFF]*$/i.test(text)){
-        this.type   = "identifier";
-        this.value  = text;
-    }
-
-}
-
-PropertyValuePart.prototype = new SyntaxUnit();
-PropertyValuePart.prototype.constructor = PropertyValuePart;
-PropertyValuePart.fromToken = function(token){
-    return new PropertyValuePart(token.value, token.startLine, token.startCol);
-};
-var Pseudos = {
-    ":first-letter": 1,
-    ":first-line":   1,
-    ":before":       1,
-    ":after":        1
-};
-
-Pseudos.ELEMENT = 1;
-Pseudos.CLASS = 2;
-
-Pseudos.isElement = function(pseudo){
-    return pseudo.indexOf("::") === 0 || Pseudos[pseudo.toLowerCase()] == Pseudos.ELEMENT;
-};
-function Selector(parts, line, col){
-    
-    SyntaxUnit.call(this, parts.join(" "), line, col, Parser.SELECTOR_TYPE);
-    this.parts = parts;
-    this.specificity = Specificity.calculate(this);
-
-}
-
-Selector.prototype = new SyntaxUnit();
-Selector.prototype.constructor = Selector;
-function SelectorPart(elementName, modifiers, text, line, col){
-    
-    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_PART_TYPE);
-    this.elementName = elementName;
-    this.modifiers = modifiers;
-
-}
-
-SelectorPart.prototype = new SyntaxUnit();
-SelectorPart.prototype.constructor = SelectorPart;
-function SelectorSubPart(text, type, line, col){
-    
-    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_SUB_PART_TYPE);
-    this.type = type;
-    this.args = [];
-
-}
-
-SelectorSubPart.prototype = new SyntaxUnit();
-SelectorSubPart.prototype.constructor = SelectorSubPart;
-function Specificity(a, b, c, d){
-    this.a = a;
-    this.b = b;
-    this.c = c;
-    this.d = d;
-}
-
-Specificity.prototype = {
-    constructor: Specificity,
-    compare: function(other){
-        var comps = ["a", "b", "c", "d"],
-            i, len;
-            
-        for (i=0, len=comps.length; i < len; i++){
-            if (this[comps[i]] < other[comps[i]]){
-                return -1;
-            } else if (this[comps[i]] > other[comps[i]]){
-                return 1;
-            }
-        }
-        
-        return 0;
-    },
-    valueOf: function(){
-        return (this.a * 1000) + (this.b * 100) + (this.c * 10) + this.d;
-    },
-    toString: function(){
-        return this.a + "," + this.b + "," + this.c + "," + this.d;
-    }
-
-};
-Specificity.calculate = function(selector){
-
-    var i, len,
-        part,
-        b=0, c=0, d=0;
-        
-    function updateValues(part){
-    
-        var i, j, len, num,
-            elementName = part.elementName ? part.elementName.text : "",
-            modifier;
-    
-        if (elementName && elementName.charAt(elementName.length-1) != "*") {
-            d++;
-        }    
-    
-        for (i=0, len=part.modifiers.length; i < len; i++){
-            modifier = part.modifiers[i];
-            switch(modifier.type){
-                case "class":
-                case "attribute":
-                    c++;
-                    break;
-                    
-                case "id":
-                    b++;
-                    break;
-                    
-                case "pseudo":
-                    if (Pseudos.isElement(modifier.text)){
-                        d++;
-                    } else {
-                        c++;
-                    }                    
-                    break;
-                    
-                case "not":
-                    for (j=0, num=modifier.args.length; j < num; j++){
-                        updateValues(modifier.args[j]);
-                    }
-            }    
-         }
-    }
-    
-    for (i=0, len=selector.parts.length; i < len; i++){
-        part = selector.parts[i];
-        
-        if (part instanceof SelectorPart){
-            updateValues(part);                
-        }
-    }
-    
-    return new Specificity(0, b, c, d);
-};
-
-var h = /^[0-9a-fA-F]$/,
-    nonascii = /^[\u0080-\uFFFF]$/,
-    nl = /\n|\r\n|\r|\f/;
-
-
-function isHexDigit(c){
-    return c !== null && h.test(c);
-}
-
-function isDigit(c){
-    return c !== null && /\d/.test(c);
-}
-
-function isWhitespace(c){
-    return c !== null && /\s/.test(c);
-}
-
-function isNewLine(c){
-    return c !== null && nl.test(c);
-}
-
-function isNameStart(c){
-    return c !== null && (/[a-z_\u0080-\uFFFF\\]/i.test(c));
-}
-
-function isNameChar(c){
-    return c !== null && (isNameStart(c) || /[0-9\-\\]/.test(c));
-}
-
-function isIdentStart(c){
-    return c !== null && (isNameStart(c) || /\-\\/.test(c));
-}
-
-function mix(receiver, supplier){
-	for (var prop in supplier){
-		if (supplier.hasOwnProperty(prop)){
-			receiver[prop] = supplier[prop];
-		}
-	}
-	return receiver;
-}
-function TokenStream(input){
-	TokenStreamBase.call(this, input, Tokens);
-}
-
-TokenStream.prototype = mix(new TokenStreamBase(), {
-    _getToken: function(channel){
-
-        var c,
-            reader = this._reader,
-            token   = null,
-            startLine   = reader.getLine(),
-            startCol    = reader.getCol();
-
-        c = reader.read();
-
-
-        while(c){
-            switch(c){
-                case "/":
-
-                    if(reader.peek() == "*"){
-                        token = this.commentToken(c, startLine, startCol);
-                    } else {
-                        token = this.charToken(c, startLine, startCol);
-                    }
-                    break;
-                case "|":
-                case "~":
-                case "^":
-                case "$":
-                case "*":
-                    if(reader.peek() == "="){
-                        token = this.comparisonToken(c, startLine, startCol);
-                    } else {
-                        token = this.charToken(c, startLine, startCol);
-                    }
-                    break;
-                case "\"":
-                case "'":
-                    token = this.stringToken(c, startLine, startCol);
-                    break;
-                case "#":
-                    if (isNameChar(reader.peek())){
-                        token = this.hashToken(c, startLine, startCol);
-                    } else {
-                        token = this.charToken(c, startLine, startCol);
-                    }
-                    break;
-                case ".":
-                    if (isDigit(reader.peek())){
-                        token = this.numberToken(c, startLine, startCol);
-                    } else {
-                        token = this.charToken(c, startLine, startCol);
-                    }
-                    break;
-                case "-":
-                    if (reader.peek() == "-"){  //could be closing HTML-style comment
-                        token = this.htmlCommentEndToken(c, startLine, startCol);
-                    } else if (isNameStart(reader.peek())){
-                        token = this.identOrFunctionToken(c, startLine, startCol);
-                    } else {
-                        token = this.charToken(c, startLine, startCol);
-                    }
-                    break;
-                case "!":
-                    token = this.importantToken(c, startLine, startCol);
-                    break;
-                case "@":
-                    token = this.atRuleToken(c, startLine, startCol);
-                    break;
-                case ":":
-                    token = this.notToken(c, startLine, startCol);
-                    break;
-                case "<":
-                    token = this.htmlCommentStartToken(c, startLine, startCol);
-                    break;
-                case "U":
-                case "u":
-                    if (reader.peek() == "+"){
-                        token = this.unicodeRangeToken(c, startLine, startCol);
-                        break;
-                    }
-                default:
-                    if (isDigit(c)){
-                        token = this.numberToken(c, startLine, startCol);
-                    } else
-                    if (isWhitespace(c)){
-                        token = this.whitespaceToken(c, startLine, startCol);
-                    } else
-                    if (isIdentStart(c)){
-                        token = this.identOrFunctionToken(c, startLine, startCol);
-                    } else
-                    {
-                        token = this.charToken(c, startLine, startCol);
-                    }
-
-
-
-
-
-
-            }
-            break;
-        }
-
-        if (!token && c === null){
-            token = this.createToken(Tokens.EOF,null,startLine,startCol);
-        }
-
-        return token;
-    },
-    createToken: function(tt, value, startLine, startCol, options){
-        var reader = this._reader;
-        options = options || {};
-
-        return {
-            value:      value,
-            type:       tt,
-            channel:    options.channel,
-            hide:       options.hide || false,
-            startLine:  startLine,
-            startCol:   startCol,
-            endLine:    reader.getLine(),
-            endCol:     reader.getCol()
-        };
-    },
-    atRuleToken: function(first, startLine, startCol){
-        var rule    = first,
-            reader  = this._reader,
-            tt      = Tokens.CHAR,
-            valid   = false,
-            ident,
-            c;
-        reader.mark();
-        ident = this.readName();
-        rule = first + ident;
-        tt = Tokens.type(rule.toLowerCase());
-        if (tt == Tokens.CHAR || tt == Tokens.UNKNOWN){
-            if (rule.length > 1){
-                tt = Tokens.UNKNOWN_SYM;                
-            } else {
-                tt = Tokens.CHAR;
-                rule = first;
-                reader.reset();
-            }
-        }
-
-        return this.createToken(tt, rule, startLine, startCol);
-    },
-    charToken: function(c, startLine, startCol){
-        var tt = Tokens.type(c);
-
-        if (tt == -1){
-            tt = Tokens.CHAR;
-        }
-
-        return this.createToken(tt, c, startLine, startCol);
-    },
-    commentToken: function(first, startLine, startCol){
-        var reader  = this._reader,
-            comment = this.readComment(first);
-
-        return this.createToken(Tokens.COMMENT, comment, startLine, startCol);
-    },
-    comparisonToken: function(c, startLine, startCol){
-        var reader  = this._reader,
-            comparison  = c + reader.read(),
-            tt      = Tokens.type(comparison) || Tokens.CHAR;
-
-        return this.createToken(tt, comparison, startLine, startCol);
-    },
-    hashToken: function(first, startLine, startCol){
-        var reader  = this._reader,
-            name    = this.readName(first);
-
-        return this.createToken(Tokens.HASH, name, startLine, startCol);
-    },
-    htmlCommentStartToken: function(first, startLine, startCol){
-        var reader      = this._reader,
-            text        = first;
-
-        reader.mark();
-        text += reader.readCount(3);
-
-        if (text == "<!--"){
-            return this.createToken(Tokens.CDO, text, startLine, startCol);
-        } else {
-            reader.reset();
-            return this.charToken(first, startLine, startCol);
-        }
-    },
-    htmlCommentEndToken: function(first, startLine, startCol){
-        var reader      = this._reader,
-            text        = first;
-
-        reader.mark();
-        text += reader.readCount(2);
-
-        if (text == "-->"){
-            return this.createToken(Tokens.CDC, text, startLine, startCol);
-        } else {
-            reader.reset();
-            return this.charToken(first, startLine, startCol);
-        }
-    },
-    identOrFunctionToken: function(first, startLine, startCol){
-        var reader  = this._reader,
-            ident   = this.readName(first),
-            tt      = Tokens.IDENT;
-        if (reader.peek() == "("){
-            ident += reader.read();
-            if (ident.toLowerCase() == "url("){
-                tt = Tokens.URI;
-                ident = this.readURI(ident);
-                if (ident.toLowerCase() == "url("){
-                    tt = Tokens.FUNCTION;
-                }
-            } else {
-                tt = Tokens.FUNCTION;
-            }
-        } else if (reader.peek() == ":"){  //might be an IE function
-            if (ident.toLowerCase() == "progid"){
-                ident += reader.readTo("(");
-                tt = Tokens.IE_FUNCTION;
-            }
-        }
-
-        return this.createToken(tt, ident, startLine, startCol);
-    },
-    importantToken: function(first, startLine, startCol){
-        var reader      = this._reader,
-            important   = first,
-            tt          = Tokens.CHAR,
-            temp,
-            c;
-
-        reader.mark();
-        c = reader.read();
-
-        while(c){
-            if (c == "/"){
-                if (reader.peek() != "*"){
-                    break;
-                } else {
-                    temp = this.readComment(c);
-                    if (temp === ""){    //broken!
-                        break;
-                    }
-                }
-            } else if (isWhitespace(c)){
-                important += c + this.readWhitespace();
-            } else if (/i/i.test(c)){
-                temp = reader.readCount(8);
-                if (/mportant/i.test(temp)){
-                    important += c + temp;
-                    tt = Tokens.IMPORTANT_SYM;
-
-                }
-                break;  //we're done
-            } else {
-                break;
-            }
-
-            c = reader.read();
-        }
-
-        if (tt == Tokens.CHAR){
-            reader.reset();
-            return this.charToken(first, startLine, startCol);
-        } else {
-            return this.createToken(tt, important, startLine, startCol);
-        }
-
-
-    },
-    notToken: function(first, startLine, startCol){
-        var reader      = this._reader,
-            text        = first;
-
-        reader.mark();
-        text += reader.readCount(4);
-
-        if (text.toLowerCase() == ":not("){
-            return this.createToken(Tokens.NOT, text, startLine, startCol);
-        } else {
-            reader.reset();
-            return this.charToken(first, startLine, startCol);
-        }
-    },
-    numberToken: function(first, startLine, startCol){
-        var reader  = this._reader,
-            value   = this.readNumber(first),
-            ident,
-            tt      = Tokens.NUMBER,
-            c       = reader.peek();
-
-        if (isIdentStart(c)){
-            ident = this.readName(reader.read());
-            value += ident;
-
-            if (/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vm$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(ident)){
-                tt = Tokens.LENGTH;
-            } else if (/^deg|^rad$|^grad$/i.test(ident)){
-                tt = Tokens.ANGLE;
-            } else if (/^ms$|^s$/i.test(ident)){
-                tt = Tokens.TIME;
-            } else if (/^hz$|^khz$/i.test(ident)){
-                tt = Tokens.FREQ;
-            } else if (/^dpi$|^dpcm$/i.test(ident)){
-                tt = Tokens.RESOLUTION;
-            } else {
-                tt = Tokens.DIMENSION;
-            }
-
-        } else if (c == "%"){
-            value += reader.read();
-            tt = Tokens.PERCENTAGE;
-        }
-
-        return this.createToken(tt, value, startLine, startCol);
-    },
-    stringToken: function(first, startLine, startCol){
-        var delim   = first,
-            string  = first,
-            reader  = this._reader,
-            prev    = first,
-            tt      = Tokens.STRING,
-            c       = reader.read();
-
-        while(c){
-            string += c;
-            if (c == delim && prev != "\\"){
-                break;
-            }
-            if (isNewLine(reader.peek()) && c != "\\"){
-                tt = Tokens.INVALID;
-                break;
-            }
-            prev = c;
-            c = reader.read();
-        }
-        if (c === null){
-            tt = Tokens.INVALID;
-        }
-
-        return this.createToken(tt, string, startLine, startCol);
-    },
-
-    unicodeRangeToken: function(first, startLine, startCol){
-        var reader  = this._reader,
-            value   = first,
-            temp,
-            tt      = Tokens.CHAR;
-        if (reader.peek() == "+"){
-            reader.mark();
-            value += reader.read();
-            value += this.readUnicodeRangePart(true);
-            if (value.length == 2){
-                reader.reset();
-            } else {
-
-                tt = Tokens.UNICODE_RANGE;
-                if (value.indexOf("?") == -1){
-
-                    if (reader.peek() == "-"){
-                        reader.mark();
-                        temp = reader.read();
-                        temp += this.readUnicodeRangePart(false);
-                        if (temp.length == 1){
-                            reader.reset();
-                        } else {
-                            value += temp;
-                        }
-                    }
-
-                }
-            }
-        }
-
-        return this.createToken(tt, value, startLine, startCol);
-    },
-    whitespaceToken: function(first, startLine, startCol){
-        var reader  = this._reader,
-            value   = first + this.readWhitespace();
-        return this.createToken(Tokens.S, value, startLine, startCol);
-    },
-
-    readUnicodeRangePart: function(allowQuestionMark){
-        var reader  = this._reader,
-            part = "",
-            c       = reader.peek();
-        while(isHexDigit(c) && part.length < 6){
-            reader.read();
-            part += c;
-            c = reader.peek();
-        }
-        if (allowQuestionMark){
-            while(c == "?" && part.length < 6){
-                reader.read();
-                part += c;
-                c = reader.peek();
-            }
-        }
-
-        return part;
-    },
-
-    readWhitespace: function(){
-        var reader  = this._reader,
-            whitespace = "",
-            c       = reader.peek();
-
-        while(isWhitespace(c)){
-            reader.read();
-            whitespace += c;
-            c = reader.peek();
-        }
-
-        return whitespace;
-    },
-    readNumber: function(first){
-        var reader  = this._reader,
-            number  = first,
-            hasDot  = (first == "."),
-            c       = reader.peek();
-
-
-        while(c){
-            if (isDigit(c)){
-                number += reader.read();
-            } else if (c == "."){
-                if (hasDot){
-                    break;
-                } else {
-                    hasDot = true;
-                    number += reader.read();
-                }
-            } else {
-                break;
-            }
-
-            c = reader.peek();
-        }
-
-        return number;
-    },
-    readString: function(){
-        var reader  = this._reader,
-            delim   = reader.read(),
-            string  = delim,
-            prev    = delim,
-            c       = reader.peek();
-
-        while(c){
-            c = reader.read();
-            string += c;
-            if (c == delim && prev != "\\"){
-                break;
-            }
-            if (isNewLine(reader.peek()) && c != "\\"){
-                string = "";
-                break;
-            }
-            prev = c;
-            c = reader.peek();
-        }
-        if (c === null){
-            string = "";
-        }
-
-        return string;
-    },
-    readURI: function(first){
-        var reader  = this._reader,
-            uri     = first,
-            inner   = "",
-            c       = reader.peek();
-
-        reader.mark();
-        while(c && isWhitespace(c)){
-            reader.read();
-            c = reader.peek();
-        }
-        if (c == "'" || c == "\""){
-            inner = this.readString();
-        } else {
-            inner = this.readURL();
-        }
-
-        c = reader.peek();
-        while(c && isWhitespace(c)){
-            reader.read();
-            c = reader.peek();
-        }
-        if (inner === "" || c != ")"){
-            uri = first;
-            reader.reset();
-        } else {
-            uri += inner + reader.read();
-        }
-
-        return uri;
-    },
-    readURL: function(){
-        var reader  = this._reader,
-            url     = "",
-            c       = reader.peek();
-        while (/^[!#$%&\\*-~]$/.test(c)){
-            url += reader.read();
-            c = reader.peek();
-        }
-
-        return url;
-
-    },
-    readName: function(first){
-        var reader  = this._reader,
-            ident   = first || "",
-            c       = reader.peek();
-
-        while(true){
-            if (c == "\\"){
-                ident += this.readEscape(reader.read());
-                c = reader.peek();
-            } else if(c && isNameChar(c)){
-                ident += reader.read();
-                c = reader.peek();
-            } else {
-                break;
-            }
-        }
-
-        return ident;
-    },
-    
-    readEscape: function(first){
-        var reader  = this._reader,
-            cssEscape = first || "",
-            i       = 0,
-            c       = reader.peek();    
-    
-        if (isHexDigit(c)){
-            do {
-                cssEscape += reader.read();
-                c = reader.peek();
-            } while(c && isHexDigit(c) && ++i < 6);
-        }
-        
-        if (cssEscape.length == 3 && /\s/.test(c) ||
-            cssEscape.length == 7 || cssEscape.length == 1){
-                reader.read();
-        } else {
-            c = "";
-        }
-        
-        return cssEscape + c;
-    },
-    
-    readComment: function(first){
-        var reader  = this._reader,
-            comment = first || "",
-            c       = reader.read();
-
-        if (c == "*"){
-            while(c){
-                comment += c;
-                if (comment.length > 2 && c == "*" && reader.peek() == "/"){
-                    comment += reader.read();
-                    break;
-                }
-
-                c = reader.read();
-            }
-
-            return comment;
-        } else {
-            return "";
-        }
-
-    }
-});
-
-
-var Tokens  = [
-    { name: "CDO"},
-    { name: "CDC"},
-    { name: "S", whitespace: true/*, channel: "ws"*/},
-    { name: "COMMENT", comment: true, hide: true, channel: "comment" },
-    { name: "INCLUDES", text: "~="},
-    { name: "DASHMATCH", text: "|="},
-    { name: "PREFIXMATCH", text: "^="},
-    { name: "SUFFIXMATCH", text: "$="},
-    { name: "SUBSTRINGMATCH", text: "*="},
-    { name: "STRING"},     
-    { name: "IDENT"},
-    { name: "HASH"},
-    { name: "IMPORT_SYM", text: "@import"},
-    { name: "PAGE_SYM", text: "@page"},
-    { name: "MEDIA_SYM", text: "@media"},
-    { name: "FONT_FACE_SYM", text: "@font-face"},
-    { name: "CHARSET_SYM", text: "@charset"},
-    { name: "NAMESPACE_SYM", text: "@namespace"},
-    { name: "UNKNOWN_SYM" },
-    { name: "KEYFRAMES_SYM", text: [ "@keyframes", "@-webkit-keyframes", "@-moz-keyframes", "@-o-keyframes" ] },
-    { name: "IMPORTANT_SYM"},
-    { name: "LENGTH"},
-    { name: "ANGLE"},
-    { name: "TIME"},
-    { name: "FREQ"},
-    { name: "DIMENSION"},
-    { name: "PERCENTAGE"},
-    { name: "NUMBER"},
-    { name: "URI"},
-    { name: "FUNCTION"},
-    { name: "UNICODE_RANGE"},    
-    { name: "INVALID"},
-    { name: "PLUS", text: "+" },
-    { name: "GREATER", text: ">"},
-    { name: "COMMA", text: ","},
-    { name: "TILDE", text: "~"},
-    { name: "NOT"},        
-    { name: "TOPLEFTCORNER_SYM", text: "@top-left-corner"},
-    { name: "TOPLEFT_SYM", text: "@top-left"},
-    { name: "TOPCENTER_SYM", text: "@top-center"},
-    { name: "TOPRIGHT_SYM", text: "@top-right"},
-    { name: "TOPRIGHTCORNER_SYM", text: "@top-right-corner"},
-    { name: "BOTTOMLEFTCORNER_SYM", text: "@bottom-left-corner"},
-    { name: "BOTTOMLEFT_SYM", text: "@bottom-left"},
-    { name: "BOTTOMCENTER_SYM", text: "@bottom-center"},
-    { name: "BOTTOMRIGHT_SYM", text: "@bottom-right"},
-    { name: "BOTTOMRIGHTCORNER_SYM", text: "@bottom-right-corner"},
-    { name: "LEFTTOP_SYM", text: "@left-top"},
-    { name: "LEFTMIDDLE_SYM", text: "@left-middle"},
-    { name: "LEFTBOTTOM_SYM", text: "@left-bottom"},
-    { name: "RIGHTTOP_SYM", text: "@right-top"},
-    { name: "RIGHTMIDDLE_SYM", text: "@right-middle"},
-    { name: "RIGHTBOTTOM_SYM", text: "@right-bottom"},
-    { name: "RESOLUTION", state: "media"},
-    { name: "IE_FUNCTION" },
-    { name: "CHAR" },
-    {
-        name: "PIPE",
-        text: "|"
-    },
-    {
-        name: "SLASH",
-        text: "/"
-    },
-    {
-        name: "MINUS",
-        text: "-"
-    },
-    {
-        name: "STAR",
-        text: "*"
-    },
-
-    {
-        name: "LBRACE",
-        text: "{"
-    },   
-    {
-        name: "RBRACE",
-        text: "}"
-    },      
-    {
-        name: "LBRACKET",
-        text: "["
-    },   
-    {
-        name: "RBRACKET",
-        text: "]"
-    },    
-    {
-        name: "EQUALS",
-        text: "="
-    },
-    {
-        name: "COLON",
-        text: ":"
-    },    
-    {
-        name: "SEMICOLON",
-        text: ";"
-    },    
- 
-    {
-        name: "LPAREN",
-        text: "("
-    },   
-    {
-        name: "RPAREN",
-        text: ")"
-    },     
-    {
-        name: "DOT",
-        text: "."
-    }
-];
-
-(function(){
-
-    var nameMap = [],
-        typeMap = {};
-    
-    Tokens.UNKNOWN = -1;
-    Tokens.unshift({name:"EOF"});
-    for (var i=0, len = Tokens.length; i < len; i++){
-        nameMap.push(Tokens[i].name);
-        Tokens[Tokens[i].name] = i;
-        if (Tokens[i].text){
-            if (Tokens[i].text instanceof Array){
-                for (var j=0; j < Tokens[i].text.length; j++){
-                    typeMap[Tokens[i].text[j]] = i;
-                }
-            } else {
-                typeMap[Tokens[i].text] = i;
-            }
-        }
-    }
-    
-    Tokens.name = function(tt){
-        return nameMap[tt];
-    };
-    
-    Tokens.type = function(c){
-        return typeMap[c] || -1;
-    };
-
-})();
-var Validation = {
-
-    validate: function(property, value){
-        var name        = property.toString().toLowerCase(),
-            parts       = value.parts,
-            expression  = new PropertyValueIterator(value),
-            spec        = Properties[name],
-            part,
-            valid,            
-            j, count,
-            msg,
-            types,
-            last,
-            literals,
-            max, multi, group;
-            
-        if (!spec) {
-            if (name.indexOf("-") !== 0){    //vendor prefixed are ok
-                throw new ValidationError("Unknown property '" + property + "'.", property.line, property.col);
-            }
-        } else if (typeof spec != "number"){
-            if (typeof spec == "string"){
-                if (spec.indexOf("||") > -1) {
-                    this.groupProperty(spec, expression);
-                } else {
-                    this.singleProperty(spec, expression, 1);
-                }
-
-            } else if (spec.multi) {
-                this.multiProperty(spec.multi, expression, spec.comma, spec.max || Infinity);
-            } else if (typeof spec == "function") {
-                spec(expression);
-            }
-
-        }
-
-    },
-    
-    singleProperty: function(types, expression, max, partial) {
-
-        var result      = false,
-            value       = expression.value,
-            count       = 0,
-            part;
-         
-        while (expression.hasNext() && count < max) {
-            result = ValidationTypes.isAny(expression, types);
-            if (!result) {
-                break;
-            }
-            count++;
-        }
-        
-        if (!result) {
-            if (expression.hasNext() && !expression.isFirst()) {
-                part = expression.peek();
-                throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-            } else {
-                 throw new ValidationError("Expected (" + types + ") but found '" + value + "'.", value.line, value.col);
-            }        
-        } else if (expression.hasNext()) {
-            part = expression.next();
-            throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-        }          
-                 
-    },    
-    
-    multiProperty: function (types, expression, comma, max) {
-
-        var result      = false,
-            value       = expression.value,
-            count       = 0,
-            sep         = false,
-            part;
-            
-        while(expression.hasNext() && !result && count < max) {
-            if (ValidationTypes.isAny(expression, types)) {
-                count++;
-                if (!expression.hasNext()) {
-                    result = true;
-
-                } else if (comma) {
-                    if (expression.peek() == ",") {
-                        part = expression.next();
-                    } else {
-                        break;
-                    }
-                }
-            } else {
-                break;
-
-            }
-        }
-        
-        if (!result) {
-            if (expression.hasNext() && !expression.isFirst()) {
-                part = expression.peek();
-                throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-            } else {
-                part = expression.previous();
-                if (comma && part == ",") {
-                    throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col); 
-                } else {
-                    throw new ValidationError("Expected (" + types + ") but found '" + value + "'.", value.line, value.col);
-                }
-            }
-        
-        } else if (expression.hasNext()) {
-            part = expression.next();
-            throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-        }  
-
-    },
-    
-    groupProperty: function (types, expression, comma) {
-
-        var result      = false,
-            value       = expression.value,
-            typeCount   = types.split("||").length,
-            groups      = { count: 0 },
-            partial     = false,
-            name,
-            part;
-            
-        while(expression.hasNext() && !result) {
-            name = ValidationTypes.isAnyOfGroup(expression, types);
-            if (name) {
-                if (groups[name]) {
-                    break;
-                } else {
-                    groups[name] = 1;
-                    groups.count++;
-                    partial = true;
-                    
-                    if (groups.count == typeCount || !expression.hasNext()) {
-                        result = true;
-                    }
-                }
-            } else {
-                break;
-            }
-        }
-        
-        if (!result) {        
-            if (partial && expression.hasNext()) {
-                    part = expression.peek();
-                    throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-            } else {
-                throw new ValidationError("Expected (" + types + ") but found '" + value + "'.", value.line, value.col);
-            }
-        } else if (expression.hasNext()) {
-            part = expression.next();
-            throw new ValidationError("Expected end of value but found '" + part + "'.", part.line, part.col);
-        }           
-    }
-
-    
-
-};
-function ValidationError(message, line, col){
-    this.col = col;
-    this.line = line;
-    this.message = message;
-
-}
-ValidationError.prototype = new Error();
-var ValidationTypes = {
-
-    isLiteral: function (part, literals) {
-        var text = part.text.toString().toLowerCase(),
-            args = literals.split(" | "),
-            i, len, found = false;
-        
-        for (i=0,len=args.length; i < len && !found; i++){
-            if (text == args[i].toLowerCase()){
-                found = true;
-            }
-        }
-        
-        return found;    
-    },
-    
-    isSimple: function(type) {
-        return !!this.simple[type];
-    },
-    
-    isComplex: function(type) {
-        return !!this.complex[type];
-    },
-    isAny: function (expression, types) {
-        var args = types.split(" | "),
-            i, len, found = false;
-        
-        for (i=0,len=args.length; i < len && !found && expression.hasNext(); i++){
-            found = this.isType(expression, args[i]);
-        }
-        
-        return found;    
-    },
-    isAnyOfGroup: function(expression, types) {
-        var args = types.split(" || "),
-            i, len, found = false;
-        
-        for (i=0,len=args.length; i < len && !found; i++){
-            found = this.isType(expression, args[i]);
-        }
-        
-        return found ? args[i-1] : false;
-    },
-    isType: function (expression, type) {
-        var part = expression.peek(),
-            result = false;
-            
-        if (type.charAt(0) != "<") {
-            result = this.isLiteral(part, type);
-            if (result) {
-                expression.next();
-            }
-        } else if (this.simple[type]) {
-            result = this.simple[type](part);
-            if (result) {
-                expression.next();
-            }
-        } else {
-            result = this.complex[type](expression);
-        }
-        
-        return result;
-    },
-    
-    
-    
-    simple: {
-
-        "<absolute-size>": function(part){
-            return ValidationTypes.isLiteral(part, "xx-small | x-small | small | medium | large | x-large | xx-large");
-        },
-        
-        "<attachment>": function(part){
-            return ValidationTypes.isLiteral(part, "scroll | fixed | local");
-        },
-        
-        "<attr>": function(part){
-            return part.type == "function" && part.name == "attr";
-        },
-                
-        "<bg-image>": function(part){
-            return this["<image>"](part) || this["<gradient>"](part) ||  part == "none";
-        },        
-        
-        "<gradient>": function(part) {
-            return part.type == "function" && /^(?:\-(?:ms|moz|o|webkit)\-)?(?:repeating\-)?(?:radial\-|linear\-)?gradient/i.test(part);
-        },
-        
-        "<box>": function(part){
-            return ValidationTypes.isLiteral(part, "padding-box | border-box | content-box");
-        },
-        
-        "<content>": function(part){
-            return part.type == "function" && part.name == "content";
-        },        
-        
-        "<relative-size>": function(part){
-            return ValidationTypes.isLiteral(part, "smaller | larger");
-        },
-        "<ident>": function(part){
-            return part.type == "identifier";
-        },
-        
-        "<length>": function(part){
-            if (part.type == "function" && /^(?:\-(?:ms|moz|o|webkit)\-)?calc/i.test(part)){
-                return true;
-            }else{
-                return part.type == "length" || part.type == "number" || part.type == "integer" || part == "0";
-            }
-        },
-        
-        "<color>": function(part){
-            return part.type == "color" || part == "transparent";
-        },
-        
-        "<number>": function(part){
-            return part.type == "number" || this["<integer>"](part);
-        },
-        
-        "<integer>": function(part){
-            return part.type == "integer";
-        },
-        
-        "<line>": function(part){
-            return part.type == "integer";
-        },
-        
-        "<angle>": function(part){
-            return part.type == "angle";
-        },        
-        
-        "<uri>": function(part){
-            return part.type == "uri";
-        },
-        
-        "<image>": function(part){
-            return this["<uri>"](part);
-        },
-        
-        "<percentage>": function(part){
-            return part.type == "percentage" || part == "0";
-        },
-
-        "<border-width>": function(part){
-            return this["<length>"](part) || ValidationTypes.isLiteral(part, "thin | medium | thick");
-        },
-        
-        "<border-style>": function(part){
-            return ValidationTypes.isLiteral(part, "none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset");
-        },
-        
-        "<margin-width>": function(part){
-            return this["<length>"](part) || this["<percentage>"](part) || ValidationTypes.isLiteral(part, "auto");
-        },
-        
-        "<padding-width>": function(part){
-            return this["<length>"](part) || this["<percentage>"](part);
-        },
-        
-        "<shape>": function(part){
-            return part.type == "function" && (part.name == "rect" || part.name == "inset-rect");
-        },
-        
-        "<time>": function(part) {
-            return part.type == "time";
-        }
-    },
-    
-    complex: {
-
-        "<bg-position>": function(expression){
-            var types   = this,
-                result  = false,
-                numeric = "<percentage> | <length>",
-                xDir    = "left | right",
-                yDir    = "top | bottom",
-                count = 0,
-                hasNext = function() {
-                    return expression.hasNext() && expression.peek() != ",";
-                };
-
-            while (expression.peek(count) && expression.peek(count) != ",") {
-                count++;
-            }
-
-            if (count < 3) {
-                if (ValidationTypes.isAny(expression, xDir + " | center | " + numeric)) {
-                        result = true;
-                        ValidationTypes.isAny(expression, yDir + " | center | " + numeric);
-                } else if (ValidationTypes.isAny(expression, yDir)) {
-                        result = true;
-                        ValidationTypes.isAny(expression, xDir + " | center");
-                }
-            } else {
-                if (ValidationTypes.isAny(expression, xDir)) {
-                    if (ValidationTypes.isAny(expression, yDir)) {
-                        result = true;
-                        ValidationTypes.isAny(expression, numeric);
-                    } else if (ValidationTypes.isAny(expression, numeric)) {
-                        if (ValidationTypes.isAny(expression, yDir)) {
-                            result = true;
-                            ValidationTypes.isAny(expression, numeric);
-                        } else if (ValidationTypes.isAny(expression, "center")) {
-                            result = true;
-                        }
-                    }
-                } else if (ValidationTypes.isAny(expression, yDir)) {
-                    if (ValidationTypes.isAny(expression, xDir)) {
-                        result = true;
-                        ValidationTypes.isAny(expression, numeric);
-                    } else if (ValidationTypes.isAny(expression, numeric)) {
-                        if (ValidationTypes.isAny(expression, xDir)) {
-                                result = true;
-                                ValidationTypes.isAny(expression, numeric);
-                        } else if (ValidationTypes.isAny(expression, "center")) {
-                            result = true;
-                        }
-                    }
-                } else if (ValidationTypes.isAny(expression, "center")) {
-                    if (ValidationTypes.isAny(expression, xDir + " | " + yDir)) {
-                        result = true;
-                        ValidationTypes.isAny(expression, numeric);
-                    }
-                }
-            }
-            
-            return result;
-        },
-
-        "<bg-size>": function(expression){
-            var types   = this,
-                result  = false,
-                numeric = "<percentage> | <length> | auto",
-                part,
-                i, len;      
-      
-            if (ValidationTypes.isAny(expression, "cover | contain")) {
-                result = true;
-            } else if (ValidationTypes.isAny(expression, numeric)) {
-                result = true;                
-                ValidationTypes.isAny(expression, numeric);
-            }
-            
-            return result;
-        },
-        
-        "<repeat-style>": function(expression){
-            var result  = false,
-                values  = "repeat | space | round | no-repeat",
-                part;
-            
-            if (expression.hasNext()){
-                part = expression.next();
-                
-                if (ValidationTypes.isLiteral(part, "repeat-x | repeat-y")) {
-                    result = true;                    
-                } else if (ValidationTypes.isLiteral(part, values)) {
-                    result = true;
-
-                    if (expression.hasNext() && ValidationTypes.isLiteral(expression.peek(), values)) {
-                        expression.next();
-                    }
-                }
-            }
-            
-            return result;
-            
-        },
-        
-        "<shadow>": function(expression) {
-            var result  = false,
-                count   = 0,
-                inset   = false,
-                color   = false,
-                part;
-                
-            if (expression.hasNext()) {            
-                
-                if (ValidationTypes.isAny(expression, "inset")){
-                    inset = true;
-                }
-                
-                if (ValidationTypes.isAny(expression, "<color>")) {
-                    color = true;
-                }                
-                
-                while (ValidationTypes.isAny(expression, "<length>") && count < 4) {
-                    count++;
-                }
-                
-                
-                if (expression.hasNext()) {
-                    if (!color) {
-                        ValidationTypes.isAny(expression, "<color>");
-                    }
-                    
-                    if (!inset) {
-                        ValidationTypes.isAny(expression, "inset");
-                    }
-
-                }
-                
-                result = (count >= 2 && count <= 4);
-            
-            }
-            
-            return result;
-        },
-        
-        "<x-one-radius>": function(expression) {
-            var result  = false,
-                count   = 0,
-                numeric = "<length> | <percentage>",
-                part;
-                
-            if (ValidationTypes.isAny(expression, numeric)){
-                result = true;
-                
-                ValidationTypes.isAny(expression, numeric);
-            }                
-            
-            return result;
-        }
-    }
-};
-
-
-
-parserlib.css = {
-Colors              :Colors,
-Combinator          :Combinator,
-Parser              :Parser,
-PropertyName        :PropertyName,
-PropertyValue       :PropertyValue,
-PropertyValuePart   :PropertyValuePart,
-MediaFeature        :MediaFeature,
-MediaQuery          :MediaQuery,
-Selector            :Selector,
-SelectorPart        :SelectorPart,
-SelectorSubPart     :SelectorSubPart,
-Specificity         :Specificity,
-TokenStream         :TokenStream,
-Tokens              :Tokens,
-ValidationError     :ValidationError
-};
-})();
-var CSSLint = (function(){
-
-    var rules           = [],
-        formatters      = [],
-        embeddedRuleset = /\/\*csslint([^\*]*)\*\//,
-        api             = new parserlib.util.EventTarget();
-
-    api.version = "0.9.10";
-    api.addRule = function(rule){
-        rules.push(rule);
-        rules[rule.id] = rule;
-    };
-    api.clearRules = function(){
-        rules = [];
-    };
-    api.getRules = function(){
-        return [].concat(rules).sort(function(a,b){
-            return a.id > b.id ? 1 : 0;
-        });
-    };
-    api.getRuleset = function() {
-        var ruleset = {},
-            i = 0,
-            len = rules.length;
-
-        while (i < len){
-            ruleset[rules[i++].id] = 1;    //by default, everything is a warning
-        }
-
-        return ruleset;
-    };
-    function applyEmbeddedRuleset(text, ruleset){
-        var valueMap,
-            embedded = text && text.match(embeddedRuleset),
-            rules = embedded && embedded[1];
-
-        if (rules) {
-            valueMap = {
-                "true": 2,  // true is error
-                "": 1,      // blank is warning
-                "false": 0, // false is ignore
-
-                "2": 2,     // explicit error
-                "1": 1,     // explicit warning
-                "0": 0      // explicit ignore
-            };
-
-            rules.toLowerCase().split(",").forEach(function(rule){
-                var pair = rule.split(":"),
-                    property = pair[0] || "",
-                    value = pair[1] || "";
-
-                ruleset[property.trim()] = valueMap[value.trim()];
-            });
-        }
-
-        return ruleset;
-    }
-    api.addFormatter = function(formatter) {
-        formatters[formatter.id] = formatter;
-    };
-    api.getFormatter = function(formatId){
-        return formatters[formatId];
-    };
-    api.format = function(results, filename, formatId, options) {
-        var formatter = this.getFormatter(formatId),
-            result = null;
-
-        if (formatter){
-            result = formatter.startFormat();
-            result += formatter.formatResults(results, filename, options || {});
-            result += formatter.endFormat();
-        }
-
-        return result;
-    };
-    api.hasFormat = function(formatId){
-        return formatters.hasOwnProperty(formatId);
-    };
-    api.verify = function(text, ruleset){
-
-        var i       = 0,
-            len     = rules.length,
-            reporter,
-            lines,
-            report,
-            parser = new parserlib.css.Parser({ starHack: true, ieFilters: true,
-                                                underscoreHack: true, strict: false });
-        lines = text.replace(/\n\r?/g, "$split$").split('$split$');
-
-        if (!ruleset){
-            ruleset = this.getRuleset();
-        }
-
-        if (embeddedRuleset.test(text)){
-            ruleset = applyEmbeddedRuleset(text, ruleset);
-        }
-
-        reporter = new Reporter(lines, ruleset);
-
-        ruleset.errors = 2;       //always report parsing errors as errors
-        for (i in ruleset){
-            if(ruleset.hasOwnProperty(i) && ruleset[i]){
-                if (rules[i]){
-                    rules[i].init(parser, reporter);
-                }
-            }
-        }
-        try {
-            parser.parse(text);
-        } catch (ex) {
-            reporter.error("Fatal error, cannot continue: " + ex.message, ex.line, ex.col, {});
-        }
-
-        report = {
-            messages    : reporter.messages,
-            stats       : reporter.stats,
-            ruleset     : reporter.ruleset
-        };
-        report.messages.sort(function (a, b){
-            if (a.rollup && !b.rollup){
-                return 1;
-            } else if (!a.rollup && b.rollup){
-                return -1;
-            } else {
-                return a.line - b.line;
-            }
-        });
-
-        return report;
-    };
-
-    return api;
-
-})();
-function Reporter(lines, ruleset){
-    this.messages = [];
-    this.stats = [];
-    this.lines = lines;
-    this.ruleset = ruleset;
-}
-
-Reporter.prototype = {
-    constructor: Reporter,
-    error: function(message, line, col, rule){
-        this.messages.push({
-            type    : "error",
-            line    : line,
-            col     : col,
-            message : message,
-            evidence: this.lines[line-1],
-            rule    : rule || {}
-        });
-    },
-    warn: function(message, line, col, rule){
-        this.report(message, line, col, rule);
-    },
-    report: function(message, line, col, rule){
-        this.messages.push({
-            type    : this.ruleset[rule.id] == 2 ? "error" : "warning",
-            line    : line,
-            col     : col,
-            message : message,
-            evidence: this.lines[line-1],
-            rule    : rule
-        });
-    },
-    info: function(message, line, col, rule){
-        this.messages.push({
-            type    : "info",
-            line    : line,
-            col     : col,
-            message : message,
-            evidence: this.lines[line-1],
-            rule    : rule
-        });
-    },
-    rollupError: function(message, rule){
-        this.messages.push({
-            type    : "error",
-            rollup  : true,
-            message : message,
-            rule    : rule
-        });
-    },
-    rollupWarn: function(message, rule){
-        this.messages.push({
-            type    : "warning",
-            rollup  : true,
-            message : message,
-            rule    : rule
-        });
-    },
-    stat: function(name, value){
-        this.stats[name] = value;
-    }
-};
-CSSLint._Reporter = Reporter;
-CSSLint.Util = {
-    mix: function(receiver, supplier){
-        var prop;
-
-        for (prop in supplier){
-            if (supplier.hasOwnProperty(prop)){
-                receiver[prop] = supplier[prop];
-            }
-        }
-
-        return prop;
-    },
-    indexOf: function(values, value){
-        if (values.indexOf){
-            return values.indexOf(value);
-        } else {
-            for (var i=0, len=values.length; i < len; i++){
-                if (values[i] === value){
-                    return i;
-                }
-            }
-            return -1;
-        }
-    },
-    forEach: function(values, func) {
-        if (values.forEach){
-            return values.forEach(func);
-        } else {
-            for (var i=0, len=values.length; i < len; i++){
-                func(values[i], i, values);
-            }
-        }
-    }
-};
-CSSLint.addRule({
-    id: "adjoining-classes",
-    name: "Disallow adjoining classes",
-    desc: "Don't use adjoining classes.",
-    browsers: "IE6",
-    init: function(parser, reporter){
-        var rule = this;
-        parser.addListener("startrule", function(event){
-            var selectors = event.selectors,
-                selector,
-                part,
-                modifier,
-                classCount,
-                i, j, k;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-                for (j=0; j < selector.parts.length; j++){
-                    part = selector.parts[j];
-                    if (part.type == parser.SELECTOR_PART_TYPE){
-                        classCount = 0;
-                        for (k=0; k < part.modifiers.length; k++){
-                            modifier = part.modifiers[k];
-                            if (modifier.type == "class"){
-                                classCount++;
-                            }
-                            if (classCount > 1){
-                                reporter.report("Don't use adjoining classes.", part.line, part.col, rule);
-                            }
-                        }
-                    }
-                }
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "box-model",
-    name: "Beware of broken box size",
-    desc: "Don't use width or height when using padding or border.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            widthProperties = {
-                border: 1,
-                "border-left": 1,
-                "border-right": 1,
-                padding: 1,
-                "padding-left": 1,
-                "padding-right": 1
-            },
-            heightProperties = {
-                border: 1,
-                "border-bottom": 1,
-                "border-top": 1,
-                padding: 1,
-                "padding-bottom": 1,
-                "padding-top": 1
-            },
-            properties,
-            boxSizing = false;
-
-        function startRule(){
-            properties = {};
-            boxSizing = false;
-        }
-
-        function endRule(){
-            var prop, value;
-            
-            if (!boxSizing) {
-                if (properties.height){
-                    for (prop in heightProperties){
-                        if (heightProperties.hasOwnProperty(prop) && properties[prop]){
-                            value = properties[prop].value;
-                            if (!(prop == "padding" && value.parts.length === 2 && value.parts[0].value === 0)){
-                                reporter.report("Using height with " + prop + " can sometimes make elements larger than you expect.", properties[prop].line, properties[prop].col, rule);
-                            }
-                        }
-                    }
-                }
-
-                if (properties.width){
-                    for (prop in widthProperties){
-                        if (widthProperties.hasOwnProperty(prop) && properties[prop]){
-                            value = properties[prop].value;
-                            
-                            if (!(prop == "padding" && value.parts.length === 2 && value.parts[1].value === 0)){
-                                reporter.report("Using width with " + prop + " can sometimes make elements larger than you expect.", properties[prop].line, properties[prop].col, rule);
-                            }
-                        }
-                    }
-                }   
-            }     
-        }
-
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("startpage", startRule);
-        parser.addListener("startpagemargin", startRule);
-        parser.addListener("startkeyframerule", startRule); 
-
-        parser.addListener("property", function(event){
-            var name = event.property.text.toLowerCase();
-            
-            if (heightProperties[name] || widthProperties[name]){
-                if (!/^0\S*$/.test(event.value) && !(name == "border" && event.value == "none")){
-                    properties[name] = { line: event.property.line, col: event.property.col, value: event.value };
-                }
-            } else {
-                if (/^(width|height)/i.test(name) && /^(length|percentage)/.test(event.value.parts[0].type)){
-                    properties[name] = 1;
-                } else if (name == "box-sizing") {
-                    boxSizing = true;
-                }
-            }
-            
-        });
-
-        parser.addListener("endrule", endRule);
-        parser.addListener("endfontface", endRule);
-        parser.addListener("endpage", endRule);
-        parser.addListener("endpagemargin", endRule);
-        parser.addListener("endkeyframerule", endRule);         
-    }
-
-});
-CSSLint.addRule({
-    id: "box-sizing",
-    name: "Disallow use of box-sizing",
-    desc: "The box-sizing properties isn't supported in IE6 and IE7.",
-    browsers: "IE6, IE7",
-    tags: ["Compatibility"],
-    init: function(parser, reporter){
-        var rule = this;
-
-        parser.addListener("property", function(event){
-            var name = event.property.text.toLowerCase();
-   
-            if (name == "box-sizing"){
-                reporter.report("The box-sizing property isn't supported in IE6 and IE7.", event.line, event.col, rule);
-            }
-        });       
-    }
-
-});
-CSSLint.addRule({
-    id: "bulletproof-font-face",
-    name: "Use the bulletproof @font-face syntax",
-    desc: "Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            count = 0,
-            fontFaceRule = false,
-            firstSrc     = true,
-            ruleFailed    = false,
-            line, col;
-        parser.addListener("startfontface", function(event){
-            fontFaceRule = true;
-        });
-
-        parser.addListener("property", function(event){
-            if (!fontFaceRule) {
-                return;
-            }
-
-            var propertyName = event.property.toString().toLowerCase(),
-                value        = event.value.toString();
-            line = event.line;
-            col  = event.col;
-            if (propertyName === 'src') {
-                var regex = /^\s?url\(['"].+\.eot\?.*['"]\)\s*format\(['"]embedded-opentype['"]\).*$/i;
-                if (!value.match(regex) && firstSrc) {
-                    ruleFailed = true;
-                    firstSrc = false;
-                } else if (value.match(regex) && !firstSrc) {
-                    ruleFailed = false;
-                }
-            }
-
-
-        });
-        parser.addListener("endfontface", function(event){
-            fontFaceRule = false;
-
-            if (ruleFailed) {
-                reporter.report("@font-face declaration doesn't follow the fontspring bulletproof syntax.", line, col, rule);
-            }
-        });
-    }
-}); 
-CSSLint.addRule({
-    id: "compatible-vendor-prefixes",
-    name: "Require compatible vendor prefixes",
-    desc: "Include all compatible vendor prefixes to reach a wider range of users.",
-    browsers: "All",
-    init: function (parser, reporter) {
-        var rule = this,
-            compatiblePrefixes,
-            properties,
-            prop,
-            variations,
-            prefixed,
-            i,
-            len,
-            inKeyFrame = false,
-            arrayPush = Array.prototype.push,
-            applyTo = [];
-        compatiblePrefixes = {
-            "animation"                  : "webkit moz",
-            "animation-delay"            : "webkit moz",
-            "animation-direction"        : "webkit moz",
-            "animation-duration"         : "webkit moz",
-            "animation-fill-mode"        : "webkit moz",
-            "animation-iteration-count"  : "webkit moz",
-            "animation-name"             : "webkit moz",
-            "animation-play-state"       : "webkit moz",
-            "animation-timing-function"  : "webkit moz",
-            "appearance"                 : "webkit moz",
-            "border-end"                 : "webkit moz",
-            "border-end-color"           : "webkit moz",
-            "border-end-style"           : "webkit moz",
-            "border-end-width"           : "webkit moz",
-            "border-image"               : "webkit moz o",
-            "border-radius"              : "webkit",
-            "border-start"               : "webkit moz",
-            "border-start-color"         : "webkit moz",
-            "border-start-style"         : "webkit moz",
-            "border-start-width"         : "webkit moz",
-            "box-align"                  : "webkit moz ms",
-            "box-direction"              : "webkit moz ms",
-            "box-flex"                   : "webkit moz ms",
-            "box-lines"                  : "webkit ms",
-            "box-ordinal-group"          : "webkit moz ms",
-            "box-orient"                 : "webkit moz ms",
-            "box-pack"                   : "webkit moz ms",
-            "box-sizing"                 : "webkit moz",
-            "box-shadow"                 : "webkit moz",
-            "column-count"               : "webkit moz ms",
-            "column-gap"                 : "webkit moz ms",
-            "column-rule"                : "webkit moz ms",
-            "column-rule-color"          : "webkit moz ms",
-            "column-rule-style"          : "webkit moz ms",
-            "column-rule-width"          : "webkit moz ms",
-            "column-width"               : "webkit moz ms",
-            "hyphens"                    : "epub moz",
-            "line-break"                 : "webkit ms",
-            "margin-end"                 : "webkit moz",
-            "margin-start"               : "webkit moz",
-            "marquee-speed"              : "webkit wap",
-            "marquee-style"              : "webkit wap",
-            "padding-end"                : "webkit moz",
-            "padding-start"              : "webkit moz",
-            "tab-size"                   : "moz o",
-            "text-size-adjust"           : "webkit ms",
-            "transform"                  : "webkit moz ms o",
-            "transform-origin"           : "webkit moz ms o",
-            "transition"                 : "webkit moz o",
-            "transition-delay"           : "webkit moz o",
-            "transition-duration"        : "webkit moz o",
-            "transition-property"        : "webkit moz o",
-            "transition-timing-function" : "webkit moz o",
-            "user-modify"                : "webkit moz",
-            "user-select"                : "webkit moz ms",
-            "word-break"                 : "epub ms",
-            "writing-mode"               : "epub ms"
-        };
-
-
-        for (prop in compatiblePrefixes) {
-            if (compatiblePrefixes.hasOwnProperty(prop)) {
-                variations = [];
-                prefixed = compatiblePrefixes[prop].split(' ');
-                for (i = 0, len = prefixed.length; i < len; i++) {
-                    variations.push('-' + prefixed[i] + '-' + prop);
-                }
-                compatiblePrefixes[prop] = variations;
-                arrayPush.apply(applyTo, variations);
-            }
-        }
-                
-        parser.addListener("startrule", function () {
-            properties = [];
-        });
-
-        parser.addListener("startkeyframes", function (event) {
-            inKeyFrame = event.prefix || true;
-        });
-
-        parser.addListener("endkeyframes", function (event) {
-            inKeyFrame = false;
-        });
-
-        parser.addListener("property", function (event) {
-            var name = event.property;
-            if (CSSLint.Util.indexOf(applyTo, name.text) > -1) {
-                if (!inKeyFrame || typeof inKeyFrame != "string" || 
-                        name.text.indexOf("-" + inKeyFrame + "-") !== 0) {
-                    properties.push(name);
-                }
-            }
-        });
-
-        parser.addListener("endrule", function (event) {
-            if (!properties.length) {
-                return;
-            }
-
-            var propertyGroups = {},
-                i,
-                len,
-                name,
-                prop,
-                variations,
-                value,
-                full,
-                actual,
-                item,
-                propertiesSpecified;
-
-            for (i = 0, len = properties.length; i < len; i++) {
-                name = properties[i];
-
-                for (prop in compatiblePrefixes) {
-                    if (compatiblePrefixes.hasOwnProperty(prop)) {
-                        variations = compatiblePrefixes[prop];
-                        if (CSSLint.Util.indexOf(variations, name.text) > -1) {
-                            if (!propertyGroups[prop]) {
-                                propertyGroups[prop] = {
-                                    full : variations.slice(0),
-                                    actual : [],
-                                    actualNodes: []
-                                };
-                            }
-                            if (CSSLint.Util.indexOf(propertyGroups[prop].actual, name.text) === -1) {
-                                propertyGroups[prop].actual.push(name.text);
-                                propertyGroups[prop].actualNodes.push(name);
-                            }
-                        }
-                    }
-                }
-            }
-
-            for (prop in propertyGroups) {
-                if (propertyGroups.hasOwnProperty(prop)) {
-                    value = propertyGroups[prop];
-                    full = value.full;
-                    actual = value.actual;
-
-                    if (full.length > actual.length) {
-                        for (i = 0, len = full.length; i < len; i++) {
-                            item = full[i];
-                            if (CSSLint.Util.indexOf(actual, item) === -1) {
-                                propertiesSpecified = (actual.length === 1) ? actual[0] : (actual.length == 2) ? actual.join(" and ") : actual.join(", ");
-                                reporter.report("The property " + item + " is compatible with " + propertiesSpecified + " and should be included as well.", value.actualNodes[0].line, value.actualNodes[0].col, rule); 
-                            }
-                        }
-
-                    }
-                }
-            }
-        });
-    }
-});
-CSSLint.addRule({
-    id: "display-property-grouping",
-    name: "Require properties appropriate for display",
-    desc: "Certain properties shouldn't be used with certain display property values.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        var propertiesToCheck = {
-                display: 1,
-                "float": "none",
-                height: 1,
-                width: 1,
-                margin: 1,
-                "margin-left": 1,
-                "margin-right": 1,
-                "margin-bottom": 1,
-                "margin-top": 1,
-                padding: 1,
-                "padding-left": 1,
-                "padding-right": 1,
-                "padding-bottom": 1,
-                "padding-top": 1,
-                "vertical-align": 1
-            },
-            properties;
-
-        function reportProperty(name, display, msg){
-            if (properties[name]){
-                if (typeof propertiesToCheck[name] != "string" || properties[name].value.toLowerCase() != propertiesToCheck[name]){
-                    reporter.report(msg || name + " can't be used with display: " + display + ".", properties[name].line, properties[name].col, rule);
-                }
-            }
-        }
-        
-        function startRule(){
-            properties = {};
-        }
-
-        function endRule(){
-
-            var display = properties.display ? properties.display.value : null;
-            if (display){
-                switch(display){
-
-                    case "inline":
-                        reportProperty("height", display);
-                        reportProperty("width", display);
-                        reportProperty("margin", display);
-                        reportProperty("margin-top", display);
-                        reportProperty("margin-bottom", display);              
-                        reportProperty("float", display, "display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).");
-                        break;
-
-                    case "block":
-                        reportProperty("vertical-align", display);
-                        break;
-
-                    case "inline-block":
-                        reportProperty("float", display);
-                        break;
-
-                    default:
-                        if (display.indexOf("table-") === 0){
-                            reportProperty("margin", display);
-                            reportProperty("margin-left", display);
-                            reportProperty("margin-right", display);
-                            reportProperty("margin-top", display);
-                            reportProperty("margin-bottom", display);
-                            reportProperty("float", display);
-                        }
-                }
-            }
-          
-        }
-
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("startkeyframerule", startRule);
-        parser.addListener("startpagemargin", startRule);
-        parser.addListener("startpage", startRule);
-
-        parser.addListener("property", function(event){
-            var name = event.property.text.toLowerCase();
-
-            if (propertiesToCheck[name]){
-                properties[name] = { value: event.value.text, line: event.property.line, col: event.property.col };                    
-            }
-        });
-
-        parser.addListener("endrule", endRule);
-        parser.addListener("endfontface", endRule);
-        parser.addListener("endkeyframerule", endRule);
-        parser.addListener("endpagemargin", endRule);
-        parser.addListener("endpage", endRule);
-
-    }
-
-});
-CSSLint.addRule({
-    id: "duplicate-background-images",
-    name: "Disallow duplicate background images",
-    desc: "Every background-image should be unique. Use a common class for e.g. sprites.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            stack = {};
-
-        parser.addListener("property", function(event){
-            var name = event.property.text,
-                value = event.value,
-                i, len;
-
-            if (name.match(/background/i)) {
-                for (i=0, len=value.parts.length; i < len; i++) {
-                    if (value.parts[i].type == 'uri') {
-                        if (typeof stack[value.parts[i].uri] === 'undefined') {
-                            stack[value.parts[i].uri] = event;
-                        }
-                        else {
-                            reporter.report("Background image '" + value.parts[i].uri + "' was used multiple times, first declared at line " + stack[value.parts[i].uri].line + ", col " + stack[value.parts[i].uri].col + ".", event.line, event.col, rule);
-                        }
-                    }
-                }
-            }
-        });
-    }
-});
-CSSLint.addRule({
-    id: "duplicate-properties",
-    name: "Disallow duplicate properties",
-    desc: "Duplicate properties must appear one after the other.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            properties,
-            lastProperty;            
-            
-        function startRule(event){
-            properties = {};        
-        }
-        
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("startpage", startRule);
-        parser.addListener("startpagemargin", startRule);
-        parser.addListener("startkeyframerule", startRule);        
-        
-        parser.addListener("property", function(event){
-            var property = event.property,
-                name = property.text.toLowerCase();
-            
-            if (properties[name] && (lastProperty != name || properties[name] == event.value.text)){
-                reporter.report("Duplicate property '" + event.property + "' found.", event.line, event.col, rule);
-            }
-            
-            properties[name] = event.value.text;
-            lastProperty = name;
-                        
-        });
-            
-        
-    }
-
-});
-CSSLint.addRule({
-    id: "empty-rules",
-    name: "Disallow empty rules",
-    desc: "Rules without any properties specified should be removed.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            count = 0;
-
-        parser.addListener("startrule", function(){
-            count=0;
-        });
-
-        parser.addListener("property", function(){
-            count++;
-        });
-
-        parser.addListener("endrule", function(event){
-            var selectors = event.selectors;
-            if (count === 0){
-                reporter.report("Rule is empty.", selectors[0].line, selectors[0].col, rule);
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "errors",
-    name: "Parsing Errors",
-    desc: "This rule looks for recoverable syntax errors.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        parser.addListener("error", function(event){
-            reporter.error(event.message, event.line, event.col, rule);
-        });
-
-    }
-
-});
-CSSLint.addRule({
-    id: "fallback-colors",
-    name: "Require fallback colors",
-    desc: "For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.",
-    browsers: "IE6,IE7,IE8",
-    init: function(parser, reporter){
-        var rule = this,
-            lastProperty,
-            propertiesToCheck = {
-                color: 1,
-                background: 1,
-                "border-color": 1,
-                "border-top-color": 1,
-                "border-right-color": 1,
-                "border-bottom-color": 1,
-                "border-left-color": 1,
-                border: 1,
-                "border-top": 1,
-                "border-right": 1,
-                "border-bottom": 1,
-                "border-left": 1,
-                "background-color": 1
-            },
-            properties;
-        
-        function startRule(event){
-            properties = {};    
-            lastProperty = null;    
-        }
-        
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("startpage", startRule);
-        parser.addListener("startpagemargin", startRule);
-        parser.addListener("startkeyframerule", startRule);        
-        
-        parser.addListener("property", function(event){
-            var property = event.property,
-                name = property.text.toLowerCase(),
-                parts = event.value.parts,
-                i = 0, 
-                colorType = "",
-                len = parts.length;                
-                        
-            if(propertiesToCheck[name]){
-                while(i < len){
-                    if (parts[i].type == "color"){
-                        if ("alpha" in parts[i] || "hue" in parts[i]){
-                            
-                            if (/([^\)]+)\(/.test(parts[i])){
-                                colorType = RegExp.$1.toUpperCase();
-                            }
-                            
-                            if (!lastProperty || (lastProperty.property.text.toLowerCase() != name || lastProperty.colorType != "compat")){
-                                reporter.report("Fallback " + name + " (hex or RGB) should precede " + colorType + " " + name + ".", event.line, event.col, rule);
-                            }
-                        } else {
-                            event.colorType = "compat";
-                        }
-                    }
-                    
-                    i++;
-                }
-            }
-
-            lastProperty = event;
-        });        
-         
-    }
-
-});
-CSSLint.addRule({
-    id: "floats",
-    name: "Disallow too many floats",
-    desc: "This rule tests if the float property is used too many times",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-        var count = 0;
-        parser.addListener("property", function(event){
-            if (event.property.text.toLowerCase() == "float" &&
-                    event.value.text.toLowerCase() != "none"){
-                count++;
-            }
-        });
-        parser.addListener("endstylesheet", function(){
-            reporter.stat("floats", count);
-            if (count >= 10){
-                reporter.rollupWarn("Too many floats (" + count + "), you're probably using them for layout. Consider using a grid system instead.", rule);
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "font-faces",
-    name: "Don't use too many web fonts",
-    desc: "Too many different web fonts in the same stylesheet.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            count = 0;
-
-
-        parser.addListener("startfontface", function(){
-            count++;
-        });
-
-        parser.addListener("endstylesheet", function(){
-            if (count > 5){
-                reporter.rollupWarn("Too many @font-face declarations (" + count + ").", rule);
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "font-sizes",
-    name: "Disallow too many font sizes",
-    desc: "Checks the number of font-size declarations.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            count = 0;
-        parser.addListener("property", function(event){
-            if (event.property == "font-size"){
-                count++;
-            }
-        });
-        parser.addListener("endstylesheet", function(){
-            reporter.stat("font-sizes", count);
-            if (count >= 10){
-                reporter.rollupWarn("Too many font-size declarations (" + count + "), abstraction needed.", rule);
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "gradients",
-    name: "Require all gradient definitions",
-    desc: "When using a vendor-prefixed gradient, make sure to use them all.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            gradients;
-
-        parser.addListener("startrule", function(){
-            gradients = {
-                moz: 0,
-                webkit: 0,
-                oldWebkit: 0,
-                o: 0
-            };
-        });
-
-        parser.addListener("property", function(event){
-
-            if (/\-(moz|o|webkit)(?:\-(?:linear|radial))\-gradient/i.test(event.value)){
-                gradients[RegExp.$1] = 1;
-            } else if (/\-webkit\-gradient/i.test(event.value)){
-                gradients.oldWebkit = 1;
-            }
-
-        });
-
-        parser.addListener("endrule", function(event){
-            var missing = [];
-
-            if (!gradients.moz){
-                missing.push("Firefox 3.6+");
-            }
-
-            if (!gradients.webkit){
-                missing.push("Webkit (Safari 5+, Chrome)");
-            }
-            
-            if (!gradients.oldWebkit){
-                missing.push("Old Webkit (Safari 4+, Chrome)");
-            }
-
-            if (!gradients.o){
-                missing.push("Opera 11.1+");
-            }
-
-            if (missing.length && missing.length < 4){            
-                reporter.report("Missing vendor-prefixed CSS gradients for " + missing.join(", ") + ".", event.selectors[0].line, event.selectors[0].col, rule); 
-            }
-
-        });
-
-    }
-
-});
-CSSLint.addRule({
-    id: "ids",
-    name: "Disallow IDs in selectors",
-    desc: "Selectors should not contain IDs.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-        parser.addListener("startrule", function(event){
-            var selectors = event.selectors,
-                selector,
-                part,
-                modifier,
-                idCount,
-                i, j, k;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-                idCount = 0;
-
-                for (j=0; j < selector.parts.length; j++){
-                    part = selector.parts[j];
-                    if (part.type == parser.SELECTOR_PART_TYPE){
-                        for (k=0; k < part.modifiers.length; k++){
-                            modifier = part.modifiers[k];
-                            if (modifier.type == "id"){
-                                idCount++;
-                            }
-                        }
-                    }
-                }
-
-                if (idCount == 1){
-                    reporter.report("Don't use IDs in selectors.", selector.line, selector.col, rule);
-                } else if (idCount > 1){
-                    reporter.report(idCount + " IDs in the selector, really?", selector.line, selector.col, rule);
-                }
-            }
-
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "import",
-    name: "Disallow @import",
-    desc: "Don't use @import, use <link> instead.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-        
-        parser.addListener("import", function(event){        
-            reporter.report("@import prevents parallel downloads, use <link> instead.", event.line, event.col, rule);
-        });
-
-    }
-
-});
-CSSLint.addRule({
-    id: "important",
-    name: "Disallow !important",
-    desc: "Be careful when using !important declaration",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            count = 0;
-        parser.addListener("property", function(event){
-            if (event.important === true){
-                count++;
-                reporter.report("Use of !important", event.line, event.col, rule);
-            }
-        });
-        parser.addListener("endstylesheet", function(){
-            reporter.stat("important", count);
-            if (count >= 10){
-                reporter.rollupWarn("Too many !important declarations (" + count + "), try to use less than 10 to avoid specificity issues.", rule);
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "known-properties",
-    name: "Require use of known properties",
-    desc: "Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        parser.addListener("property", function(event){
-            var name = event.property.text.toLowerCase();
-            if (event.invalid) {
-                reporter.report(event.invalid.message, event.line, event.col, rule);
-            }
-
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "outline-none",
-    name: "Disallow outline: none",
-    desc: "Use of outline: none or outline: 0 should be limited to :focus rules.",
-    browsers: "All",
-    tags: ["Accessibility"],
-    init: function(parser, reporter){
-        var rule = this,
-            lastRule;
-
-        function startRule(event){
-            if (event.selectors){
-                lastRule = {
-                    line: event.line,
-                    col: event.col,
-                    selectors: event.selectors,
-                    propCount: 0,
-                    outline: false
-                };
-            } else {
-                lastRule = null;
-            }
-        }
-        
-        function endRule(event){
-            if (lastRule){
-                if (lastRule.outline){
-                    if (lastRule.selectors.toString().toLowerCase().indexOf(":focus") == -1){
-                        reporter.report("Outlines should only be modified using :focus.", lastRule.line, lastRule.col, rule);
-                    } else if (lastRule.propCount == 1) {
-                        reporter.report("Outlines shouldn't be hidden unless other visual changes are made.", lastRule.line, lastRule.col, rule);                        
-                    }
-                }
-            }
-        }
-
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("startpage", startRule);
-        parser.addListener("startpagemargin", startRule);
-        parser.addListener("startkeyframerule", startRule); 
-
-        parser.addListener("property", function(event){
-            var name = event.property.text.toLowerCase(),
-                value = event.value;                
-                
-            if (lastRule){
-                lastRule.propCount++;
-                if (name == "outline" && (value == "none" || value == "0")){
-                    lastRule.outline = true;
-                }            
-            }
-            
-        });
-        
-        parser.addListener("endrule", endRule);
-        parser.addListener("endfontface", endRule);
-        parser.addListener("endpage", endRule);
-        parser.addListener("endpagemargin", endRule);
-        parser.addListener("endkeyframerule", endRule); 
-
-    }
-
-});
-CSSLint.addRule({
-    id: "overqualified-elements",
-    name: "Disallow overqualified elements",
-    desc: "Don't use classes or IDs with elements (a.foo or a#foo).",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            classes = {};
-            
-        parser.addListener("startrule", function(event){
-            var selectors = event.selectors,
-                selector,
-                part,
-                modifier,
-                i, j, k;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-
-                for (j=0; j < selector.parts.length; j++){
-                    part = selector.parts[j];
-                    if (part.type == parser.SELECTOR_PART_TYPE){
-                        for (k=0; k < part.modifiers.length; k++){
-                            modifier = part.modifiers[k];
-                            if (part.elementName && modifier.type == "id"){
-                                reporter.report("Element (" + part + ") is overqualified, just use " + modifier + " without element name.", part.line, part.col, rule);
-                            } else if (modifier.type == "class"){
-                                
-                                if (!classes[modifier]){
-                                    classes[modifier] = [];
-                                }
-                                classes[modifier].push({ modifier: modifier, part: part });
-                            }
-                        }
-                    }
-                }
-            }
-        });
-        
-        parser.addListener("endstylesheet", function(){
-        
-            var prop;
-            for (prop in classes){
-                if (classes.hasOwnProperty(prop)){
-                    if (classes[prop].length == 1 && classes[prop][0].part.elementName){
-                        reporter.report("Element (" + classes[prop][0].part + ") is overqualified, just use " + classes[prop][0].modifier + " without element name.", classes[prop][0].part.line, classes[prop][0].part.col, rule);
-                    }
-                }
-            }        
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "qualified-headings",
-    name: "Disallow qualified headings",
-    desc: "Headings should not be qualified (namespaced).",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        parser.addListener("startrule", function(event){
-            var selectors = event.selectors,
-                selector,
-                part,
-                i, j;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-
-                for (j=0; j < selector.parts.length; j++){
-                    part = selector.parts[j];
-                    if (part.type == parser.SELECTOR_PART_TYPE){
-                        if (part.elementName && /h[1-6]/.test(part.elementName.toString()) && j > 0){
-                            reporter.report("Heading (" + part.elementName + ") should not be qualified.", part.line, part.col, rule);
-                        }
-                    }
-                }
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "regex-selectors",
-    name: "Disallow selectors that look like regexs",
-    desc: "Selectors that look like regular expressions are slow and should be avoided.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        parser.addListener("startrule", function(event){
-            var selectors = event.selectors,
-                selector,
-                part,
-                modifier,
-                i, j, k;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-                for (j=0; j < selector.parts.length; j++){
-                    part = selector.parts[j];
-                    if (part.type == parser.SELECTOR_PART_TYPE){
-                        for (k=0; k < part.modifiers.length; k++){
-                            modifier = part.modifiers[k];
-                            if (modifier.type == "attribute"){
-                                if (/([\~\|\^\$\*]=)/.test(modifier)){
-                                    reporter.report("Attribute selectors with " + RegExp.$1 + " are slow!", modifier.line, modifier.col, rule);
-                                }
-                            }
-
-                        }
-                    }
-                }
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "rules-count",
-    name: "Rules Count",
-    desc: "Track how many rules there are.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            count = 0;
-        parser.addListener("startrule", function(){
-            count++;
-        });
-
-        parser.addListener("endstylesheet", function(){
-            reporter.stat("rule-count", count);
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "selector-max-approaching",
-    name: "Warn when approaching the 4095 selector limit for IE",
-    desc: "Will warn when selector count is >= 3800 selectors.",
-    browsers: "IE",
-    init: function(parser, reporter) {
-        var rule = this, count = 0;
-
-        parser.addListener('startrule', function(event) {
-            count += event.selectors.length;
-        });
-
-        parser.addListener("endstylesheet", function() {
-            if (count >= 3800) {
-                reporter.report("You have " + count + " selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.",0,0,rule); 
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "selector-max",
-    name: "Error when past the 4095 selector limit for IE",
-    desc: "Will error when selector count is > 4095.",
-    browsers: "IE",
-    init: function(parser, reporter){
-        var rule = this, count = 0;
-
-        parser.addListener('startrule',function(event) {
-            count += event.selectors.length;
-        });
-
-        parser.addListener("endstylesheet", function() {
-            if (count > 4095) {
-                reporter.report("You have " + count + " selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.",0,0,rule); 
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "shorthand",
-    name: "Require shorthand properties",
-    desc: "Use shorthand properties where possible.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            prop, i, len,
-            propertiesToCheck = {},
-            properties,
-            mapping = {
-                "margin": [
-                    "margin-top",
-                    "margin-bottom",
-                    "margin-left",
-                    "margin-right"
-                ],
-                "padding": [
-                    "padding-top",
-                    "padding-bottom",
-                    "padding-left",
-                    "padding-right"
-                ]              
-            };
-        for (prop in mapping){
-            if (mapping.hasOwnProperty(prop)){
-                for (i=0, len=mapping[prop].length; i < len; i++){
-                    propertiesToCheck[mapping[prop][i]] = prop;
-                }
-            }
-        }
-            
-        function startRule(event){
-            properties = {};
-        }
-        function endRule(event){
-            
-            var prop, i, len, total;
-            for (prop in mapping){
-                if (mapping.hasOwnProperty(prop)){
-                    total=0;
-                    
-                    for (i=0, len=mapping[prop].length; i < len; i++){
-                        total += properties[mapping[prop][i]] ? 1 : 0;
-                    }
-                    
-                    if (total == mapping[prop].length){
-                        reporter.report("The properties " + mapping[prop].join(", ") + " can be replaced by " + prop + ".", event.line, event.col, rule);
-                    }
-                }
-            }
-        }        
-        
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("property", function(event){
-            var name = event.property.toString().toLowerCase(),
-                value = event.value.parts[0].value;
-
-            if (propertiesToCheck[name]){
-                properties[name] = 1;
-            }
-        });
-
-        parser.addListener("endrule", endRule);
-        parser.addListener("endfontface", endRule);     
-
-    }
-
-});
-CSSLint.addRule({
-    id: "star-property-hack",
-    name: "Disallow properties with a star prefix",
-    desc: "Checks for the star property hack (targets IE6/7)",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-        parser.addListener("property", function(event){
-            var property = event.property;
-
-            if (property.hack == "*") {
-                reporter.report("Property with star prefix found.", event.property.line, event.property.col, rule);
-            }
-        });
-    }
-});
-CSSLint.addRule({
-    id: "text-indent",
-    name: "Disallow negative text-indent",
-    desc: "Checks for text indent less than -99px",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            textIndent,
-            direction;
-
-
-        function startRule(event){
-            textIndent = false;
-            direction = "inherit";
-        }
-        function endRule(event){
-            if (textIndent && direction != "ltr"){
-                reporter.report("Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.", textIndent.line, textIndent.col, rule);
-            }
-        }
-
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("property", function(event){
-            var name = event.property.toString().toLowerCase(),
-                value = event.value;
-
-            if (name == "text-indent" && value.parts[0].value < -99){
-                textIndent = event.property;
-            } else if (name == "direction" && value == "ltr"){
-                direction = "ltr";
-            }
-        });
-
-        parser.addListener("endrule", endRule);
-        parser.addListener("endfontface", endRule);
-
-    }
-
-});
-CSSLint.addRule({
-    id: "underscore-property-hack",
-    name: "Disallow properties with an underscore prefix",
-    desc: "Checks for the underscore property hack (targets IE6)",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-        parser.addListener("property", function(event){
-            var property = event.property;
-
-            if (property.hack == "_") {
-                reporter.report("Property with underscore prefix found.", event.property.line, event.property.col, rule);
-            }
-        });
-    }
-});
-CSSLint.addRule({
-    id: "unique-headings",
-    name: "Headings should only be defined once",
-    desc: "Headings should be defined only once.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        var headings =  {
-                h1: 0,
-                h2: 0,
-                h3: 0,
-                h4: 0,
-                h5: 0,
-                h6: 0
-            };
-
-        parser.addListener("startrule", function(event){
-            var selectors = event.selectors,
-                selector,
-                part,
-                pseudo,
-                i, j;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-                part = selector.parts[selector.parts.length-1];
-
-                if (part.elementName && /(h[1-6])/i.test(part.elementName.toString())){
-                    
-                    for (j=0; j < part.modifiers.length; j++){
-                        if (part.modifiers[j].type == "pseudo"){
-                            pseudo = true;
-                            break;
-                        }
-                    }
-                
-                    if (!pseudo){
-                        headings[RegExp.$1]++;
-                        if (headings[RegExp.$1] > 1) {
-                            reporter.report("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
-                        }
-                    }
-                }
-            }
-        });
-        
-        parser.addListener("endstylesheet", function(event){
-            var prop,
-                messages = [];
-                
-            for (prop in headings){
-                if (headings.hasOwnProperty(prop)){
-                    if (headings[prop] > 1){
-                        messages.push(headings[prop] + " " + prop + "s");
-                    }
-                }
-            }
-            
-            if (messages.length){
-                reporter.rollupWarn("You have " + messages.join(", ") + " defined in this stylesheet.", rule);
-            }
-        });        
-    }
-
-});
-CSSLint.addRule({
-    id: "universal-selector",
-    name: "Disallow universal selector",
-    desc: "The universal selector (*) is known to be slow.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        parser.addListener("startrule", function(event){
-            var selectors = event.selectors,
-                selector,
-                part,
-                modifier,
-                i, j, k;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-                
-                part = selector.parts[selector.parts.length-1];
-                if (part.elementName == "*"){
-                    reporter.report(rule.desc, part.line, part.col, rule);
-                }
-            }
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "unqualified-attributes",
-    name: "Disallow unqualified attribute selectors",
-    desc: "Unqualified attribute selectors are known to be slow.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-
-        parser.addListener("startrule", function(event){
-            
-            var selectors = event.selectors,
-                selector,
-                part,
-                modifier,
-                i, j, k;
-
-            for (i=0; i < selectors.length; i++){
-                selector = selectors[i];
-                
-                part = selector.parts[selector.parts.length-1];
-                if (part.type == parser.SELECTOR_PART_TYPE){
-                    for (k=0; k < part.modifiers.length; k++){
-                        modifier = part.modifiers[k];
-                        if (modifier.type == "attribute" && (!part.elementName || part.elementName == "*")){
-                            reporter.report(rule.desc, part.line, part.col, rule);                               
-                        }
-                    }
-                }
-                
-            }            
-        });
-    }
-
-});
-CSSLint.addRule({
-    id: "vendor-prefix",
-    name: "Require standard property with vendor prefix",
-    desc: "When using a vendor-prefixed property, make sure to include the standard one.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this,
-            properties,
-            num,
-            propertiesToCheck = {
-                "-webkit-border-radius": "border-radius",
-                "-webkit-border-top-left-radius": "border-top-left-radius",
-                "-webkit-border-top-right-radius": "border-top-right-radius",
-                "-webkit-border-bottom-left-radius": "border-bottom-left-radius",
-                "-webkit-border-bottom-right-radius": "border-bottom-right-radius",
-                
-                "-o-border-radius": "border-radius",
-                "-o-border-top-left-radius": "border-top-left-radius",
-                "-o-border-top-right-radius": "border-top-right-radius",
-                "-o-border-bottom-left-radius": "border-bottom-left-radius",
-                "-o-border-bottom-right-radius": "border-bottom-right-radius",
-                
-                "-moz-border-radius": "border-radius",
-                "-moz-border-radius-topleft": "border-top-left-radius",
-                "-moz-border-radius-topright": "border-top-right-radius",
-                "-moz-border-radius-bottomleft": "border-bottom-left-radius",
-                "-moz-border-radius-bottomright": "border-bottom-right-radius",                
-                
-                "-moz-column-count": "column-count",
-                "-webkit-column-count": "column-count",
-                
-                "-moz-column-gap": "column-gap",
-                "-webkit-column-gap": "column-gap",
-                
-                "-moz-column-rule": "column-rule",
-                "-webkit-column-rule": "column-rule",
-                
-                "-moz-column-rule-style": "column-rule-style",
-                "-webkit-column-rule-style": "column-rule-style",
-                
-                "-moz-column-rule-color": "column-rule-color",
-                "-webkit-column-rule-color": "column-rule-color",
-                
-                "-moz-column-rule-width": "column-rule-width",
-                "-webkit-column-rule-width": "column-rule-width",
-                
-                "-moz-column-width": "column-width",
-                "-webkit-column-width": "column-width",
-                
-                "-webkit-column-span": "column-span",
-                "-webkit-columns": "columns",
-                
-                "-moz-box-shadow": "box-shadow",
-                "-webkit-box-shadow": "box-shadow",
-                
-                "-moz-transform" : "transform",
-                "-webkit-transform" : "transform",
-                "-o-transform" : "transform",
-                "-ms-transform" : "transform",
-                
-                "-moz-transform-origin" : "transform-origin",
-                "-webkit-transform-origin" : "transform-origin",
-                "-o-transform-origin" : "transform-origin",
-                "-ms-transform-origin" : "transform-origin",
-                
-                "-moz-box-sizing" : "box-sizing",
-                "-webkit-box-sizing" : "box-sizing",
-                
-                "-moz-user-select" : "user-select",
-                "-khtml-user-select" : "user-select",
-                "-webkit-user-select" : "user-select"                
-            };
-        function startRule(){
-            properties = {};
-            num=1;        
-        }
-        function endRule(event){
-            var prop,
-                i, len,
-                standard,
-                needed,
-                actual,
-                needsStandard = [];
-
-            for (prop in properties){
-                if (propertiesToCheck[prop]){
-                    needsStandard.push({ actual: prop, needed: propertiesToCheck[prop]});
-                }
-            }
-
-            for (i=0, len=needsStandard.length; i < len; i++){
-                needed = needsStandard[i].needed;
-                actual = needsStandard[i].actual;
-
-                if (!properties[needed]){               
-                    reporter.report("Missing standard property '" + needed + "' to go along with '" + actual + "'.", properties[actual][0].name.line, properties[actual][0].name.col, rule);
-                } else {
-                    if (properties[needed][0].pos < properties[actual][0].pos){
-                        reporter.report("Standard property '" + needed + "' should come after vendor-prefixed property '" + actual + "'.", properties[actual][0].name.line, properties[actual][0].name.col, rule);
-                    }
-                }
-            }
-
-        }        
-        
-        parser.addListener("startrule", startRule);
-        parser.addListener("startfontface", startRule);
-        parser.addListener("startpage", startRule);
-        parser.addListener("startpagemargin", startRule);
-        parser.addListener("startkeyframerule", startRule);         
-
-        parser.addListener("property", function(event){
-            var name = event.property.text.toLowerCase();
-
-            if (!properties[name]){
-                properties[name] = [];
-            }
-
-            properties[name].push({ name: event.property, value : event.value, pos:num++ });
-        });
-
-        parser.addListener("endrule", endRule);
-        parser.addListener("endfontface", endRule);
-        parser.addListener("endpage", endRule);
-        parser.addListener("endpagemargin", endRule);
-        parser.addListener("endkeyframerule", endRule);         
-    }
-
-});
-CSSLint.addRule({
-    id: "zero-units",
-    name: "Disallow units for 0 values",
-    desc: "You don't need to specify units when a value is 0.",
-    browsers: "All",
-    init: function(parser, reporter){
-        var rule = this;
-        parser.addListener("property", function(event){
-            var parts = event.value.parts,
-                i = 0, 
-                len = parts.length;
-
-            while(i < len){
-                if ((parts[i].units || parts[i].type == "percentage") && parts[i].value === 0 && parts[i].type != "time"){
-                    reporter.report("Values of 0 shouldn't have units specified.", parts[i].line, parts[i].col, rule);
-                }
-                i++;
-            }
-
-        });
-
-    }
-
-});
-(function() {
-    var xmlEscape = function(str) {
-        if (!str || str.constructor !== String) {
-            return "";
-        }
-        
-        return str.replace(/[\"&><]/g, function(match) {
-            switch (match) {
-                case "\"":
-                    return "&quot;";
-                case "&":
-                    return "&amp;";
-                case "<":
-                    return "&lt;";
-                case ">":
-                    return "&gt;";            
-            }
-        });
-    };
-
-    CSSLint.addFormatter({
-        id: "checkstyle-xml",
-        name: "Checkstyle XML format",
-        startFormat: function(){
-            return "<?xml version=\"1.0\" encoding=\"utf-8\"?><checkstyle>";
-        },
-        endFormat: function(){
-            return "</checkstyle>";
-        },
-        readError: function(filename, message) {
-            return "<file name=\"" + xmlEscape(filename) + "\"><error line=\"0\" column=\"0\" severty=\"error\" message=\"" + xmlEscape(message) + "\"></error></file>";
-        },
-        formatResults: function(results, filename, options) {
-            var messages = results.messages,
-                output = [];
-            var generateSource = function(rule) {
-                if (!rule || !('name' in rule)) {
-                    return "";
-                }
-                return 'net.csslint.' + rule.name.replace(/\s/g,'');
-            };
-
-
-
-            if (messages.length > 0) {
-                output.push("<file name=\""+filename+"\">");
-                CSSLint.Util.forEach(messages, function (message, i) {
-                    if (!message.rollup) {
-                      output.push("<error line=\"" + message.line + "\" column=\"" + message.col + "\" severity=\"" + message.type + "\"" +
-                          " message=\"" + xmlEscape(message.message) + "\" source=\"" + generateSource(message.rule) +"\"/>");
-                    }
-                });
-                output.push("</file>");
-            }
-
-            return output.join("");
-        }
-    });
-
-}());
-CSSLint.addFormatter({
-    id: "compact",
-    name: "Compact, 'porcelain' format",
-    startFormat: function() {
-        return "";
-    },
-    endFormat: function() {
-        return "";
-    },
-    formatResults: function(results, filename, options) {
-        var messages = results.messages,
-            output = "";
-        options = options || {};
-        var capitalize = function(str) {
-            return str.charAt(0).toUpperCase() + str.slice(1);
-        };
-
-        if (messages.length === 0) {
-            return options.quiet ? "" : filename + ": Lint Free!";
-        }
-
-        CSSLint.Util.forEach(messages, function(message, i) {
-            if (message.rollup) {
-                output += filename + ": " + capitalize(message.type) + " - " + message.message + "\n";
-            } else {
-                output += filename + ": " + "line " + message.line + 
-                    ", col " + message.col + ", " + capitalize(message.type) + " - " + message.message + "\n";
-            }
-        });
-    
-        return output;
-    }
-});
-CSSLint.addFormatter({
-    id: "csslint-xml",
-    name: "CSSLint XML format",
-    startFormat: function(){
-        return "<?xml version=\"1.0\" encoding=\"utf-8\"?><csslint>";
-    },
-    endFormat: function(){
-        return "</csslint>";
-    },
-    formatResults: function(results, filename, options) {
-        var messages = results.messages,
-            output = [];
-        var escapeSpecialCharacters = function(str) {
-            if (!str || str.constructor !== String) {
-                return "";
-            }
-            return str.replace(/\"/g, "'").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
-        };
-
-        if (messages.length > 0) {
-            output.push("<file name=\""+filename+"\">");
-            CSSLint.Util.forEach(messages, function (message, i) {
-                if (message.rollup) {
-                    output.push("<issue severity=\"" + message.type + "\" reason=\"" + escapeSpecialCharacters(message.message) + "\" evidence=\"" + escapeSpecialCharacters(message.evidence) + "\"/>");
-                } else {
-                    output.push("<issue line=\"" + message.line + "\" char=\"" + message.col + "\" severity=\"" + message.type + "\"" +
-                        " reason=\"" + escapeSpecialCharacters(message.message) + "\" evidence=\"" + escapeSpecialCharacters(message.evidence) + "\"/>");
-                }
-            });
-            output.push("</file>");
-        }
-
-        return output.join("");
-    }
-});
-CSSLint.addFormatter({
-    id: "junit-xml",
-    name: "JUNIT XML format",
-    startFormat: function(){
-        return "<?xml version=\"1.0\" encoding=\"utf-8\"?><testsuites>";
-    },
-    endFormat: function() {
-        return "</testsuites>";
-    },
-    formatResults: function(results, filename, options) {
-
-        var messages = results.messages,
-            output = [],
-            tests = {
-                'error': 0,
-                'failure': 0
-            };
-        var generateSource = function(rule) {
-            if (!rule || !('name' in rule)) {
-                return "";
-            }
-            return 'net.csslint.' + rule.name.replace(/\s/g,'');
-        };
-        var escapeSpecialCharacters = function(str) {
-
-            if (!str || str.constructor !== String) {
-                return "";
-            }
-
-            return str.replace(/\"/g, "'").replace(/</g, "&lt;").replace(/>/g, "&gt;");
-
-        };
-
-        if (messages.length > 0) {
-
-            messages.forEach(function (message, i) {
-                var type = message.type === 'warning' ? 'error' : message.type;
-                if (!message.rollup) {
-                    output.push("<testcase time=\"0\" name=\"" + generateSource(message.rule) + "\">");
-                    output.push("<" + type + " message=\"" + escapeSpecialCharacters(message.message) + "\"><![CDATA[" + message.line + ':' + message.col + ':' + escapeSpecialCharacters(message.evidence)  + "]]></" + type + ">");
-                    output.push("</testcase>");
-
-                    tests[type] += 1;
-
-                }
-
-            });
-
-            output.unshift("<testsuite time=\"0\" tests=\"" + messages.length + "\" skipped=\"0\" errors=\"" + tests.error + "\" failures=\"" + tests.failure + "\" package=\"net.csslint\" name=\"" + filename + "\">");
-            output.push("</testsuite>");
-
-        }
-
-        return output.join("");
-
-    }
-});
-CSSLint.addFormatter({
-    id: "lint-xml",
-    name: "Lint XML format",
-    startFormat: function(){
-        return "<?xml version=\"1.0\" encoding=\"utf-8\"?><lint>";
-    },
-    endFormat: function(){
-        return "</lint>";
-    },
-    formatResults: function(results, filename, options) {
-        var messages = results.messages,
-            output = [];
-        var escapeSpecialCharacters = function(str) {
-            if (!str || str.constructor !== String) {
-                return "";
-            }
-            return str.replace(/\"/g, "'").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
-        };
-
-        if (messages.length > 0) {
-        
-            output.push("<file name=\""+filename+"\">");
-            CSSLint.Util.forEach(messages, function (message, i) {
-                if (message.rollup) {
-                    output.push("<issue severity=\"" + message.type + "\" reason=\"" + escapeSpecialCharacters(message.message) + "\" evidence=\"" + escapeSpecialCharacters(message.evidence) + "\"/>");
-                } else {
-                    output.push("<issue line=\"" + message.line + "\" char=\"" + message.col + "\" severity=\"" + message.type + "\"" +
-                        " reason=\"" + escapeSpecialCharacters(message.message) + "\" evidence=\"" + escapeSpecialCharacters(message.evidence) + "\"/>");
-                }
-            });
-            output.push("</file>");
-        }
-
-        return output.join("");
-    }
-});
-CSSLint.addFormatter({
-    id: "text",
-    name: "Plain Text",
-    startFormat: function() {
-        return "";
-    },
-    endFormat: function() {
-        return "";
-    },
-    formatResults: function(results, filename, options) {
-        var messages = results.messages,
-            output = "";
-        options = options || {};
-
-        if (messages.length === 0) {
-            return options.quiet ? "" : "\n\ncsslint: No errors in " + filename + ".";
-        }
-
-        output = "\n\ncsslint: There are " + messages.length  +  " problems in " + filename + ".";
-        var pos = filename.lastIndexOf("/"),
-            shortFilename = filename;
-
-        if (pos === -1){
-            pos = filename.lastIndexOf("\\");       
-        }
-        if (pos > -1){
-            shortFilename = filename.substring(pos+1);
-        }
-
-        CSSLint.Util.forEach(messages, function (message, i) {
-            output = output + "\n\n" + shortFilename;
-            if (message.rollup) {
-                output += "\n" + (i+1) + ": " + message.type;
-                output += "\n" + message.message;
-            } else {
-                output += "\n" + (i+1) + ": " + message.type + " at line " + message.line + ", col " + message.col;
-                output += "\n" + message.message;
-                output += "\n" + message.evidence;
-            }
-        });
-    
-        return output;
-    }
-});
-
-exports.CSSLint = CSSLint;
-
-});
\ No newline at end of file
diff --git a/try/ace/worker-javascript.js b/try/ace/worker-javascript.js
deleted file mode 100644
index c54e6d4..0000000
--- a/try/ace/worker-javascript.js
+++ /dev/null
@@ -1,6447 +0,0 @@
-"no use strict";
-;(function(window) {
-if (typeof window.window != "undefined" && window.document) {
-    return;
-}
-
-window.console = {
-    log: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    },
-    error: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    }
-};
-window.window = window;
-window.ace = window;
-
-window.normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-        
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-    
-    return moduleName;
-};
-
-window.require = function(parentId, id) {
-    if (!id) {
-        id = parentId
-        parentId = null;
-    }
-    if (!id.charAt)
-        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
-
-    id = normalizeModule(parentId, id);
-
-    var module = require.modules[id];
-    if (module) {
-        if (!module.initialized) {
-            module.initialized = true;
-            module.exports = module.factory().exports;
-        }
-        return module.exports;
-    }
-    
-    var chunks = id.split("/");
-    chunks[0] = require.tlns[chunks[0]] || chunks[0];
-    var path = chunks.join("/") + ".js";
-    
-    require.id = id;
-    importScripts(path);
-    return require(parentId, id);
-};
-
-require.modules = {};
-require.tlns = {};
-
-window.define = function(id, deps, factory) {
-    if (arguments.length == 2) {
-        factory = deps;
-        if (typeof id != "string") {
-            deps = id;
-            id = require.id;
-        }
-    } else if (arguments.length == 1) {
-        factory = id;
-        id = require.id;
-    }
-
-    if (id.indexOf("text!") === 0) 
-        return;
-    
-    var req = function(deps, factory) {
-        return require(id, deps, factory);
-    };
-
-    require.modules[id] = {
-        factory: function() {
-            var module = {
-                exports: {}
-            };
-            var returnExports = factory(req, module.exports, module);
-            if (returnExports)
-                module.exports = returnExports;
-            return module;
-        }
-    };
-};
-
-window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
-    require.tlns = topLevelNamespaces;
-}
-
-window.initSender = function initSender() {
-
-    var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
-    var oop = require("ace/lib/oop");
-    
-    var Sender = function() {};
-    
-    (function() {
-        
-        oop.implement(this, EventEmitter);
-                
-        this.callback = function(data, callbackId) {
-            postMessage({
-                type: "call",
-                id: callbackId,
-                data: data
-            });
-        };
-    
-        this.emit = function(name, data) {
-            postMessage({
-                type: "event",
-                name: name,
-                data: data
-            });
-        };
-        
-    }).call(Sender.prototype);
-    
-    return new Sender();
-}
-
-window.main = null;
-window.sender = null;
-
-window.onmessage = function(e) {
-    var msg = e.data;
-    if (msg.command) {
-        if (main[msg.command])
-            main[msg.command].apply(main, msg.args);
-        else
-            throw new Error("Unknown command:" + msg.command);
-    }
-    else if (msg.init) {        
-        initBaseUrls(msg.tlns);
-        require("ace/lib/es5-shim");
-        sender = initSender();
-        var clazz = require(msg.module)[msg.classname];
-        main = new clazz(sender);
-    } 
-    else if (msg.event && sender) {
-        sender._emit(msg.event, msg.data);
-    }
-};
-})(this);
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
-
-define('ace/mode/javascript_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/javascript/jshint'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var Mirror = require("../worker/mirror").Mirror;
-var lint = require("./javascript/jshint").JSHINT;
-
-function startRegex(arr) {
-    return RegExp("^(" + arr.join("|") + ")");
-}
-
-var disabledWarningsRe = startRegex([
-    "Bad for in variable '(.+)'.",
-    'Missing "use strict"'
-]);
-var errorsRe = startRegex([
-    "Unexpected",
-    "Expected ",
-    "Confusing (plus|minus)",
-    "\\{a\\} unterminated regular expression",
-    "Unclosed ",
-    "Unmatched ",
-    "Unbegun comment",
-    "Bad invocation",
-    "Missing space after",
-    "Missing operator at"
-]);
-var infoRe = startRegex([
-    "Expected an assignment",
-    "Bad escapement of EOL",
-    "Unexpected comma",
-    "Unexpected space",
-    "Missing radix parameter.",
-    "A leading decimal point can",
-    "\\['{a}'\\] is better written in dot notation.",
-    "'{a}' used out of scope"
-]);
-
-var JavaScriptWorker = exports.JavaScriptWorker = function(sender) {
-    Mirror.call(this, sender);
-    this.setTimeout(500);
-    this.setOptions();
-};
-
-oop.inherits(JavaScriptWorker, Mirror);
-
-(function() {
-    this.setOptions = function(options) {
-        this.options = options || {
-            es5: true,
-            esnext: true,
-            devel: true,
-            browser: true,
-            node: true,
-            laxcomma: true,
-            laxbreak: true,
-            lastsemic: true,
-            onevar: false,
-            passfail: false,
-            maxerr: 100,
-            expr: true,
-            multistr: true,
-            globalstrict: true
-        };
-        this.doc.getValue() && this.deferredUpdate.schedule(100);
-    };
-
-    this.changeOptions = function(newOptions) {
-        oop.mixin(this.options, newOptions);
-        this.doc.getValue() && this.deferredUpdate.schedule(100);
-    };
-
-    this.isValidJS = function(str) {
-        try {
-            eval("throw 0;" + str);
-        } catch(e) {
-            if (e === 0)
-                return true;
-        }
-        return false
-    };
-
-    this.onUpdate = function() {
-        var value = this.doc.getValue();
-        value = value.replace(/^#!.*\n/, "\n");
-        if (!value) {
-            this.sender.emit("jslint", []);
-            return;
-        }
-        var errors = [];
-        var maxErrorLevel = this.isValidJS(value) ? "warning" : "error";
-        lint(value, this.options);
-        var results = lint.errors;
-
-        var errorAdded = false
-        for (var i = 0; i < results.length; i++) {
-            var error = results[i];
-            if (!error)
-                continue;
-            var raw = error.raw;
-            var type = "warning";
-
-            if (raw == "Missing semicolon.") {
-                var str = error.evidence.substr(error.character);
-                str = str.charAt(str.search(/\S/));
-                if (maxErrorLevel == "error" && str && /[\w\d{(['"]/.test(str)) {
-                    error.reason = 'Missing ";" before statement';
-                    type = "error";
-                } else {
-                    type = "info";
-                }
-            }
-            else if (disabledWarningsRe.test(raw)) {
-                continue;
-            }
-            else if (infoRe.test(raw)) {
-                type = "info"
-            }
-            else if (errorsRe.test(raw)) {
-                errorAdded  = true;
-                type = maxErrorLevel;
-            }
-            else if (raw == "'{a}' is not defined.") {
-                type = "warning";
-            }
-            else if (raw == "'{a}' is defined but never used.") {
-                type = "info";
-            }
-
-            errors.push({
-                row: error.line-1,
-                column: error.character-1,
-                text: error.reason,
-                type: type,
-                raw: raw
-            });
-
-            if (errorAdded) {
-            }
-        }
-
-        this.sender.emit("jslint", errors);
-    };
-
-}).call(JavaScriptWorker.prototype);
-
-});
-define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var Document = require("../document").Document;
-var lang = require("../lib/lang");
-    
-var Mirror = exports.Mirror = function(sender) {
-    this.sender = sender;
-    var doc = this.doc = new Document("");
-    
-    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
-    
-    var _self = this;
-    sender.on("change", function(e) {
-        doc.applyDeltas(e.data);
-        deferredUpdate.schedule(_self.$timeout);
-    });
-};
-
-(function() {
-    
-    this.$timeout = 500;
-    
-    this.setTimeout = function(timeout) {
-        this.$timeout = timeout;
-    };
-    
-    this.setValue = function(value) {
-        this.doc.setValue(value);
-        this.deferredUpdate.schedule(this.$timeout);
-    };
-    
-    this.getValue = function(callbackId) {
-        this.sender.callback(this.doc.getValue(), callbackId);
-    };
-    
-    this.onUpdate = function() {
-    };
-    
-}).call(Mirror.prototype);
-
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
-define('ace/mode/javascript/jshint', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var JSHINT = (function () {
-	
-
-	var anonname,		// The guessed name for anonymous functions.
-
-		bang = {
-			"<"  : true,
-			"<=" : true,
-			"==" : true,
-			"===": true,
-			"!==": true,
-			"!=" : true,
-			">"  : true,
-			">=" : true,
-			"+"  : true,
-			"-"  : true,
-			"*"  : true,
-			"/"  : true,
-			"%"  : true
-		},
-		boolOptions = {
-			asi			: true, // if automatic semicolon insertion should be tolerated
-			bitwise		: true, // if bitwise operators should not be allowed
-			boss		: true, // if advanced usage of assignments should be allowed
-			browser		: true, // if the standard browser globals should be predefined
-			camelcase	: true, // if identifiers should be required in camel case
-			couch		: true, // if CouchDB globals should be predefined
-			curly		: true, // if curly braces around all blocks should be required
-			debug		: true, // if debugger statements should be allowed
-			devel		: true, // if logging globals should be predefined (console,
-			dojo		: true, // if Dojo Toolkit globals should be predefined
-			eqeqeq		: true, // if === should be required
-			eqnull		: true, // if == null comparisons should be tolerated
-			es5			: true, // if ES5 syntax should be allowed
-			esnext		: true, // if es.next specific syntax should be allowed
-			evil		: true, // if eval should be allowed
-			expr		: true, // if ExpressionStatement should be allowed as Programs
-			forin		: true, // if for in statements must filter
-			funcscope	: true, // if only function scope should be used for scope tests
-			globalstrict: true, // if global  should be allowed (also
-			immed		: true, // if immediate invocations must be wrapped in parens
-			iterator	: true, // if the `__iterator__` property should be allowed
-			jquery		: true, // if jQuery globals should be predefined
-			lastsemic	: true, // if semicolons may be ommitted for the trailing
-			latedef		: true, // if the use before definition should not be tolerated
-			laxbreak	: true, // if line breaks should not be checked
-			laxcomma	: true, // if line breaks should not be checked around commas
-			loopfunc	: true, // if functions should be allowed to be defined within
-			mootools	: true, // if MooTools globals should be predefined
-			multistr	: true, // allow multiline strings
-			newcap		: true, // if constructor names must be capitalized
-			noarg		: true, // if arguments.caller and arguments.callee should be
-			node		: true, // if the Node.js environment globals should be
-			noempty		: true, // if empty blocks should be disallowed
-			nonew		: true, // if using `new` for side-effects should be disallowed
-			nonstandard : true, // if non-standard (but widely adopted) globals should
-			nomen		: true, // if names should be checked
-			onevar		: true, // if only one var statement per function should be
-			onecase		: true, // if one case switch statements should be allowed
-			passfail	: true, // if the scan should stop on first error
-			plusplus	: true, // if increment/decrement should not be allowed
-			proto		: true, // if the `__proto__` property should be allowed
-			prototypejs : true, // if Prototype and Scriptaculous globals should be
-			regexdash	: true, // if unescaped first/last dash (-) inside brackets
-			regexp		: true, // if the . should not be allowed in regexp literals
-			rhino		: true, // if the Rhino environment globals should be predefined
-			undef		: true, // if variables should be declared before used
-			unused		: true, // if variables should be always used
-			scripturl	: true, // if script-targeted URLs should be tolerated
-			shadow		: true, // if variable shadowing should be tolerated
-			smarttabs	: true, // if smarttabs should be tolerated
-			strict		: true, // require the  pragma
-			sub			: true, // if all forms of subscript notation are tolerated
-			supernew	: true, // if `new function () { ... };` and `new Object;`
-			trailing	: true, // if trailing whitespace rules apply
-			validthis	: true, // if 'this' inside a non-constructor function is valid.
-			withstmt	: true, // if with statements should be allowed
-			white		: true, // if strict whitespace rules apply
-			worker		: true, // if Web Worker script symbols should be allowed
-			wsh			: true, // if the Windows Scripting Host environment globals
-			yui			: true	// YUI variables should be predefined
-		},
-		valOptions = {
-			maxlen		 : false,
-			indent		 : false,
-			maxerr		 : false,
-			predef		 : false,
-			quotmark	 : false, //'single'|'double'|true
-			scope		 : false,
-			maxstatements: false, // {int} max statements per function
-			maxdepth	 : false, // {int} max nested block depth per function
-			maxparams	 : false, // {int} max params per function
-			maxcomplexity: false  // {int} max cyclomatic complexity per function
-		},
-		invertedOptions = {
-			bitwise		: true,
-			forin		: true,
-			newcap		: true,
-			nomen		: true,
-			plusplus	: true,
-			regexp		: true,
-			undef		: true,
-			white		: true,
-			eqeqeq		: true,
-			onevar		: true
-		},
-		renamedOptions = {
-			eqeq		: "eqeqeq",
-			vars		: "onevar",
-			windows		: "wsh"
-		},
-		browser = {
-			ArrayBuffer				 :	false,
-			ArrayBufferView			 :	false,
-			Audio					 :	false,
-			Blob					 :	false,
-			addEventListener		 :	false,
-			applicationCache		 :	false,
-			atob					 :	false,
-			blur					 :	false,
-			btoa					 :	false,
-			clearInterval			 :	false,
-			clearTimeout			 :	false,
-			close					 :	false,
-			closed					 :	false,
-			DataView				 :	false,
-			DOMParser				 :	false,
-			defaultStatus			 :	false,
-			document				 :	false,
-			event					 :	false,
-			FileReader				 :	false,
-			Float32Array			 :	false,
-			Float64Array			 :	false,
-			FormData				 :	false,
-			focus					 :	false,
-			frames					 :	false,
-			getComputedStyle		 :	false,
-			HTMLElement				 :	false,
-			HTMLAnchorElement		 :	false,
-			HTMLBaseElement			 :	false,
-			HTMLBlockquoteElement	 :	false,
-			HTMLBodyElement			 :	false,
-			HTMLBRElement			 :	false,
-			HTMLButtonElement		 :	false,
-			HTMLCanvasElement		 :	false,
-			HTMLDirectoryElement	 :	false,
-			HTMLDivElement			 :	false,
-			HTMLDListElement		 :	false,
-			HTMLFieldSetElement		 :	false,
-			HTMLFontElement			 :	false,
-			HTMLFormElement			 :	false,
-			HTMLFrameElement		 :	false,
-			HTMLFrameSetElement		 :	false,
-			HTMLHeadElement			 :	false,
-			HTMLHeadingElement		 :	false,
-			HTMLHRElement			 :	false,
-			HTMLHtmlElement			 :	false,
-			HTMLIFrameElement		 :	false,
-			HTMLImageElement		 :	false,
-			HTMLInputElement		 :	false,
-			HTMLIsIndexElement		 :	false,
-			HTMLLabelElement		 :	false,
-			HTMLLayerElement		 :	false,
-			HTMLLegendElement		 :	false,
-			HTMLLIElement			 :	false,
-			HTMLLinkElement			 :	false,
-			HTMLMapElement			 :	false,
-			HTMLMenuElement			 :	false,
-			HTMLMetaElement			 :	false,
-			HTMLModElement			 :	false,
-			HTMLObjectElement		 :	false,
-			HTMLOListElement		 :	false,
-			HTMLOptGroupElement		 :	false,
-			HTMLOptionElement		 :	false,
-			HTMLParagraphElement	 :	false,
-			HTMLParamElement		 :	false,
-			HTMLPreElement			 :	false,
-			HTMLQuoteElement		 :	false,
-			HTMLScriptElement		 :	false,
-			HTMLSelectElement		 :	false,
-			HTMLStyleElement		 :	false,
-			HTMLTableCaptionElement  :	false,
-			HTMLTableCellElement	 :	false,
-			HTMLTableColElement		 :	false,
-			HTMLTableElement		 :	false,
-			HTMLTableRowElement		 :	false,
-			HTMLTableSectionElement  :	false,
-			HTMLTextAreaElement		 :	false,
-			HTMLTitleElement		 :	false,
-			HTMLUListElement		 :	false,
-			HTMLVideoElement		 :	false,
-			history					 :	false,
-			Int16Array				 :	false,
-			Int32Array				 :	false,
-			Int8Array				 :	false,
-			Image					 :	false,
-			length					 :	false,
-			localStorage			 :	false,
-			location				 :	false,
-			MessageChannel			 :	false,
-			MessageEvent			 :	false,
-			MessagePort				 :	false,
-			moveBy					 :	false,
-			moveTo					 :	false,
-			MutationObserver		 :	false,
-			name					 :	false,
-			Node					 :	false,
-			NodeFilter				 :	false,
-			navigator				 :	false,
-			onbeforeunload			 :	true,
-			onblur					 :	true,
-			onerror					 :	true,
-			onfocus					 :	true,
-			onload					 :	true,
-			onresize				 :	true,
-			onunload				 :	true,
-			open					 :	false,
-			openDatabase			 :	false,
-			opener					 :	false,
-			Option					 :	false,
-			parent					 :	false,
-			print					 :	false,
-			removeEventListener		 :	false,
-			resizeBy				 :	false,
-			resizeTo				 :	false,
-			screen					 :	false,
-			scroll					 :	false,
-			scrollBy				 :	false,
-			scrollTo				 :	false,
-			sessionStorage			 :	false,
-			setInterval				 :	false,
-			setTimeout				 :	false,
-			SharedWorker			 :	false,
-			status					 :	false,
-			top						 :	false,
-			Uint16Array				 :	false,
-			Uint32Array				 :	false,
-			Uint8Array				 :	false,
-			WebSocket				 :	false,
-			window					 :	false,
-			Worker					 :	false,
-			XMLHttpRequest			 :	false,
-			XMLSerializer			 :	false,
-			XPathEvaluator			 :	false,
-			XPathException			 :	false,
-			XPathExpression			 :	false,
-			XPathNamespace			 :	false,
-			XPathNSResolver			 :	false,
-			XPathResult				 :	false
-		},
-
-		couch = {
-			"require" : false,
-			respond   : false,
-			getRow	  : false,
-			emit	  : false,
-			send	  : false,
-			start	  : false,
-			sum		  : false,
-			log		  : false,
-			exports   : false,
-			module	  : false,
-			provides  : false
-		},
-
-		declared, // Globals that were declared using /*global ... */ syntax.
-
-		devel = {
-			alert	: false,
-			confirm : false,
-			console : false,
-			Debug	: false,
-			opera	: false,
-			prompt	: false
-		},
-
-		dojo = {
-			dojo	  : false,
-			dijit	  : false,
-			dojox	  : false,
-			define	  : false,
-			"require" : false
-		},
-
-		funct,			// The current function
-
-		functionicity = [
-			"closure", "exception", "global", "label",
-			"outer", "unused", "var"
-		],
-
-		functions,		// All of the functions
-
-		global,			// The global scope
-		implied,		// Implied globals
-		inblock,
-		indent,
-		jsonmode,
-
-		jquery = {
-			"$"    : false,
-			jQuery : false
-		},
-
-		lines,
-		lookahead,
-		member,
-		membersOnly,
-
-		mootools = {
-			"$"				: false,
-			"$$"			: false,
-			Asset			: false,
-			Browser			: false,
-			Chain			: false,
-			Class			: false,
-			Color			: false,
-			Cookie			: false,
-			Core			: false,
-			Document		: false,
-			DomReady		: false,
-			DOMEvent		: false,
-			DOMReady		: false,
-			Drag			: false,
-			Element			: false,
-			Elements		: false,
-			Event			: false,
-			Events			: false,
-			Fx				: false,
-			Group			: false,
-			Hash			: false,
-			HtmlTable		: false,
-			Iframe			: false,
-			IframeShim		: false,
-			InputValidator	: false,
-			instanceOf		: false,
-			Keyboard		: false,
-			Locale			: false,
-			Mask			: false,
-			MooTools		: false,
-			Native			: false,
-			Options			: false,
-			OverText		: false,
-			Request			: false,
-			Scroller		: false,
-			Slick			: false,
-			Slider			: false,
-			Sortables		: false,
-			Spinner			: false,
-			Swiff			: false,
-			Tips			: false,
-			Type			: false,
-			typeOf			: false,
-			URI				: false,
-			Window			: false
-		},
-
-		nexttoken,
-
-		node = {
-			__filename	  : false,
-			__dirname	  : false,
-			Buffer		  : false,
-			console		  : false,
-			exports		  : true,  // In Node it is ok to exports = module.exports = foo();
-			GLOBAL		  : false,
-			global		  : false,
-			module		  : false,
-			process		  : false,
-			require		  : false,
-			setTimeout	  : false,
-			clearTimeout  : false,
-			setInterval   : false,
-			clearInterval : false
-		},
-
-		noreach,
-		option,
-		predefined,		// Global variables defined by option
-		prereg,
-		prevtoken,
-
-		prototypejs = {
-			"$"				  : false,
-			"$$"			  : false,
-			"$A"			  : false,
-			"$F"			  : false,
-			"$H"			  : false,
-			"$R"			  : false,
-			"$break"		  : false,
-			"$continue"		  : false,
-			"$w"			  : false,
-			Abstract		  : false,
-			Ajax			  : false,
-			Class			  : false,
-			Enumerable		  : false,
-			Element			  : false,
-			Event			  : false,
-			Field			  : false,
-			Form			  : false,
-			Hash			  : false,
-			Insertion		  : false,
-			ObjectRange		  : false,
-			PeriodicalExecuter: false,
-			Position		  : false,
-			Prototype		  : false,
-			Selector		  : false,
-			Template		  : false,
-			Toggle			  : false,
-			Try				  : false,
-			Autocompleter	  : false,
-			Builder			  : false,
-			Control			  : false,
-			Draggable		  : false,
-			Draggables		  : false,
-			Droppables		  : false,
-			Effect			  : false,
-			Sortable		  : false,
-			SortableObserver  : false,
-			Sound			  : false,
-			Scriptaculous	  : false
-		},
-
-		quotmark,
-
-		rhino = {
-			defineClass  : false,
-			deserialize  : false,
-			gc			 : false,
-			help		 : false,
-			importPackage: false,
-			"java"		 : false,
-			load		 : false,
-			loadClass	 : false,
-			print		 : false,
-			quit		 : false,
-			readFile	 : false,
-			readUrl		 : false,
-			runCommand	 : false,
-			seal		 : false,
-			serialize	 : false,
-			spawn		 : false,
-			sync		 : false,
-			toint32		 : false,
-			version		 : false
-		},
-
-		scope,		// The current scope
-		stack,
-		standard = {
-			Array				: false,
-			Boolean				: false,
-			Date				: false,
-			decodeURI			: false,
-			decodeURIComponent	: false,
-			encodeURI			: false,
-			encodeURIComponent	: false,
-			Error				: false,
-			"eval"				: false,
-			EvalError			: false,
-			Function			: false,
-			hasOwnProperty		: false,
-			isFinite			: false,
-			isNaN				: false,
-			JSON				: false,
-			Map					: false,
-			Math				: false,
-			NaN					: false,
-			Number				: false,
-			Object				: false,
-			parseInt			: false,
-			parseFloat			: false,
-			RangeError			: false,
-			ReferenceError		: false,
-			RegExp				: false,
-			Set					: false,
-			String				: false,
-			SyntaxError			: false,
-			TypeError			: false,
-			URIError			: false,
-			WeakMap				: false
-		},
-		nonstandard = {
-			escape				: false,
-			unescape			: false
-		},
-
-		directive,
-		syntax = {},
-		tab,
-		token,
-		unuseds,
-		urls,
-		useESNextSyntax,
-		warnings,
-
-		worker = {
-			importScripts		: true,
-			postMessage			: true,
-			self				: true
-		},
-
-		wsh = {
-			ActiveXObject			  : true,
-			Enumerator				  : true,
-			GetObject				  : true,
-			ScriptEngine			  : true,
-			ScriptEngineBuildVersion  : true,
-			ScriptEngineMajorVersion  : true,
-			ScriptEngineMinorVersion  : true,
-			VBArray					  : true,
-			WSH						  : true,
-			WScript					  : true,
-			XDomainRequest			  : true
-		},
-
-		yui = {
-			YUI				: false,
-			Y				: false,
-			YUI_config		: false
-		};
-	var ax, cx, tx, nx, nxg, lx, ix, jx, ft;
-	(function () {
-		ax = /@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i;
-		cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
-		tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/=(?!(\S*\/[gim]?))|\/(\*(jshint|jslint|members?|global)?|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/;
-		nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
-		nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
-		lx = /\*\//;
-		ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;
-		jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i;
-		ft = /^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/;
-	}());
-
-	function F() {}		// Used by Object.create
-
-	function is_own(object, name) {
-		return Object.prototype.hasOwnProperty.call(object, name);
-	}
-
-	function checkOption(name, t) {
-		if (valOptions[name] === undefined && boolOptions[name] === undefined) {
-			warning("Bad option: '" + name + "'.", t);
-		}
-	}
-
-	function isString(obj) {
-		return Object.prototype.toString.call(obj) === "[object String]";
-	}
-
-	if (typeof Array.isArray !== "function") {
-		Array.isArray = function (o) {
-			return Object.prototype.toString.apply(o) === "[object Array]";
-		};
-	}
-
-	if (!Array.prototype.forEach) {
-		Array.prototype.forEach = function (fn, scope) {
-			var len = this.length;
-
-			for (var i = 0; i < len; i++) {
-				fn.call(scope || this, this[i], i, this);
-			}
-		};
-	}
-
-	if (!Array.prototype.indexOf) {
-		Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
-			if (this === null || this === undefined) {
-				throw new TypeError();
-			}
-
-			var t = new Object(this);
-			var len = t.length >>> 0;
-
-			if (len === 0) {
-				return -1;
-			}
-
-			var n = 0;
-			if (arguments.length > 0) {
-				n = Number(arguments[1]);
-				if (n != n) { // shortcut for verifying if it's NaN
-					n = 0;
-				} else if (n !== 0 && n != Infinity && n != -Infinity) {
-					n = (n > 0 || -1) * Math.floor(Math.abs(n));
-				}
-			}
-
-			if (n >= len) {
-				return -1;
-			}
-
-			var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
-			for (; k < len; k++) {
-				if (k in t && t[k] === searchElement) {
-					return k;
-				}
-			}
-
-			return -1;
-		};
-	}
-
-	if (typeof Object.create !== "function") {
-		Object.create = function (o) {
-			F.prototype = o;
-			return new F();
-		};
-	}
-
-	if (typeof Object.keys !== "function") {
-		Object.keys = function (o) {
-			var a = [], k;
-			for (k in o) {
-				if (is_own(o, k)) {
-					a.push(k);
-				}
-			}
-			return a;
-		};
-	}
-
-	function isAlpha(str) {
-		return (str >= "a" && str <= "z\uffff") ||
-			(str >= "A" && str <= "Z\uffff");
-	}
-
-	function isDigit(str) {
-		return (str >= "0" && str <= "9");
-	}
-
-	function isIdentifier(token, value) {
-		if (!token)
-			return false;
-
-		if (!token.identifier || token.value !== value)
-			return false;
-
-		return true;
-	}
-
-	function supplant(str, data) {
-		return str.replace(/\{([^{}]*)\}/g, function (a, b) {
-			var r = data[b];
-			return typeof r === "string" || typeof r === "number" ? r : a;
-		});
-	}
-
-	function combine(t, o) {
-		var n;
-		for (n in o) {
-			if (is_own(o, n) && !is_own(JSHINT.blacklist, n)) {
-				t[n] = o[n];
-			}
-		}
-	}
-
-	function updatePredefined() {
-		Object.keys(JSHINT.blacklist).forEach(function (key) {
-			delete predefined[key];
-		});
-	}
-
-	function assume() {
-		if (option.couch) {
-			combine(predefined, couch);
-		}
-
-		if (option.rhino) {
-			combine(predefined, rhino);
-		}
-
-		if (option.prototypejs) {
-			combine(predefined, prototypejs);
-		}
-
-		if (option.node) {
-			combine(predefined, node);
-			option.globalstrict = true;
-		}
-
-		if (option.devel) {
-			combine(predefined, devel);
-		}
-
-		if (option.dojo) {
-			combine(predefined, dojo);
-		}
-
-		if (option.browser) {
-			combine(predefined, browser);
-		}
-
-		if (option.nonstandard) {
-			combine(predefined, nonstandard);
-		}
-
-		if (option.jquery) {
-			combine(predefined, jquery);
-		}
-
-		if (option.mootools) {
-			combine(predefined, mootools);
-		}
-
-		if (option.worker) {
-			combine(predefined, worker);
-		}
-
-		if (option.wsh) {
-			combine(predefined, wsh);
-		}
-
-		if (option.esnext) {
-			useESNextSyntax();
-		}
-
-		if (option.globalstrict && option.strict !== false) {
-			option.strict = true;
-		}
-
-		if (option.yui) {
-			combine(predefined, yui);
-		}
-	}
-	function quit(message, line, chr) {
-		var percentage = Math.floor((line / lines.length) * 100);
-
-		throw {
-			name: "JSHintError",
-			line: line,
-			character: chr,
-			message: message + " (" + percentage + "% scanned).",
-			raw: message
-		};
-	}
-
-	function isundef(scope, m, t, a) {
-		return JSHINT.undefs.push([scope, m, t, a]);
-	}
-
-	function warning(m, t, a, b, c, d) {
-		var ch, l, w;
-		t = t || nexttoken;
-		if (t.id === "(end)") {  // `~
-			t = token;
-		}
-		l = t.line || 0;
-		ch = t.from || 0;
-		w = {
-			id: "(error)",
-			raw: m,
-			evidence: lines[l - 1] || "",
-			line: l,
-			character: ch,
-			scope: JSHINT.scope,
-			a: a,
-			b: b,
-			c: c,
-			d: d
-		};
-		w.reason = supplant(m, w);
-		JSHINT.errors.push(w);
-		if (option.passfail) {
-			quit("Stopping. ", l, ch);
-		}
-		warnings += 1;
-		if (warnings >= option.maxerr) {
-			quit("Too many errors.", l, ch);
-		}
-		return w;
-	}
-
-	function warningAt(m, l, ch, a, b, c, d) {
-		return warning(m, {
-			line: l,
-			from: ch
-		}, a, b, c, d);
-	}
-
-	function error(m, t, a, b, c, d) {
-		warning(m, t, a, b, c, d);
-	}
-
-	function errorAt(m, l, ch, a, b, c, d) {
-		return error(m, {
-			line: l,
-			from: ch
-		}, a, b, c, d);
-	}
-	function addInternalSrc(elem, src) {
-		var i;
-		i = {
-			id: "(internal)",
-			elem: elem,
-			value: src
-		};
-		JSHINT.internals.push(i);
-		return i;
-	}
-
-	var lex = (function lex() {
-		var character, from, line, s;
-
-		function nextLine() {
-			var at,
-				match,
-				tw; // trailing whitespace check
-
-			if (line >= lines.length)
-				return false;
-
-			character = 1;
-			s = lines[line];
-			line += 1;
-			if (option.smarttabs) {
-				match = s.match(/(\/\/)? \t/);
-				at = match && !match[1] ? 0 : -1;
-			} else {
-				at = s.search(/ \t|\t [^\*]/);
-			}
-
-			if (at >= 0)
-				warningAt("Mixed spaces and tabs.", line, at + 1);
-
-			s = s.replace(/\t/g, tab);
-			at = s.search(cx);
-
-			if (at >= 0)
-				warningAt("Unsafe character.", line, at);
-
-			if (option.maxlen && option.maxlen < s.length)
-				warningAt("Line too long.", line, s.length);
-			tw = option.trailing && s.match(/^(.*?)\s+$/);
-			if (tw && !/^\s+$/.test(s)) {
-				warningAt("Trailing whitespace.", line, tw[1].length + 1);
-			}
-			return true;
-		}
-
-		function it(type, value) {
-			var i, t;
-
-			function checkName(name) {
-				if (!option.proto && name === "__proto__") {
-					warningAt("The '{a}' property is deprecated.", line, from, name);
-					return;
-				}
-
-				if (!option.iterator && name === "__iterator__") {
-					warningAt("'{a}' is only available in JavaScript 1.7.", line, from, name);
-					return;
-				}
-
-				var hasDangling = /^(_+.*|.*_+)$/.test(name);
-
-				if (option.nomen && hasDangling && name !== "_") {
-					if (option.node && token.id !== "." && /^(__dirname|__filename)$/.test(name))
-						return;
-
-					warningAt("Unexpected {a} in '{b}'.", line, from, "dangling '_'", name);
-					return;
-				}
-
-				if (option.camelcase) {
-					if (name.replace(/^_+/, "").indexOf("_") > -1 && !name.match(/^[A-Z0-9_]*$/)) {
-						warningAt("Identifier '{a}' is not in camel case.", line, from, value);
-					}
-				}
-			}
-
-			if (type === "(color)" || type === "(range)") {
-				t = {type: type};
-			} else if (type === "(punctuator)" ||
-					(type === "(identifier)" && is_own(syntax, value))) {
-				t = syntax[value] || syntax["(error)"];
-			} else {
-				t = syntax[type];
-			}
-
-			t = Object.create(t);
-
-			if (type === "(string)" || type === "(range)") {
-				if (!option.scripturl && jx.test(value)) {
-					warningAt("Script URL.", line, from);
-				}
-			}
-
-			if (type === "(identifier)") {
-				t.identifier = true;
-				checkName(value);
-			}
-
-			t.value = value;
-			t.line = line;
-			t.character = character;
-			t.from = from;
-			i = t.id;
-			if (i !== "(endline)") {
-				prereg = i &&
-					(("(,=:[!&|?{};".indexOf(i.charAt(i.length - 1)) >= 0) ||
-					i === "return" ||
-					i === "case");
-			}
-			return t;
-		}
-		return {
-			init: function (source) {
-				if (typeof source === "string") {
-					lines = source
-						.replace(/\r\n/g, "\n")
-						.replace(/\r/g, "\n")
-						.split("\n");
-				} else {
-					lines = source;
-				}
-				if (lines[0] && lines[0].substr(0, 2) === "#!")
-					lines[0] = "";
-
-				line = 0;
-				nextLine();
-				from = 1;
-			},
-
-			range: function (begin, end) {
-				var c, value = "";
-				from = character;
-				if (s.charAt(0) !== begin) {
-					errorAt("Expected '{a}' and instead saw '{b}'.",
-							line, character, begin, s.charAt(0));
-				}
-				for (;;) {
-					s = s.slice(1);
-					character += 1;
-					c = s.charAt(0);
-					switch (c) {
-					case "":
-						errorAt("Missing '{a}'.", line, character, c);
-						break;
-					case end:
-						s = s.slice(1);
-						character += 1;
-						return it("(range)", value);
-					case "\\":
-						warningAt("Unexpected '{a}'.", line, character, c);
-					}
-					value += c;
-				}
-
-			},
-			token: function () {
-				var b, c, captures, d, depth, high, i, l, low, q, t, isLiteral, isInRange, n;
-
-				function match(x) {
-					var r = x.exec(s), r1;
-
-					if (r) {
-						l = r[0].length;
-						r1 = r[1];
-						c = r1.charAt(0);
-						s = s.substr(l);
-						from = character + l - r1.length;
-						character += l;
-						return r1;
-					}
-				}
-
-				function string(x) {
-					var c, j, r = "", allowNewLine = false;
-
-					if (jsonmode && x !== "\"") {
-						warningAt("Strings must use doublequote.",
-								line, character);
-					}
-
-					if (option.quotmark) {
-						if (option.quotmark === "single" && x !== "'") {
-							warningAt("Strings must use singlequote.",
-									line, character);
-						} else if (option.quotmark === "double" && x !== "\"") {
-							warningAt("Strings must use doublequote.",
-									line, character);
-						} else if (option.quotmark === true) {
-							quotmark = quotmark || x;
-							if (quotmark !== x) {
-								warningAt("Mixed double and single quotes.",
-										line, character);
-							}
-						}
-					}
-
-					function esc(n) {
-						var i = parseInt(s.substr(j + 1, n), 16);
-						j += n;
-						if (i >= 32 && i <= 126 &&
-								i !== 34 && i !== 92 && i !== 39) {
-							warningAt("Unnecessary escapement.", line, character);
-						}
-						character += n;
-						c = String.fromCharCode(i);
-					}
-
-					j = 0;
-
-unclosedString:
-					for (;;) {
-						while (j >= s.length) {
-							j = 0;
-
-							var cl = line, cf = from;
-							if (!nextLine()) {
-								errorAt("Unclosed string.", cl, cf);
-								break unclosedString;
-							}
-
-							if (allowNewLine) {
-								allowNewLine = false;
-							} else {
-								warningAt("Unclosed string.", cl, cf);
-							}
-						}
-
-						c = s.charAt(j);
-						if (c === x) {
-							character += 1;
-							s = s.substr(j + 1);
-							return it("(string)", r, x);
-						}
-
-						if (c < " ") {
-							if (c === "\n" || c === "\r") {
-								break;
-							}
-							warningAt("Control character in string: {a}.",
-									line, character + j, s.slice(0, j));
-						} else if (c === "\\") {
-							j += 1;
-							character += 1;
-							c = s.charAt(j);
-							n = s.charAt(j + 1);
-							switch (c) {
-							case "\\":
-							case "\"":
-							case "/":
-								break;
-							case "\'":
-								if (jsonmode) {
-									warningAt("Avoid \\'.", line, character);
-								}
-								break;
-							case "b":
-								c = "\b";
-								break;
-							case "f":
-								c = "\f";
-								break;
-							case "n":
-								c = "\n";
-								break;
-							case "r":
-								c = "\r";
-								break;
-							case "t":
-								c = "\t";
-								break;
-							case "0":
-								c = "\0";
-								if (n >= 0 && n <= 7 && directive["use strict"]) {
-									warningAt(
-									"Octal literals are not allowed in strict mode.",
-									line, character);
-								}
-								break;
-							case "u":
-								esc(4);
-								break;
-							case "v":
-								if (jsonmode) {
-									warningAt("Avoid \\v.", line, character);
-								}
-								c = "\v";
-								break;
-							case "x":
-								if (jsonmode) {
-									warningAt("Avoid \\x-.", line, character);
-								}
-								esc(2);
-								break;
-							case "":
-								allowNewLine = true;
-								if (option.multistr) {
-									if (jsonmode) {
-										warningAt("Avoid EOL escapement.", line, character);
-									}
-									c = "";
-									character -= 1;
-									break;
-								}
-								warningAt("Bad escapement of EOL. Use option multistr if needed.",
-									line, character);
-								break;
-							case "!":
-								if (s.charAt(j - 2) === "<")
-									break;
-							default:
-								warningAt("Bad escapement.", line, character);
-							}
-						}
-						r += c;
-						character += 1;
-						j += 1;
-					}
-				}
-
-				for (;;) {
-					if (!s) {
-						return it(nextLine() ? "(endline)" : "(end)", "");
-					}
-
-					t = match(tx);
-
-					if (!t) {
-						t = "";
-						c = "";
-						while (s && s < "!") {
-							s = s.substr(1);
-						}
-						if (s) {
-							errorAt("Unexpected '{a}'.", line, character, s.substr(0, 1));
-							s = "";
-						}
-					} else {
-
-						if (isAlpha(c) || c === "_" || c === "$") {
-							return it("(identifier)", t);
-						}
-
-						if (isDigit(c)) {
-							if (!isFinite(Number(t))) {
-								warningAt("Bad number '{a}'.",
-									line, character, t);
-							}
-							if (isAlpha(s.substr(0, 1))) {
-								warningAt("Missing space after '{a}'.",
-										line, character, t);
-							}
-							if (c === "0") {
-								d = t.substr(1, 1);
-								if (isDigit(d)) {
-									if (token.id !== ".") {
-										warningAt("Don't use extra leading zeros '{a}'.",
-											line, character, t);
-									}
-								} else if (jsonmode && (d === "x" || d === "X")) {
-									warningAt("Avoid 0x-. '{a}'.",
-											line, character, t);
-								}
-							}
-							if (t.substr(t.length - 1) === ".") {
-								warningAt(
-"A trailing decimal point can be confused with a dot '{a}'.", line, character, t);
-							}
-							return it("(number)", t);
-						}
-						switch (t) {
-
-						case "\"":
-						case "'":
-							return string(t);
-
-						case "//":
-							s = "";
-							token.comment = true;
-							break;
-
-						case "/*":
-							for (;;) {
-								i = s.search(lx);
-								if (i >= 0) {
-									break;
-								}
-								if (!nextLine()) {
-									errorAt("Unclosed comment.", line, character);
-								}
-							}
-							s = s.substr(i + 2);
-							token.comment = true;
-							break;
-
-						case "/*members":
-						case "/*member":
-						case "/*jshint":
-						case "/*jslint":
-						case "/*global":
-						case "*/":
-							return {
-								value: t,
-								type: "special",
-								line: line,
-								character: character,
-								from: from
-							};
-
-						case "":
-							break;
-						case "/":
-							if (s.charAt(0) === "=") {
-								errorAt("A regular expression literal can be confused with '/='.",
-									line, from);
-							}
-
-							if (prereg) {
-								depth = 0;
-								captures = 0;
-								l = 0;
-								for (;;) {
-									b = true;
-									c = s.charAt(l);
-									l += 1;
-									switch (c) {
-									case "":
-										errorAt("Unclosed regular expression.", line, from);
-										return quit("Stopping.", line, from);
-									case "/":
-										if (depth > 0) {
-											warningAt("{a} unterminated regular expression " +
-												"group(s).", line, from + l, depth);
-										}
-										c = s.substr(0, l - 1);
-										q = {
-											g: true,
-											i: true,
-											m: true
-										};
-										while (q[s.charAt(l)] === true) {
-											q[s.charAt(l)] = false;
-											l += 1;
-										}
-										character += l;
-										s = s.substr(l);
-										q = s.charAt(0);
-										if (q === "/" || q === "*") {
-											errorAt("Confusing regular expression.",
-													line, from);
-										}
-										return it("(regexp)", c);
-									case "\\":
-										c = s.charAt(l);
-										if (c < " ") {
-											warningAt(
-"Unexpected control character in regular expression.", line, from + l);
-										} else if (c === "<") {
-											warningAt(
-"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
-										}
-										l += 1;
-										break;
-									case "(":
-										depth += 1;
-										b = false;
-										if (s.charAt(l) === "?") {
-											l += 1;
-											switch (s.charAt(l)) {
-											case ":":
-											case "=":
-											case "!":
-												l += 1;
-												break;
-											default:
-												warningAt(
-"Expected '{a}' and instead saw '{b}'.", line, from + l, ":", s.charAt(l));
-											}
-										} else {
-											captures += 1;
-										}
-										break;
-									case "|":
-										b = false;
-										break;
-									case ")":
-										if (depth === 0) {
-											warningAt("Unescaped '{a}'.",
-													line, from + l, ")");
-										} else {
-											depth -= 1;
-										}
-										break;
-									case " ":
-										q = 1;
-										while (s.charAt(l) === " ") {
-											l += 1;
-											q += 1;
-										}
-										if (q > 1) {
-											warningAt(
-"Spaces are hard to count. Use {{a}}.", line, from + l, q);
-										}
-										break;
-									case "[":
-										c = s.charAt(l);
-										if (c === "^") {
-											l += 1;
-											if (s.charAt(l) === "]") {
-												errorAt("Unescaped '{a}'.",
-													line, from + l, "^");
-											}
-										}
-										if (c === "]") {
-											warningAt("Empty class.", line,
-													from + l - 1);
-										}
-										isLiteral = false;
-										isInRange = false;
-klass:
-										do {
-											c = s.charAt(l);
-											l += 1;
-											switch (c) {
-											case "[":
-											case "^":
-												warningAt("Unescaped '{a}'.",
-														line, from + l, c);
-												if (isInRange) {
-													isInRange = false;
-												} else {
-													isLiteral = true;
-												}
-												break;
-											case "-":
-												if (isLiteral && !isInRange) {
-													isLiteral = false;
-													isInRange = true;
-												} else if (isInRange) {
-													isInRange = false;
-												} else if (s.charAt(l) === "]") {
-													isInRange = true;
-												} else {
-													if (option.regexdash !== (l === 2 || (l === 3 &&
-														s.charAt(1) === "^"))) {
-														warningAt("Unescaped '{a}'.",
-															line, from + l - 1, "-");
-													}
-													isLiteral = true;
-												}
-												break;
-											case "]":
-												if (isInRange && !option.regexdash) {
-													warningAt("Unescaped '{a}'.",
-															line, from + l - 1, "-");
-												}
-												break klass;
-											case "\\":
-												c = s.charAt(l);
-												if (c < " ") {
-													warningAt(
-"Unexpected control character in regular expression.", line, from + l);
-												} else if (c === "<") {
-													warningAt(
-"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
-												}
-												l += 1;
-												if (/[wsd]/i.test(c)) {
-													if (isInRange) {
-														warningAt("Unescaped '{a}'.",
-															line, from + l, "-");
-														isInRange = false;
-													}
-													isLiteral = false;
-												} else if (isInRange) {
-													isInRange = false;
-												} else {
-													isLiteral = true;
-												}
-												break;
-											case "/":
-												warningAt("Unescaped '{a}'.",
-														line, from + l - 1, "/");
-
-												if (isInRange) {
-													isInRange = false;
-												} else {
-													isLiteral = true;
-												}
-												break;
-											case "<":
-												if (isInRange) {
-													isInRange = false;
-												} else {
-													isLiteral = true;
-												}
-												break;
-											default:
-												if (isInRange) {
-													isInRange = false;
-												} else {
-													isLiteral = true;
-												}
-											}
-										} while (c);
-										break;
-									case ".":
-										if (option.regexp) {
-											warningAt("Insecure '{a}'.", line,
-													from + l, c);
-										}
-										break;
-									case "]":
-									case "?":
-									case "{":
-									case "}":
-									case "+":
-									case "*":
-										warningAt("Unescaped '{a}'.", line,
-												from + l, c);
-									}
-									if (b) {
-										switch (s.charAt(l)) {
-										case "?":
-										case "+":
-										case "*":
-											l += 1;
-											if (s.charAt(l) === "?") {
-												l += 1;
-											}
-											break;
-										case "{":
-											l += 1;
-											c = s.charAt(l);
-											if (c < "0" || c > "9") {
-												warningAt(
-"Expected a number and instead saw '{a}'.", line, from + l, c);
-												break; // No reason to continue checking numbers.
-											}
-											l += 1;
-											low = +c;
-											for (;;) {
-												c = s.charAt(l);
-												if (c < "0" || c > "9") {
-													break;
-												}
-												l += 1;
-												low = +c + (low * 10);
-											}
-											high = low;
-											if (c === ",") {
-												l += 1;
-												high = Infinity;
-												c = s.charAt(l);
-												if (c >= "0" && c <= "9") {
-													l += 1;
-													high = +c;
-													for (;;) {
-														c = s.charAt(l);
-														if (c < "0" || c > "9") {
-															break;
-														}
-														l += 1;
-														high = +c + (high * 10);
-													}
-												}
-											}
-											if (s.charAt(l) !== "}") {
-												warningAt(
-"Expected '{a}' and instead saw '{b}'.", line, from + l, "}", c);
-											} else {
-												l += 1;
-											}
-											if (s.charAt(l) === "?") {
-												l += 1;
-											}
-											if (low > high) {
-												warningAt(
-"'{a}' should not be greater than '{b}'.", line, from + l, low, high);
-											}
-										}
-									}
-								}
-								c = s.substr(0, l - 1);
-								character += l;
-								s = s.substr(l);
-								return it("(regexp)", c);
-							}
-							return it("(punctuator)", t);
-
-						case "#":
-							return it("(punctuator)", t);
-						default:
-							return it("(punctuator)", t);
-						}
-					}
-				}
-			}
-		};
-	}());
-
-
-	function addlabel(t, type, token) {
-		if (t === "hasOwnProperty") {
-			warning("'hasOwnProperty' is a really bad name.");
-		}
-		if (type === "exception") {
-			if (is_own(funct["(context)"], t)) {
-				if (funct[t] !== true && !option.node) {
-					warning("Value of '{a}' may be overwritten in IE.", nexttoken, t);
-				}
-			}
-		}
-
-		if (is_own(funct, t) && !funct["(global)"]) {
-			if (funct[t] === true) {
-				if (option.latedef)
-					warning("'{a}' was used before it was defined.", nexttoken, t);
-			} else {
-				if (!option.shadow && type !== "exception") {
-					warning("'{a}' is already defined.", nexttoken, t);
-				}
-			}
-		}
-
-		funct[t] = type;
-
-		if (token) {
-			funct["(tokens)"][t] = token;
-		}
-
-		if (funct["(global)"]) {
-			global[t] = funct;
-			if (is_own(implied, t)) {
-				if (option.latedef)
-					warning("'{a}' was used before it was defined.", nexttoken, t);
-				delete implied[t];
-			}
-		} else {
-			scope[t] = funct;
-		}
-	}
-
-
-	function doOption() {
-		var nt = nexttoken;
-		var o  = nt.value;
-		var quotmarkValue = option.quotmark;
-		var predef = {};
-		var b, obj, filter, t, tn, v, minus;
-
-		switch (o) {
-		case "*/":
-			error("Unbegun comment.");
-			break;
-		case "/*members":
-		case "/*member":
-			o = "/*members";
-			if (!membersOnly) {
-				membersOnly = {};
-			}
-			obj = membersOnly;
-			option.quotmark = false;
-			break;
-		case "/*jshint":
-		case "/*jslint":
-			obj = option;
-			filter = boolOptions;
-			break;
-		case "/*global":
-			obj = predef;
-			break;
-		default:
-			error("What?");
-		}
-
-		t = lex.token();
-
-		for (;;) {
-			minus = false;
-			var breakOuterLoop;
-			for (;;) {
-				if (t.type === "special" && t.value === "*/") {
-					breakOuterLoop = true;
-					break;
-				}
-				if (t.id !== "(endline)" && t.id !== ",") {
-					break;
-				}
-				t = lex.token();
-			}
-			if (breakOuterLoop)
-				break;
-
-			if (o === "/*global" && t.value === "-") {
-				minus = true;
-				t = lex.token();
-			}
-
-			if (t.type !== "(string)" && t.type !== "(identifier)" && o !== "/*members") {
-				error("Bad option.", t);
-			}
-
-			v = lex.token();
-			if (v.id === ":") {
-				v = lex.token();
-
-				if (obj === membersOnly) {
-					error("Expected '{a}' and instead saw '{b}'.", t, "*/", ":");
-				}
-
-				if (o === "/*jshint") {
-					checkOption(t.value, t);
-				}
-
-				var numericVals = [
-					"maxstatements",
-					"maxparams",
-					"maxdepth",
-					"maxcomplexity",
-					"maxerr",
-					"maxlen",
-					"indent"
-				];
-
-				if (numericVals.indexOf(t.value) > -1 && (o === "/*jshint" || o === "/*jslint")) {
-					b = +v.value;
-
-					if (typeof b !== "number" || !isFinite(b) || b <= 0 || Math.floor(b) !== b) {
-						error("Expected a small integer and instead saw '{a}'.", v, v.value);
-					}
-
-					if (t.value === "indent")
-						obj.white = true;
-
-					obj[t.value] = b;
-				} else if (t.value === "validthis") {
-					if (funct["(global)"]) {
-						error("Option 'validthis' can't be used in a global scope.");
-					} else {
-						if (v.value === "true" || v.value === "false")
-							obj[t.value] = v.value === "true";
-						else
-							error("Bad option value.", v);
-					}
-				} else if (t.value === "quotmark" && (o === "/*jshint")) {
-					switch (v.value) {
-					case "true":
-						obj.quotmark = true;
-						break;
-					case "false":
-						obj.quotmark = false;
-						break;
-					case "double":
-					case "single":
-						obj.quotmark = v.value;
-						break;
-					default:
-						error("Bad option value.", v);
-					}
-				} else if (v.value === "true" || v.value === "false") {
-					if (o === "/*jslint") {
-						tn = renamedOptions[t.value] || t.value;
-						obj[tn] = v.value === "true";
-						if (invertedOptions[tn] !== undefined) {
-							obj[tn] = !obj[tn];
-						}
-					} else {
-						obj[t.value] = v.value === "true";
-					}
-
-					if (t.value === "newcap")
-						obj["(explicitNewcap)"] = true;
-				} else {
-					error("Bad option value.", v);
-				}
-				t = lex.token();
-			} else {
-				if (o === "/*jshint" || o === "/*jslint") {
-					error("Missing option value.", t);
-				}
-
-				obj[t.value] = false;
-
-				if (o === "/*global" && minus === true) {
-					JSHINT.blacklist[t.value] = t.value;
-					updatePredefined();
-				}
-
-				t = v;
-			}
-		}
-
-		if (o === "/*members") {
-			option.quotmark = quotmarkValue;
-		}
-
-		combine(predefined, predef);
-
-		for (var key in predef) {
-			if (is_own(predef, key)) {
-				declared[key] = nt;
-			}
-		}
-
-		if (filter) {
-			assume();
-		}
-	}
-
-	function peek(p) {
-		var i = p || 0, j = 0, t;
-
-		while (j <= i) {
-			t = lookahead[j];
-			if (!t) {
-				t = lookahead[j] = lex.token();
-			}
-			j += 1;
-		}
-		return t;
-	}
-
-	function advance(id, t) {
-		switch (token.id) {
-		case "(number)":
-			if (nexttoken.id === ".") {
-				warning("A dot following a number can be confused with a decimal point.", token);
-			}
-			break;
-		case "-":
-			if (nexttoken.id === "-" || nexttoken.id === "--") {
-				warning("Confusing minusses.");
-			}
-			break;
-		case "+":
-			if (nexttoken.id === "+" || nexttoken.id === "++") {
-				warning("Confusing plusses.");
-			}
-			break;
-		}
-
-		if (token.type === "(string)" || token.identifier) {
-			anonname = token.value;
-		}
-
-		if (id && nexttoken.id !== id) {
-			if (t) {
-				if (nexttoken.id === "(end)") {
-					warning("Unmatched '{a}'.", t, t.id);
-				} else {
-					warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
-							nexttoken, id, t.id, t.line, nexttoken.value);
-				}
-			} else if (nexttoken.type !== "(identifier)" ||
-							nexttoken.value !== id) {
-				warning("Expected '{a}' and instead saw '{b}'.",
-						nexttoken, id, nexttoken.value);
-			}
-		}
-
-		prevtoken = token;
-		token = nexttoken;
-		for (;;) {
-			nexttoken = lookahead.shift() || lex.token();
-			if (nexttoken.id === "(end)" || nexttoken.id === "(error)") {
-				return;
-			}
-			if (nexttoken.type === "special") {
-				doOption();
-			} else {
-				if (nexttoken.id !== "(endline)") {
-					break;
-				}
-			}
-		}
-	}
-
-	function expression(rbp, initial) {
-		var left, isArray = false, isObject = false;
-
-		if (nexttoken.id === "(end)")
-			error("Unexpected early end of program.", token);
-
-		advance();
-		if (initial) {
-			anonname = "anonymous";
-			funct["(verb)"] = token.value;
-		}
-		if (initial === true && token.fud) {
-			left = token.fud();
-		} else {
-			if (token.nud) {
-				left = token.nud();
-			} else {
-				if (nexttoken.type === "(number)" && token.id === ".") {
-					warning("A leading decimal point can be confused with a dot: '.{a}'.",
-							token, nexttoken.value);
-					advance();
-					return token;
-				} else {
-					error("Expected an identifier and instead saw '{a}'.",
-							token, token.id);
-				}
-			}
-			while (rbp < nexttoken.lbp) {
-				isArray = token.value === "Array";
-				isObject = token.value === "Object";
-				if (left && (left.value || (left.first && left.first.value))) {
-					if (left.value !== "new" ||
-					  (left.first && left.first.value && left.first.value === ".")) {
-						isArray = false;
-						if (left.value !== token.value) {
-							isObject = false;
-						}
-					}
-				}
-
-				advance();
-				if (isArray && token.id === "(" && nexttoken.id === ")")
-					warning("Use the array literal notation [].", token);
-				if (isObject && token.id === "(" && nexttoken.id === ")")
-					warning("Use the object literal notation {}.", token);
-				if (token.led) {
-					left = token.led(left);
-				} else {
-					error("Expected an operator and instead saw '{a}'.",
-						token, token.id);
-				}
-			}
-		}
-		return left;
-	}
-
-	function adjacent(left, right) {
-		left = left || token;
-		right = right || nexttoken;
-		if (option.white) {
-			if (left.character !== right.from && left.line === right.line) {
-				left.from += (left.character - left.from);
-				warning("Unexpected space after '{a}'.", left, left.value);
-			}
-		}
-	}
-
-	function nobreak(left, right) {
-		left = left || token;
-		right = right || nexttoken;
-		if (option.white && (left.character !== right.from || left.line !== right.line)) {
-			warning("Unexpected space before '{a}'.", right, right.value);
-		}
-	}
-
-	function nospace(left, right) {
-		left = left || token;
-		right = right || nexttoken;
-		if (option.white && !left.comment) {
-			if (left.line === right.line) {
-				adjacent(left, right);
-			}
-		}
-	}
-
-	function nonadjacent(left, right) {
-		if (option.white) {
-			left = left || token;
-			right = right || nexttoken;
-			if (left.value === ";" && right.value === ";") {
-				return;
-			}
-			if (left.line === right.line && left.character === right.from) {
-				left.from += (left.character - left.from);
-				warning("Missing space after '{a}'.",
-						left, left.value);
-			}
-		}
-	}
-
-	function nobreaknonadjacent(left, right) {
-		left = left || token;
-		right = right || nexttoken;
-		if (!option.laxbreak && left.line !== right.line) {
-			warning("Bad line breaking before '{a}'.", right, right.id);
-		} else if (option.white) {
-			left = left || token;
-			right = right || nexttoken;
-			if (left.character === right.from) {
-				left.from += (left.character - left.from);
-				warning("Missing space after '{a}'.",
-						left, left.value);
-			}
-		}
-	}
-
-	function indentation(bias) {
-		var i;
-		if (option.white && nexttoken.id !== "(end)") {
-			i = indent + (bias || 0);
-			if (nexttoken.from !== i) {
-				warning(
-"Expected '{a}' to have an indentation at {b} instead at {c}.",
-						nexttoken, nexttoken.value, i, nexttoken.from);
-			}
-		}
-	}
-
-	function nolinebreak(t) {
-		t = t || token;
-		if (t.line !== nexttoken.line) {
-			warning("Line breaking error '{a}'.", t, t.value);
-		}
-	}
-
-
-	function comma() {
-		if (token.line !== nexttoken.line) {
-			if (!option.laxcomma) {
-				if (comma.first) {
-					warning("Comma warnings can be turned off with 'laxcomma'");
-					comma.first = false;
-				}
-				warning("Bad line breaking before '{a}'.", token, nexttoken.id);
-			}
-		} else if (!token.comment && token.character !== nexttoken.from && option.white) {
-			token.from += (token.character - token.from);
-			warning("Unexpected space after '{a}'.", token, token.value);
-		}
-		advance(",");
-		nonadjacent(token, nexttoken);
-	}
-
-	function symbol(s, p) {
-		var x = syntax[s];
-		if (!x || typeof x !== "object") {
-			syntax[s] = x = {
-				id: s,
-				lbp: p,
-				value: s
-			};
-		}
-		return x;
-	}
-
-
-	function delim(s) {
-		return symbol(s, 0);
-	}
-
-
-	function stmt(s, f) {
-		var x = delim(s);
-		x.identifier = x.reserved = true;
-		x.fud = f;
-		return x;
-	}
-
-
-	function blockstmt(s, f) {
-		var x = stmt(s, f);
-		x.block = true;
-		return x;
-	}
-
-
-	function reserveName(x) {
-		var c = x.id.charAt(0);
-		if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) {
-			x.identifier = x.reserved = true;
-		}
-		return x;
-	}
-
-
-	function prefix(s, f) {
-		var x = symbol(s, 150);
-		reserveName(x);
-		x.nud = (typeof f === "function") ? f : function () {
-			this.right = expression(150);
-			this.arity = "unary";
-			if (this.id === "++" || this.id === "--") {
-				if (option.plusplus) {
-					warning("Unexpected use of '{a}'.", this, this.id);
-				} else if ((!this.right.identifier || this.right.reserved) &&
-						this.right.id !== "." && this.right.id !== "[") {
-					warning("Bad operand.", this);
-				}
-			}
-			return this;
-		};
-		return x;
-	}
-
-
-	function type(s, f) {
-		var x = delim(s);
-		x.type = s;
-		x.nud = f;
-		return x;
-	}
-
-
-	function reserve(s, f) {
-		var x = type(s, f);
-		x.identifier = x.reserved = true;
-		return x;
-	}
-
-
-	function reservevar(s, v) {
-		return reserve(s, function () {
-			if (typeof v === "function") {
-				v(this);
-			}
-			return this;
-		});
-	}
-
-
-	function infix(s, f, p, w) {
-		var x = symbol(s, p);
-		reserveName(x);
-		x.led = function (left) {
-			if (!w) {
-				nobreaknonadjacent(prevtoken, token);
-				nonadjacent(token, nexttoken);
-			}
-			if (s === "in" && left.id === "!") {
-				warning("Confusing use of '{a}'.", left, "!");
-			}
-			if (typeof f === "function") {
-				return f(left, this);
-			} else {
-				this.left = left;
-				this.right = expression(p);
-				return this;
-			}
-		};
-		return x;
-	}
-
-
-	function relation(s, f) {
-		var x = symbol(s, 100);
-		x.led = function (left) {
-			nobreaknonadjacent(prevtoken, token);
-			nonadjacent(token, nexttoken);
-			var right = expression(100);
-
-			if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) {
-				warning("Use the isNaN function to compare with NaN.", this);
-			} else if (f) {
-				f.apply(this, [left, right]);
-			}
-			if (left.id === "!") {
-				warning("Confusing use of '{a}'.", left, "!");
-			}
-			if (right.id === "!") {
-				warning("Confusing use of '{a}'.", right, "!");
-			}
-			this.left = left;
-			this.right = right;
-			return this;
-		};
-		return x;
-	}
-
-
-	function isPoorRelation(node) {
-		return node &&
-			  ((node.type === "(number)" && +node.value === 0) ||
-			   (node.type === "(string)" && node.value === "") ||
-			   (node.type === "null" && !option.eqnull) ||
-				node.type === "true" ||
-				node.type === "false" ||
-				node.type === "undefined");
-	}
-
-
-	function assignop(s) {
-		symbol(s, 20).exps = true;
-
-		return infix(s, function (left, that) {
-			that.left = left;
-
-			if (predefined[left.value] === false &&
-					scope[left.value]["(global)"] === true) {
-				warning("Read only.", left);
-			} else if (left["function"]) {
-				warning("'{a}' is a function.", left, left.value);
-			}
-
-			if (left) {
-				if (option.esnext && funct[left.value] === "const") {
-					warning("Attempting to override '{a}' which is a constant", left, left.value);
-				}
-
-				if (left.id === "." || left.id === "[") {
-					if (!left.left || left.left.value === "arguments") {
-						warning("Bad assignment.", that);
-					}
-					that.right = expression(19);
-					return that;
-				} else if (left.identifier && !left.reserved) {
-					if (funct[left.value] === "exception") {
-						warning("Do not assign to the exception parameter.", left);
-					}
-					that.right = expression(19);
-					return that;
-				}
-
-				if (left === syntax["function"]) {
-					warning(
-"Expected an identifier in an assignment and instead saw a function invocation.",
-								token);
-				}
-			}
-
-			error("Bad assignment.", that);
-		}, 20);
-	}
-
-
-	function bitwise(s, f, p) {
-		var x = symbol(s, p);
-		reserveName(x);
-		x.led = (typeof f === "function") ? f : function (left) {
-			if (option.bitwise) {
-				warning("Unexpected use of '{a}'.", this, this.id);
-			}
-			this.left = left;
-			this.right = expression(p);
-			return this;
-		};
-		return x;
-	}
-
-
-	function bitwiseassignop(s) {
-		symbol(s, 20).exps = true;
-		return infix(s, function (left, that) {
-			if (option.bitwise) {
-				warning("Unexpected use of '{a}'.", that, that.id);
-			}
-			nonadjacent(prevtoken, token);
-			nonadjacent(token, nexttoken);
-			if (left) {
-				if (left.id === "." || left.id === "[" ||
-						(left.identifier && !left.reserved)) {
-					expression(19);
-					return that;
-				}
-				if (left === syntax["function"]) {
-					warning(
-"Expected an identifier in an assignment, and instead saw a function invocation.",
-								token);
-				}
-				return that;
-			}
-			error("Bad assignment.", that);
-		}, 20);
-	}
-
-
-	function suffix(s) {
-		var x = symbol(s, 150);
-		x.led = function (left) {
-			if (option.plusplus) {
-				warning("Unexpected use of '{a}'.", this, this.id);
-			} else if ((!left.identifier || left.reserved) &&
-					left.id !== "." && left.id !== "[") {
-				warning("Bad operand.", this);
-			}
-			this.left = left;
-			return this;
-		};
-		return x;
-	}
-	function optionalidentifier(fnparam) {
-		if (nexttoken.identifier) {
-			advance();
-			if (token.reserved && !option.es5) {
-				if (!fnparam || token.value !== "undefined") {
-					warning("Expected an identifier and instead saw '{a}' (a reserved word).",
-							token, token.id);
-				}
-			}
-			return token.value;
-		}
-	}
-	function identifier(fnparam) {
-		var i = optionalidentifier(fnparam);
-		if (i) {
-			return i;
-		}
-		if (token.id === "function" && nexttoken.id === "(") {
-			warning("Missing name in function declaration.");
-		} else {
-			error("Expected an identifier and instead saw '{a}'.",
-					nexttoken, nexttoken.value);
-		}
-	}
-
-
-	function reachable(s) {
-		var i = 0, t;
-		if (nexttoken.id !== ";" || noreach) {
-			return;
-		}
-		for (;;) {
-			t = peek(i);
-			if (t.reach) {
-				return;
-			}
-			if (t.id !== "(endline)") {
-				if (t.id === "function") {
-					if (!option.latedef) {
-						break;
-					}
-					warning(
-"Inner functions should be listed at the top of the outer function.", t);
-					break;
-				}
-				warning("Unreachable '{a}' after '{b}'.", t, t.value, s);
-				break;
-			}
-			i += 1;
-		}
-	}
-
-
-	function statement(noindent) {
-		var i = indent, r, s = scope, t = nexttoken;
-
-		if (t.id === ";") {
-			advance(";");
-			return;
-		}
-
-		if (t.identifier && !t.reserved && peek().id === ":") {
-			advance();
-			advance(":");
-			scope = Object.create(s);
-			addlabel(t.value, "label");
-
-			if (!nexttoken.labelled && nexttoken.value !== "{") {
-				warning("Label '{a}' on {b} statement.", nexttoken, t.value, nexttoken.value);
-			}
-
-			if (jx.test(t.value + ":")) {
-				warning("Label '{a}' looks like a javascript url.", t, t.value);
-			}
-
-			nexttoken.label = t.value;
-			t = nexttoken;
-		}
-
-		if (t.id === "{") {
-			block(true, true);
-			return;
-		}
-
-		if (!noindent) {
-			indentation();
-		}
-		r = expression(0, true);
-
-		if (!t.block) {
-			if (!option.expr && (!r || !r.exps)) {
-				warning("Expected an assignment or function call and instead saw an expression.",
-					token);
-			} else if (option.nonew && r.id === "(" && r.left.id === "new") {
-				warning("Do not use 'new' for side effects.", t);
-			}
-
-			if (nexttoken.id === ",") {
-				return comma();
-			}
-
-			if (nexttoken.id !== ";") {
-				if (!option.asi) {
-					if (!option.lastsemic || nexttoken.id !== "}" ||
-							nexttoken.line !== token.line) {
-						warningAt("Missing semicolon.", token.line, token.character);
-					}
-				}
-			} else {
-				adjacent(token, nexttoken);
-				advance(";");
-				nonadjacent(token, nexttoken);
-			}
-		}
-
-		indent = i;
-		scope = s;
-		return r;
-	}
-
-
-	function statements(startLine) {
-		var a = [], p;
-
-		while (!nexttoken.reach && nexttoken.id !== "(end)") {
-			if (nexttoken.id === ";") {
-				p = peek();
-				if (!p || p.id !== "(") {
-					warning("Unnecessary semicolon.");
-				}
-				advance(";");
-			} else {
-				a.push(statement(startLine === nexttoken.line));
-			}
-		}
-		return a;
-	}
-	function directives() {
-		var i, p, pn;
-
-		for (;;) {
-			if (nexttoken.id === "(string)") {
-				p = peek(0);
-				if (p.id === "(endline)") {
-					i = 1;
-					do {
-						pn = peek(i);
-						i = i + 1;
-					} while (pn.id === "(endline)");
-
-					if (pn.id !== ";") {
-						if (pn.id !== "(string)" && pn.id !== "(number)" &&
-							pn.id !== "(regexp)" && pn.identifier !== true &&
-							pn.id !== "}") {
-							break;
-						}
-						warning("Missing semicolon.", nexttoken);
-					} else {
-						p = pn;
-					}
-				} else if (p.id === "}") {
-					warning("Missing semicolon.", p);
-				} else if (p.id !== ";") {
-					break;
-				}
-
-				indentation();
-				advance();
-				if (directive[token.value]) {
-					warning("Unnecessary directive \"{a}\".", token, token.value);
-				}
-
-				if (token.value === "use strict") {
-					if (!option["(explicitNewcap)"])
-						option.newcap = true;
-					option.undef = true;
-				}
-				directive[token.value] = true;
-
-				if (p.id === ";") {
-					advance(";");
-				}
-				continue;
-			}
-			break;
-		}
-	}
-	function block(ordinary, stmt, isfunc) {
-		var a,
-			b = inblock,
-			old_indent = indent,
-			m,
-			s = scope,
-			t,
-			line,
-			d;
-
-		inblock = ordinary;
-
-		if (!ordinary || !option.funcscope)
-			scope = Object.create(scope);
-
-		nonadjacent(token, nexttoken);
-		t = nexttoken;
-
-		var metrics = funct["(metrics)"];
-		metrics.nestedBlockDepth += 1;
-		metrics.verifyMaxNestedBlockDepthPerFunction();
-
-		if (nexttoken.id === "{") {
-			advance("{");
-			line = token.line;
-			if (nexttoken.id !== "}") {
-				indent += option.indent;
-				while (!ordinary && nexttoken.from > indent) {
-					indent += option.indent;
-				}
-
-				if (isfunc) {
-					m = {};
-					for (d in directive) {
-						if (is_own(directive, d)) {
-							m[d] = directive[d];
-						}
-					}
-					directives();
-
-					if (option.strict && funct["(context)"]["(global)"]) {
-						if (!m["use strict"] && !directive["use strict"]) {
-							warning("Missing \"use strict\" statement.");
-						}
-					}
-				}
-
-				a = statements(line);
-
-				metrics.statementCount += a.length;
-
-				if (isfunc) {
-					directive = m;
-				}
-
-				indent -= option.indent;
-				if (line !== nexttoken.line) {
-					indentation();
-				}
-			} else if (line !== nexttoken.line) {
-				indentation();
-			}
-			advance("}", t);
-			indent = old_indent;
-		} else if (!ordinary) {
-			error("Expected '{a}' and instead saw '{b}'.",
-				  nexttoken, "{", nexttoken.value);
-		} else {
-			if (!stmt || option.curly)
-				warning("Expected '{a}' and instead saw '{b}'.",
-						nexttoken, "{", nexttoken.value);
-
-			noreach = true;
-			indent += option.indent;
-			a = [statement(nexttoken.line === token.line)];
-			indent -= option.indent;
-			noreach = false;
-		}
-		funct["(verb)"] = null;
-		if (!ordinary || !option.funcscope) scope = s;
-		inblock = b;
-		if (ordinary && option.noempty && (!a || a.length === 0)) {
-			warning("Empty block.");
-		}
-		metrics.nestedBlockDepth -= 1;
-		return a;
-	}
-
-
-	function countMember(m) {
-		if (membersOnly && typeof membersOnly[m] !== "boolean") {
-			warning("Unexpected /*member '{a}'.", token, m);
-		}
-		if (typeof member[m] === "number") {
-			member[m] += 1;
-		} else {
-			member[m] = 1;
-		}
-	}
-
-
-	function note_implied(token) {
-		var name = token.value, line = token.line, a = implied[name];
-		if (typeof a === "function") {
-			a = false;
-		}
-
-		if (!a) {
-			a = [line];
-			implied[name] = a;
-		} else if (a[a.length - 1] !== line) {
-			a.push(line);
-		}
-	}
-
-	type("(number)", function () {
-		return this;
-	});
-
-	type("(string)", function () {
-		return this;
-	});
-
-	syntax["(identifier)"] = {
-		type: "(identifier)",
-		lbp: 0,
-		identifier: true,
-		nud: function () {
-			var v = this.value,
-				s = scope[v],
-				f;
-
-			if (typeof s === "function") {
-				s = undefined;
-			} else if (typeof s === "boolean") {
-				f = funct;
-				funct = functions[0];
-				addlabel(v, "var");
-				s = funct;
-				funct = f;
-			}
-			if (funct === s) {
-				switch (funct[v]) {
-				case "unused":
-					funct[v] = "var";
-					break;
-				case "unction":
-					funct[v] = "function";
-					this["function"] = true;
-					break;
-				case "function":
-					this["function"] = true;
-					break;
-				case "label":
-					warning("'{a}' is a statement label.", token, v);
-					break;
-				}
-			} else if (funct["(global)"]) {
-
-				if (option.undef && typeof predefined[v] !== "boolean") {
-					if (!(anonname === "typeof" || anonname === "delete") ||
-						(nexttoken && (nexttoken.value === "." || nexttoken.value === "["))) {
-
-						isundef(funct, "'{a}' is not defined.", token, v);
-					}
-				}
-
-				note_implied(token);
-			} else {
-
-				switch (funct[v]) {
-				case "closure":
-				case "function":
-				case "var":
-				case "unused":
-					warning("'{a}' used out of scope.", token, v);
-					break;
-				case "label":
-					warning("'{a}' is a statement label.", token, v);
-					break;
-				case "outer":
-				case "global":
-					break;
-				default:
-					if (s === true) {
-						funct[v] = true;
-					} else if (s === null) {
-						warning("'{a}' is not allowed.", token, v);
-						note_implied(token);
-					} else if (typeof s !== "object") {
-						if (option.undef) {
-							if (!(anonname === "typeof" || anonname === "delete") ||
-								(nexttoken &&
-									(nexttoken.value === "." || nexttoken.value === "["))) {
-
-								isundef(funct, "'{a}' is not defined.", token, v);
-							}
-						}
-						funct[v] = true;
-						note_implied(token);
-					} else {
-						switch (s[v]) {
-						case "function":
-						case "unction":
-							this["function"] = true;
-							s[v] = "closure";
-							funct[v] = s["(global)"] ? "global" : "outer";
-							break;
-						case "var":
-						case "unused":
-							s[v] = "closure";
-							funct[v] = s["(global)"] ? "global" : "outer";
-							break;
-						case "closure":
-							funct[v] = s["(global)"] ? "global" : "outer";
-							break;
-						case "label":
-							warning("'{a}' is a statement label.", token, v);
-						}
-					}
-				}
-			}
-			return this;
-		},
-		led: function () {
-			error("Expected an operator and instead saw '{a}'.",
-				nexttoken, nexttoken.value);
-		}
-	};
-
-	type("(regexp)", function () {
-		return this;
-	});
-
-	delim("(endline)");
-	delim("(begin)");
-	delim("(end)").reach = true;
-	delim("</").reach = true;
-	delim("<!");
-	delim("<!--");
-	delim("-->");
-	delim("(error)").reach = true;
-	delim("}").reach = true;
-	delim(")");
-	delim("]");
-	delim("\"").reach = true;
-	delim("'").reach = true;
-	delim(";");
-	delim(":").reach = true;
-	delim(",");
-	delim("#");
-	delim("@");
-	reserve("else");
-	reserve("case").reach = true;
-	reserve("catch");
-	reserve("default").reach = true;
-	reserve("finally");
-	reservevar("arguments", function (x) {
-		if (directive["use strict"] && funct["(global)"]) {
-			warning("Strict violation.", x);
-		}
-	});
-	reservevar("eval");
-	reservevar("false");
-	reservevar("Infinity");
-	reservevar("null");
-	reservevar("this", function (x) {
-		if (directive["use strict"] && !option.validthis && ((funct["(statement)"] &&
-				funct["(name)"].charAt(0) > "Z") || funct["(global)"])) {
-			warning("Possible strict violation.", x);
-		}
-	});
-	reservevar("true");
-	reservevar("undefined");
-	assignop("=", "assign", 20);
-	assignop("+=", "assignadd", 20);
-	assignop("-=", "assignsub", 20);
-	assignop("*=", "assignmult", 20);
-	assignop("/=", "assigndiv", 20).nud = function () {
-		error("A regular expression literal can be confused with '/='.");
-	};
-	assignop("%=", "assignmod", 20);
-	bitwiseassignop("&=", "assignbitand", 20);
-	bitwiseassignop("|=", "assignbitor", 20);
-	bitwiseassignop("^=", "assignbitxor", 20);
-	bitwiseassignop("<<=", "assignshiftleft", 20);
-	bitwiseassignop(">>=", "assignshiftright", 20);
-	bitwiseassignop(">>>=", "assignshiftrightunsigned", 20);
-	infix("?", function (left, that) {
-		that.left = left;
-		that.right = expression(10);
-		advance(":");
-		that["else"] = expression(10);
-		return that;
-	}, 30);
-
-	infix("||", "or", 40);
-	infix("&&", "and", 50);
-	bitwise("|", "bitor", 70);
-	bitwise("^", "bitxor", 80);
-	bitwise("&", "bitand", 90);
-	relation("==", function (left, right) {
-		var eqnull = option.eqnull && (left.value === "null" || right.value === "null");
-
-		if (!eqnull && option.eqeqeq)
-			warning("Expected '{a}' and instead saw '{b}'.", this, "===", "==");
-		else if (isPoorRelation(left))
-			warning("Use '{a}' to compare with '{b}'.", this, "===", left.value);
-		else if (isPoorRelation(right))
-			warning("Use '{a}' to compare with '{b}'.", this, "===", right.value);
-
-		return this;
-	});
-	relation("===");
-	relation("!=", function (left, right) {
-		var eqnull = option.eqnull &&
-				(left.value === "null" || right.value === "null");
-
-		if (!eqnull && option.eqeqeq) {
-			warning("Expected '{a}' and instead saw '{b}'.",
-					this, "!==", "!=");
-		} else if (isPoorRelation(left)) {
-			warning("Use '{a}' to compare with '{b}'.",
-					this, "!==", left.value);
-		} else if (isPoorRelation(right)) {
-			warning("Use '{a}' to compare with '{b}'.",
-					this, "!==", right.value);
-		}
-		return this;
-	});
-	relation("!==");
-	relation("<");
-	relation(">");
-	relation("<=");
-	relation(">=");
-	bitwise("<<", "shiftleft", 120);
-	bitwise(">>", "shiftright", 120);
-	bitwise(">>>", "shiftrightunsigned", 120);
-	infix("in", "in", 120);
-	infix("instanceof", "instanceof", 120);
-	infix("+", function (left, that) {
-		var right = expression(130);
-		if (left && right && left.id === "(string)" && right.id === "(string)") {
-			left.value += right.value;
-			left.character = right.character;
-			if (!option.scripturl && jx.test(left.value)) {
-				warning("JavaScript URL.", left);
-			}
-			return left;
-		}
-		that.left = left;
-		that.right = right;
-		return that;
-	}, 130);
-	prefix("+", "num");
-	prefix("+++", function () {
-		warning("Confusing pluses.");
-		this.right = expression(150);
-		this.arity = "unary";
-		return this;
-	});
-	infix("+++", function (left) {
-		warning("Confusing pluses.");
-		this.left = left;
-		this.right = expression(130);
-		return this;
-	}, 130);
-	infix("-", "sub", 130);
-	prefix("-", "neg");
-	prefix("---", function () {
-		warning("Confusing minuses.");
-		this.right = expression(150);
-		this.arity = "unary";
-		return this;
-	});
-	infix("---", function (left) {
-		warning("Confusing minuses.");
-		this.left = left;
-		this.right = expression(130);
-		return this;
-	}, 130);
-	infix("*", "mult", 140);
-	infix("/", "div", 140);
-	infix("%", "mod", 140);
-
-	suffix("++", "postinc");
-	prefix("++", "preinc");
-	syntax["++"].exps = true;
-
-	suffix("--", "postdec");
-	prefix("--", "predec");
-	syntax["--"].exps = true;
-	prefix("delete", function () {
-		var p = expression(0);
-		if (!p || (p.id !== "." && p.id !== "[")) {
-			warning("Variables should not be deleted.");
-		}
-		this.first = p;
-		return this;
-	}).exps = true;
-
-	prefix("~", function () {
-		if (option.bitwise) {
-			warning("Unexpected '{a}'.", this, "~");
-		}
-		expression(150);
-		return this;
-	});
-
-	prefix("!", function () {
-		this.right = expression(150);
-		this.arity = "unary";
-		if (bang[this.right.id] === true) {
-			warning("Confusing use of '{a}'.", this, "!");
-		}
-		return this;
-	});
-	prefix("typeof", "typeof");
-	prefix("new", function () {
-		var c = expression(155), i;
-		if (c && c.id !== "function") {
-			if (c.identifier) {
-				c["new"] = true;
-				switch (c.value) {
-				case "Number":
-				case "String":
-				case "Boolean":
-				case "Math":
-				case "JSON":
-					warning("Do not use {a} as a constructor.", prevtoken, c.value);
-					break;
-				case "Function":
-					if (!option.evil) {
-						warning("The Function constructor is eval.");
-					}
-					break;
-				case "Date":
-				case "RegExp":
-					break;
-				default:
-					if (c.id !== "function") {
-						i = c.value.substr(0, 1);
-						if (option.newcap && (i < "A" || i > "Z") && !is_own(global, c.value)) {
-							warning("A constructor name should start with an uppercase letter.",
-								token);
-						}
-					}
-				}
-			} else {
-				if (c.id !== "." && c.id !== "[" && c.id !== "(") {
-					warning("Bad constructor.", token);
-				}
-			}
-		} else {
-			if (!option.supernew)
-				warning("Weird construction. Delete 'new'.", this);
-		}
-		adjacent(token, nexttoken);
-		if (nexttoken.id !== "(" && !option.supernew) {
-			warning("Missing '()' invoking a constructor.",
-				token, token.value);
-		}
-		this.first = c;
-		return this;
-	});
-	syntax["new"].exps = true;
-
-	prefix("void").exps = true;
-
-	infix(".", function (left, that) {
-		adjacent(prevtoken, token);
-		nobreak();
-		var m = identifier();
-		if (typeof m === "string") {
-			countMember(m);
-		}
-		that.left = left;
-		that.right = m;
-		if (left && left.value === "arguments" && (m === "callee" || m === "caller")) {
-			if (option.noarg)
-				warning("Avoid arguments.{a}.", left, m);
-			else if (directive["use strict"])
-				error("Strict violation.");
-		} else if (!option.evil && left && left.value === "document" &&
-				(m === "write" || m === "writeln")) {
-			warning("document.write can be a form of eval.", left);
-		}
-		if (!option.evil && (m === "eval" || m === "execScript")) {
-			warning("eval is evil.");
-		}
-		return that;
-	}, 160, true);
-
-	infix("(", function (left, that) {
-		if (prevtoken.id !== "}" && prevtoken.id !== ")") {
-			nobreak(prevtoken, token);
-		}
-		nospace();
-		if (option.immed && !left.immed && left.id === "function") {
-			warning("Wrap an immediate function invocation in parentheses " +
-				"to assist the reader in understanding that the expression " +
-				"is the result of a function, and not the function itself.");
-		}
-		var n = 0,
-			p = [];
-		if (left) {
-			if (left.type === "(identifier)") {
-				if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {
-					if ("Number String Boolean Date Object".indexOf(left.value) === -1) {
-						if (left.value === "Math") {
-							warning("Math is not a function.", left);
-						} else if (option.newcap) {
-							warning("Missing 'new' prefix when invoking a constructor.", left);
-						}
-					}
-				}
-			}
-		}
-		if (nexttoken.id !== ")") {
-			for (;;) {
-				p[p.length] = expression(10);
-				n += 1;
-				if (nexttoken.id !== ",") {
-					break;
-				}
-				comma();
-			}
-		}
-		advance(")");
-		nospace(prevtoken, token);
-		if (typeof left === "object") {
-			if (left.value === "parseInt" && n === 1) {
-				warning("Missing radix parameter.", token);
-			}
-			if (!option.evil) {
-				if (left.value === "eval" || left.value === "Function" ||
-						left.value === "execScript") {
-					warning("eval is evil.", left);
-
-					if (p[0] && [0].id === "(string)") {
-						addInternalSrc(left, p[0].value);
-					}
-				} else if (p[0] && p[0].id === "(string)" &&
-					   (left.value === "setTimeout" ||
-						left.value === "setInterval")) {
-					warning(
-	"Implied eval is evil. Pass a function instead of a string.", left);
-					addInternalSrc(left, p[0].value);
-				} else if (p[0] && p[0].id === "(string)" &&
-					   left.value === "." &&
-					   left.left.value === "window" &&
-					   (left.right === "setTimeout" ||
-						left.right === "setInterval")) {
-					warning(
-	"Implied eval is evil. Pass a function instead of a string.", left);
-					addInternalSrc(left, p[0].value);
-				}
-			}
-			if (!left.identifier && left.id !== "." && left.id !== "[" &&
-					left.id !== "(" && left.id !== "&&" && left.id !== "||" &&
-					left.id !== "?") {
-				warning("Bad invocation.", left);
-			}
-		}
-		that.left = left;
-		return that;
-	}, 155, true).exps = true;
-
-	prefix("(", function () {
-		nospace();
-		if (nexttoken.id === "function") {
-			nexttoken.immed = true;
-		}
-		var v = expression(0);
-		advance(")", this);
-		nospace(prevtoken, token);
-		if (option.immed && v.id === "function") {
-			if (nexttoken.id !== "(" &&
-			  (nexttoken.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) {
-				warning(
-"Do not wrap function literals in parens unless they are to be immediately invoked.",
-						this);
-			}
-		}
-
-		return v;
-	});
-
-	infix("[", function (left, that) {
-		nobreak(prevtoken, token);
-		nospace();
-		var e = expression(0), s;
-		if (e && e.type === "(string)") {
-			if (!option.evil && (e.value === "eval" || e.value === "execScript")) {
-				warning("eval is evil.", that);
-			}
-			countMember(e.value);
-			if (!option.sub && ix.test(e.value)) {
-				s = syntax[e.value];
-				if (!s || !s.reserved) {
-					warning("['{a}'] is better written in dot notation.",
-							prevtoken, e.value);
-				}
-			}
-		}
-		advance("]", that);
-		nospace(prevtoken, token);
-		that.left = left;
-		that.right = e;
-		return that;
-	}, 160, true);
-
-	prefix("[", function () {
-		var b = token.line !== nexttoken.line;
-		this.first = [];
-		if (b) {
-			indent += option.indent;
-			if (nexttoken.from === indent + option.indent) {
-				indent += option.indent;
-			}
-		}
-		while (nexttoken.id !== "(end)") {
-			while (nexttoken.id === ",") {
-				if (!option.es5)
-					warning("Extra comma.");
-				advance(",");
-			}
-			if (nexttoken.id === "]") {
-				break;
-			}
-			if (b && token.line !== nexttoken.line) {
-				indentation();
-			}
-			this.first.push(expression(10));
-			if (nexttoken.id === ",") {
-				comma();
-				if (nexttoken.id === "]" && !option.es5) {
-					warning("Extra comma.", token);
-					break;
-				}
-			} else {
-				break;
-			}
-		}
-		if (b) {
-			indent -= option.indent;
-			indentation();
-		}
-		advance("]", this);
-		return this;
-	}, 160);
-
-
-	function property_name() {
-		var id = optionalidentifier(true);
-		if (!id) {
-			if (nexttoken.id === "(string)") {
-				id = nexttoken.value;
-				advance();
-			} else if (nexttoken.id === "(number)") {
-				id = nexttoken.value.toString();
-				advance();
-			}
-		}
-		return id;
-	}
-
-
-	function functionparams() {
-		var next   = nexttoken;
-		var params = [];
-		var ident;
-
-		advance("(");
-		nospace();
-
-		if (nexttoken.id === ")") {
-			advance(")");
-			return;
-		}
-
-		for (;;) {
-			ident = identifier(true);
-			params.push(ident);
-			addlabel(ident, "unused", token);
-			if (nexttoken.id === ",") {
-				comma();
-			} else {
-				advance(")", next);
-				nospace(prevtoken, token);
-				return params;
-			}
-		}
-	}
-
-
-	function doFunction(name, statement) {
-		var f;
-		var oldOption = option;
-		var oldScope  = scope;
-
-		option = Object.create(option);
-		scope  = Object.create(scope);
-
-		funct = {
-			"(name)"	 : name || "\"" + anonname + "\"",
-			"(line)"	 : nexttoken.line,
-			"(character)": nexttoken.character,
-			"(context)"  : funct,
-			"(breakage)" : 0,
-			"(loopage)"  : 0,
-			"(metrics)"  : createMetrics(nexttoken),
-			"(scope)"	 : scope,
-			"(statement)": statement,
-			"(tokens)"	 : {}
-		};
-
-		f = funct;
-		token.funct = funct;
-
-		functions.push(funct);
-
-		if (name) {
-			addlabel(name, "function");
-		}
-
-		funct["(params)"] = functionparams();
-		funct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]);
-
-		block(false, false, true);
-
-		funct["(metrics)"].verifyMaxStatementsPerFunction();
-		funct["(metrics)"].verifyMaxComplexityPerFunction();
-
-		scope = oldScope;
-		option = oldOption;
-		funct["(last)"] = token.line;
-		funct["(lastcharacter)"] = token.character;
-		funct = funct["(context)"];
-
-		return f;
-	}
-
-	function createMetrics(functionStartToken) {
-		return {
-			statementCount: 0,
-			nestedBlockDepth: -1,
-			ComplexityCount: 1,
-			verifyMaxStatementsPerFunction: function () {
-				if (option.maxstatements &&
-					this.statementCount > option.maxstatements) {
-					var message = "Too many statements per function (" + this.statementCount + ").";
-					warning(message, functionStartToken);
-				}
-			},
-
-			verifyMaxParametersPerFunction: function (params) {
-				params = params || [];
-
-				if (option.maxparams && params.length > option.maxparams) {
-					var message = "Too many parameters per function (" + params.length + ").";
-					warning(message, functionStartToken);
-				}
-			},
-
-			verifyMaxNestedBlockDepthPerFunction: function () {
-				if (option.maxdepth &&
-					this.nestedBlockDepth > 0 &&
-					this.nestedBlockDepth === option.maxdepth + 1) {
-					var message = "Blocks are nested too deeply (" + this.nestedBlockDepth + ").";
-					warning(message);
-				}
-			},
-
-			verifyMaxComplexityPerFunction: function () {
-				var max = option.maxcomplexity;
-				var cc = this.ComplexityCount;
-				if (max && cc > max) {
-					var message = "Cyclomatic complexity is too high per function (" + cc + ").";
-					warning(message, functionStartToken);
-				}
-			}
-		};
-	}
-
-	function increaseComplexityCount() {
-		funct["(metrics)"].ComplexityCount += 1;
-	}
-
-
-	(function (x) {
-		x.nud = function () {
-			var b, f, i, p, t;
-			var props = {}; // All properties, including accessors
-
-			function saveProperty(name, token) {
-				if (props[name] && is_own(props, name))
-					warning("Duplicate member '{a}'.", nexttoken, i);
-				else
-					props[name] = {};
-
-				props[name].basic = true;
-				props[name].basicToken = token;
-			}
-
-			function saveSetter(name, token) {
-				if (props[name] && is_own(props, name)) {
-					if (props[name].basic || props[name].setter)
-						warning("Duplicate member '{a}'.", nexttoken, i);
-				} else {
-					props[name] = {};
-				}
-
-				props[name].setter = true;
-				props[name].setterToken = token;
-			}
-
-			function saveGetter(name) {
-				if (props[name] && is_own(props, name)) {
-					if (props[name].basic || props[name].getter)
-						warning("Duplicate member '{a}'.", nexttoken, i);
-				} else {
-					props[name] = {};
-				}
-
-				props[name].getter = true;
-				props[name].getterToken = token;
-			}
-
-			b = token.line !== nexttoken.line;
-			if (b) {
-				indent += option.indent;
-				if (nexttoken.from === indent + option.indent) {
-					indent += option.indent;
-				}
-			}
-			for (;;) {
-				if (nexttoken.id === "}") {
-					break;
-				}
-				if (b) {
-					indentation();
-				}
-				if (nexttoken.value === "get" && peek().id !== ":") {
-					advance("get");
-					if (!option.es5) {
-						error("get/set are ES5 features.");
-					}
-					i = property_name();
-					if (!i) {
-						error("Missing property name.");
-					}
-					saveGetter(i);
-					t = nexttoken;
-					adjacent(token, nexttoken);
-					f = doFunction();
-					p = f["(params)"];
-					if (p) {
-						warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i);
-					}
-					adjacent(token, nexttoken);
-				} else if (nexttoken.value === "set" && peek().id !== ":") {
-					advance("set");
-					if (!option.es5) {
-						error("get/set are ES5 features.");
-					}
-					i = property_name();
-					if (!i) {
-						error("Missing property name.");
-					}
-					saveSetter(i, nexttoken);
-					t = nexttoken;
-					adjacent(token, nexttoken);
-					f = doFunction();
-					p = f["(params)"];
-					if (!p || p.length !== 1) {
-						warning("Expected a single parameter in set {a} function.", t, i);
-					}
-				} else {
-					i = property_name();
-					saveProperty(i, nexttoken);
-					if (typeof i !== "string") {
-						break;
-					}
-					advance(":");
-					nonadjacent(token, nexttoken);
-					expression(10);
-				}
-
-				countMember(i);
-				if (nexttoken.id === ",") {
-					comma();
-					if (nexttoken.id === ",") {
-						warning("Extra comma.", token);
-					} else if (nexttoken.id === "}" && !option.es5) {
-						warning("Extra comma.", token);
-					}
-				} else {
-					break;
-				}
-			}
-			if (b) {
-				indent -= option.indent;
-				indentation();
-			}
-			advance("}", this);
-			if (option.es5) {
-				for (var name in props) {
-					if (is_own(props, name) && props[name].setter && !props[name].getter) {
-						warning("Setter is defined without getter.", props[name].setterToken);
-					}
-				}
-			}
-			return this;
-		};
-		x.fud = function () {
-			error("Expected to see a statement and instead saw a block.", token);
-		};
-	}(delim("{")));
-
-	useESNextSyntax = function () {
-		var conststatement = stmt("const", function (prefix) {
-			var id, name, value;
-
-			this.first = [];
-			for (;;) {
-				nonadjacent(token, nexttoken);
-				id = identifier();
-				if (funct[id] === "const") {
-					warning("const '" + id + "' has already been declared");
-				}
-				if (funct["(global)"] && predefined[id] === false) {
-					warning("Redefinition of '{a}'.", token, id);
-				}
-				addlabel(id, "const");
-				if (prefix) {
-					break;
-				}
-				name = token;
-				this.first.push(token);
-
-				if (nexttoken.id !== "=") {
-					warning("const " +
-					  "'{a}' is initialized to 'undefined'.", token, id);
-				}
-
-				if (nexttoken.id === "=") {
-					nonadjacent(token, nexttoken);
-					advance("=");
-					nonadjacent(token, nexttoken);
-					if (nexttoken.id === "undefined") {
-						warning("It is not necessary to initialize " +
-						  "'{a}' to 'undefined'.", token, id);
-					}
-					if (peek(0).id === "=" && nexttoken.identifier) {
-						error("Constant {a} was not declared correctly.",
-								nexttoken, nexttoken.value);
-					}
-					value = expression(0);
-					name.first = value;
-				}
-
-				if (nexttoken.id !== ",") {
-					break;
-				}
-				comma();
-			}
-			return this;
-		});
-		conststatement.exps = true;
-	};
-
-	var varstatement = stmt("var", function (prefix) {
-		var id, name, value;
-
-		if (funct["(onevar)"] && option.onevar) {
-			warning("Too many var statements.");
-		} else if (!funct["(global)"]) {
-			funct["(onevar)"] = true;
-		}
-
-		this.first = [];
-
-		for (;;) {
-			nonadjacent(token, nexttoken);
-			id = identifier();
-
-			if (option.esnext && funct[id] === "const") {
-				warning("const '" + id + "' has already been declared");
-			}
-
-			if (funct["(global)"] && predefined[id] === false) {
-				warning("Redefinition of '{a}'.", token, id);
-			}
-
-			addlabel(id, "unused", token);
-
-			if (prefix) {
-				break;
-			}
-
-			name = token;
-			this.first.push(token);
-
-			if (nexttoken.id === "=") {
-				nonadjacent(token, nexttoken);
-				advance("=");
-				nonadjacent(token, nexttoken);
-				if (nexttoken.id === "undefined") {
-					warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id);
-				}
-				if (peek(0).id === "=" && nexttoken.identifier) {
-					error("Variable {a} was not declared correctly.",
-							nexttoken, nexttoken.value);
-				}
-				value = expression(0);
-				name.first = value;
-			}
-			if (nexttoken.id !== ",") {
-				break;
-			}
-			comma();
-		}
-		return this;
-	});
-	varstatement.exps = true;
-
-	blockstmt("function", function () {
-		if (inblock) {
-			warning("Function declarations should not be placed in blocks. " +
-				"Use a function expression or move the statement to the top of " +
-				"the outer function.", token);
-
-		}
-		var i = identifier();
-		if (option.esnext && funct[i] === "const") {
-			warning("const '" + i + "' has already been declared");
-		}
-		adjacent(token, nexttoken);
-		addlabel(i, "unction", token);
-
-		doFunction(i, { statement: true });
-		if (nexttoken.id === "(" && nexttoken.line === token.line) {
-			error(
-"Function declarations are not invocable. Wrap the whole function invocation in parens.");
-		}
-		return this;
-	});
-
-	prefix("function", function () {
-		var i = optionalidentifier();
-		if (i) {
-			adjacent(token, nexttoken);
-		} else {
-			nonadjacent(token, nexttoken);
-		}
-		doFunction(i);
-		if (!option.loopfunc && funct["(loopage)"]) {
-			warning("Don't make functions within a loop.");
-		}
-		return this;
-	});
-
-	blockstmt("if", function () {
-		var t = nexttoken;
-		increaseComplexityCount();
-		advance("(");
-		nonadjacent(this, t);
-		nospace();
-		expression(20);
-		if (nexttoken.id === "=") {
-			if (!option.boss)
-				warning("Assignment in conditional expression");
-			advance("=");
-			expression(20);
-		}
-		advance(")", t);
-		nospace(prevtoken, token);
-		block(true, true);
-		if (nexttoken.id === "else") {
-			nonadjacent(token, nexttoken);
-			advance("else");
-			if (nexttoken.id === "if" || nexttoken.id === "switch") {
-				statement(true);
-			} else {
-				block(true, true);
-			}
-		}
-		return this;
-	});
-
-	blockstmt("try", function () {
-		var b;
-
-		function doCatch() {
-			var oldScope = scope;
-			var e;
-
-			advance("catch");
-			nonadjacent(token, nexttoken);
-			advance("(");
-
-			scope = Object.create(oldScope);
-
-			e = nexttoken.value;
-			if (nexttoken.type !== "(identifier)") {
-				e = null;
-				warning("Expected an identifier and instead saw '{a}'.", nexttoken, e);
-			}
-
-			advance();
-			advance(")");
-
-			funct = {
-				"(name)"	 : "(catch)",
-				"(line)"	 : nexttoken.line,
-				"(character)": nexttoken.character,
-				"(context)"  : funct,
-				"(breakage)" : funct["(breakage)"],
-				"(loopage)"  : funct["(loopage)"],
-				"(scope)"	 : scope,
-				"(statement)": false,
-				"(metrics)"  : createMetrics(nexttoken),
-				"(catch)"	 : true,
-				"(tokens)"	 : {}
-			};
-
-			if (e) {
-				addlabel(e, "exception");
-			}
-
-			token.funct = funct;
-			functions.push(funct);
-
-			block(false);
-
-			scope = oldScope;
-
-			funct["(last)"] = token.line;
-			funct["(lastcharacter)"] = token.character;
-			funct = funct["(context)"];
-		}
-
-		block(false);
-
-		if (nexttoken.id === "catch") {
-			increaseComplexityCount();
-			doCatch();
-			b = true;
-		}
-
-		if (nexttoken.id === "finally") {
-			advance("finally");
-			block(false);
-			return;
-		} else if (!b) {
-			error("Expected '{a}' and instead saw '{b}'.",
-					nexttoken, "catch", nexttoken.value);
-		}
-
-		return this;
-	});
-
-	blockstmt("while", function () {
-		var t = nexttoken;
-		funct["(breakage)"] += 1;
-		funct["(loopage)"] += 1;
-		increaseComplexityCount();
-		advance("(");
-		nonadjacent(this, t);
-		nospace();
-		expression(20);
-		if (nexttoken.id === "=") {
-			if (!option.boss)
-				warning("Assignment in conditional expression");
-			advance("=");
-			expression(20);
-		}
-		advance(")", t);
-		nospace(prevtoken, token);
-		block(true, true);
-		funct["(breakage)"] -= 1;
-		funct["(loopage)"] -= 1;
-		return this;
-	}).labelled = true;
-
-	blockstmt("with", function () {
-		var t = nexttoken;
-		if (directive["use strict"]) {
-			error("'with' is not allowed in strict mode.", token);
-		} else if (!option.withstmt) {
-			warning("Don't use 'with'.", token);
-		}
-
-		advance("(");
-		nonadjacent(this, t);
-		nospace();
-		expression(0);
-		advance(")", t);
-		nospace(prevtoken, token);
-		block(true, true);
-
-		return this;
-	});
-
-	blockstmt("switch", function () {
-		var t = nexttoken,
-			g = false;
-		funct["(breakage)"] += 1;
-		advance("(");
-		nonadjacent(this, t);
-		nospace();
-		this.condition = expression(20);
-		advance(")", t);
-		nospace(prevtoken, token);
-		nonadjacent(token, nexttoken);
-		t = nexttoken;
-		advance("{");
-		nonadjacent(token, nexttoken);
-		indent += option.indent;
-		this.cases = [];
-		for (;;) {
-			switch (nexttoken.id) {
-			case "case":
-				switch (funct["(verb)"]) {
-				case "break":
-				case "case":
-				case "continue":
-				case "return":
-				case "switch":
-				case "throw":
-					break;
-				default:
-					if (!ft.test(lines[nexttoken.line - 2])) {
-						warning(
-							"Expected a 'break' statement before 'case'.",
-							token);
-					}
-				}
-				indentation(-option.indent);
-				advance("case");
-				this.cases.push(expression(20));
-				increaseComplexityCount();
-				g = true;
-				advance(":");
-				funct["(verb)"] = "case";
-				break;
-			case "default":
-				switch (funct["(verb)"]) {
-				case "break":
-				case "continue":
-				case "return":
-				case "throw":
-					break;
-				default:
-					if (!ft.test(lines[nexttoken.line - 2])) {
-						warning(
-							"Expected a 'break' statement before 'default'.",
-							token);
-					}
-				}
-				indentation(-option.indent);
-				advance("default");
-				g = true;
-				advance(":");
-				break;
-			case "}":
-				indent -= option.indent;
-				indentation();
-				advance("}", t);
-				if (this.cases.length === 1 || this.condition.id === "true" ||
-						this.condition.id === "false") {
-					if (!option.onecase)
-						warning("This 'switch' should be an 'if'.", this);
-				}
-				funct["(breakage)"] -= 1;
-				funct["(verb)"] = undefined;
-				return;
-			case "(end)":
-				error("Missing '{a}'.", nexttoken, "}");
-				return;
-			default:
-				if (g) {
-					switch (token.id) {
-					case ",":
-						error("Each value should have its own case label.");
-						return;
-					case ":":
-						g = false;
-						statements();
-						break;
-					default:
-						error("Missing ':' on a case clause.", token);
-						return;
-					}
-				} else {
-					if (token.id === ":") {
-						advance(":");
-						error("Unexpected '{a}'.", token, ":");
-						statements();
-					} else {
-						error("Expected '{a}' and instead saw '{b}'.",
-							nexttoken, "case", nexttoken.value);
-						return;
-					}
-				}
-			}
-		}
-	}).labelled = true;
-
-	stmt("debugger", function () {
-		if (!option.debug) {
-			warning("All 'debugger' statements should be removed.");
-		}
-		return this;
-	}).exps = true;
-
-	(function () {
-		var x = stmt("do", function () {
-			funct["(breakage)"] += 1;
-			funct["(loopage)"] += 1;
-			increaseComplexityCount();
-
-			this.first = block(true);
-			advance("while");
-			var t = nexttoken;
-			nonadjacent(token, t);
-			advance("(");
-			nospace();
-			expression(20);
-			if (nexttoken.id === "=") {
-				if (!option.boss)
-					warning("Assignment in conditional expression");
-				advance("=");
-				expression(20);
-			}
-			advance(")", t);
-			nospace(prevtoken, token);
-			funct["(breakage)"] -= 1;
-			funct["(loopage)"] -= 1;
-			return this;
-		});
-		x.labelled = true;
-		x.exps = true;
-	}());
-
-	blockstmt("for", function () {
-		var s, t = nexttoken;
-		funct["(breakage)"] += 1;
-		funct["(loopage)"] += 1;
-		increaseComplexityCount();
-		advance("(");
-		nonadjacent(this, t);
-		nospace();
-		if (peek(nexttoken.id === "var" ? 1 : 0).id === "in") {
-			if (nexttoken.id === "var") {
-				advance("var");
-				varstatement.fud.call(varstatement, true);
-			} else {
-				switch (funct[nexttoken.value]) {
-				case "unused":
-					funct[nexttoken.value] = "var";
-					break;
-				case "var":
-					break;
-				default:
-					warning("Bad for in variable '{a}'.",
-							nexttoken, nexttoken.value);
-				}
-				advance();
-			}
-			advance("in");
-			expression(20);
-			advance(")", t);
-			s = block(true, true);
-			if (option.forin && s && (s.length > 1 || typeof s[0] !== "object" ||
-					s[0].value !== "if")) {
-				warning("The body of a for in should be wrapped in an if statement to filter " +
-						"unwanted properties from the prototype.", this);
-			}
-			funct["(breakage)"] -= 1;
-			funct["(loopage)"] -= 1;
-			return this;
-		} else {
-			if (nexttoken.id !== ";") {
-				if (nexttoken.id === "var") {
-					advance("var");
-					varstatement.fud.call(varstatement);
-				} else {
-					for (;;) {
-						expression(0, "for");
-						if (nexttoken.id !== ",") {
-							break;
-						}
-						comma();
-					}
-				}
-			}
-			nolinebreak(token);
-			advance(";");
-			if (nexttoken.id !== ";") {
-				expression(20);
-				if (nexttoken.id === "=") {
-					if (!option.boss)
-						warning("Assignment in conditional expression");
-					advance("=");
-					expression(20);
-				}
-			}
-			nolinebreak(token);
-			advance(";");
-			if (nexttoken.id === ";") {
-				error("Expected '{a}' and instead saw '{b}'.",
-						nexttoken, ")", ";");
-			}
-			if (nexttoken.id !== ")") {
-				for (;;) {
-					expression(0, "for");
-					if (nexttoken.id !== ",") {
-						break;
-					}
-					comma();
-				}
-			}
-			advance(")", t);
-			nospace(prevtoken, token);
-			block(true, true);
-			funct["(breakage)"] -= 1;
-			funct["(loopage)"] -= 1;
-			return this;
-		}
-	}).labelled = true;
-
-
-	stmt("break", function () {
-		var v = nexttoken.value;
-
-		if (funct["(breakage)"] === 0)
-			warning("Unexpected '{a}'.", nexttoken, this.value);
-
-		if (!option.asi)
-			nolinebreak(this);
-
-		if (nexttoken.id !== ";") {
-			if (token.line === nexttoken.line) {
-				if (funct[v] !== "label") {
-					warning("'{a}' is not a statement label.", nexttoken, v);
-				} else if (scope[v] !== funct) {
-					warning("'{a}' is out of scope.", nexttoken, v);
-				}
-				this.first = nexttoken;
-				advance();
-			}
-		}
-		reachable("break");
-		return this;
-	}).exps = true;
-
-
-	stmt("continue", function () {
-		var v = nexttoken.value;
-
-		if (funct["(breakage)"] === 0)
-			warning("Unexpected '{a}'.", nexttoken, this.value);
-
-		if (!option.asi)
-			nolinebreak(this);
-
-		if (nexttoken.id !== ";") {
-			if (token.line === nexttoken.line) {
-				if (funct[v] !== "label") {
-					warning("'{a}' is not a statement label.", nexttoken, v);
-				} else if (scope[v] !== funct) {
-					warning("'{a}' is out of scope.", nexttoken, v);
-				}
-				this.first = nexttoken;
-				advance();
-			}
-		} else if (!funct["(loopage)"]) {
-			warning("Unexpected '{a}'.", nexttoken, this.value);
-		}
-		reachable("continue");
-		return this;
-	}).exps = true;
-
-
-	stmt("return", function () {
-		if (this.line === nexttoken.line) {
-			if (nexttoken.id === "(regexp)")
-				warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator.");
-
-			if (nexttoken.id !== ";" && !nexttoken.reach) {
-				nonadjacent(token, nexttoken);
-				if (peek().value === "=" && !option.boss) {
-					warningAt("Did you mean to return a conditional instead of an assignment?",
-							  token.line, token.character + 1);
-				}
-				this.first = expression(0);
-			}
-		} else if (!option.asi) {
-			nolinebreak(this); // always warn (Line breaking error)
-		}
-		reachable("return");
-		return this;
-	}).exps = true;
-
-
-	stmt("throw", function () {
-		nolinebreak(this);
-		nonadjacent(token, nexttoken);
-		this.first = expression(20);
-		reachable("throw");
-		return this;
-	}).exps = true;
-
-	reserve("class");
-	reserve("const");
-	reserve("enum");
-	reserve("export");
-	reserve("extends");
-	reserve("import");
-	reserve("super");
-
-	reserve("let");
-	reserve("yield");
-	reserve("implements");
-	reserve("interface");
-	reserve("package");
-	reserve("private");
-	reserve("protected");
-	reserve("public");
-	reserve("static");
-
-	function jsonValue() {
-
-		function jsonObject() {
-			var o = {}, t = nexttoken;
-			advance("{");
-			if (nexttoken.id !== "}") {
-				for (;;) {
-					if (nexttoken.id === "(end)") {
-						error("Missing '}' to match '{' from line {a}.",
-								nexttoken, t.line);
-					} else if (nexttoken.id === "}") {
-						warning("Unexpected comma.", token);
-						break;
-					} else if (nexttoken.id === ",") {
-						error("Unexpected comma.", nexttoken);
-					} else if (nexttoken.id !== "(string)") {
-						warning("Expected a string and instead saw {a}.",
-								nexttoken, nexttoken.value);
-					}
-					if (o[nexttoken.value] === true) {
-						warning("Duplicate key '{a}'.",
-								nexttoken, nexttoken.value);
-					} else if ((nexttoken.value === "__proto__" &&
-						!option.proto) || (nexttoken.value === "__iterator__" &&
-						!option.iterator)) {
-						warning("The '{a}' key may produce unexpected results.",
-							nexttoken, nexttoken.value);
-					} else {
-						o[nexttoken.value] = true;
-					}
-					advance();
-					advance(":");
-					jsonValue();
-					if (nexttoken.id !== ",") {
-						break;
-					}
-					advance(",");
-				}
-			}
-			advance("}");
-		}
-
-		function jsonArray() {
-			var t = nexttoken;
-			advance("[");
-			if (nexttoken.id !== "]") {
-				for (;;) {
-					if (nexttoken.id === "(end)") {
-						error("Missing ']' to match '[' from line {a}.",
-								nexttoken, t.line);
-					} else if (nexttoken.id === "]") {
-						warning("Unexpected comma.", token);
-						break;
-					} else if (nexttoken.id === ",") {
-						error("Unexpected comma.", nexttoken);
-					}
-					jsonValue();
-					if (nexttoken.id !== ",") {
-						break;
-					}
-					advance(",");
-				}
-			}
-			advance("]");
-		}
-
-		switch (nexttoken.id) {
-		case "{":
-			jsonObject();
-			break;
-		case "[":
-			jsonArray();
-			break;
-		case "true":
-		case "false":
-		case "null":
-		case "(number)":
-		case "(string)":
-			advance();
-			break;
-		case "-":
-			advance("-");
-			if (token.character !== nexttoken.from) {
-				warning("Unexpected space after '-'.", token);
-			}
-			adjacent(token, nexttoken);
-			advance("(number)");
-			break;
-		default:
-			error("Expected a JSON value.", nexttoken);
-		}
-	}
-	var itself = function (s, o, g) {
-		var a, i, k, x;
-		var optionKeys;
-		var newOptionObj = {};
-
-		if (o && o.scope) {
-			JSHINT.scope = o.scope;
-		} else {
-			JSHINT.errors = [];
-			JSHINT.undefs = [];
-			JSHINT.internals = [];
-			JSHINT.blacklist = {};
-			JSHINT.scope = "(main)";
-		}
-
-		predefined = Object.create(standard);
-		declared = Object.create(null);
-		combine(predefined, g || {});
-
-		if (o) {
-			a = o.predef;
-			if (a) {
-				if (!Array.isArray(a) && typeof a === "object") {
-					a = Object.keys(a);
-				}
-				a.forEach(function (item) {
-					var slice;
-					if (item[0] === "-") {
-						slice = item.slice(1);
-						JSHINT.blacklist[slice] = slice;
-					} else {
-						predefined[item] = true;
-					}
-				});
-			}
-
-			optionKeys = Object.keys(o);
-			for (x = 0; x < optionKeys.length; x++) {
-				newOptionObj[optionKeys[x]] = o[optionKeys[x]];
-
-				if (optionKeys[x] === "newcap" && o[optionKeys[x]] === false)
-					newOptionObj["(explicitNewcap)"] = true;
-
-				if (optionKeys[x] === "indent")
-					newOptionObj.white = true;
-			}
-		}
-
-		option = newOptionObj;
-
-		option.indent = option.indent || 4;
-		option.maxerr = option.maxerr || 50;
-
-		tab = "";
-		for (i = 0; i < option.indent; i += 1) {
-			tab += " ";
-		}
-		indent = 1;
-		global = Object.create(predefined);
-		scope = global;
-		funct = {
-			"(global)":   true,
-			"(name)":	  "(global)",
-			"(scope)":	  scope,
-			"(breakage)": 0,
-			"(loopage)":  0,
-			"(tokens)":   {},
-			"(metrics)":   createMetrics(nexttoken)
-		};
-		functions = [funct];
-		urls = [];
-		stack = null;
-		member = {};
-		membersOnly = null;
-		implied = {};
-		inblock = false;
-		lookahead = [];
-		jsonmode = false;
-		warnings = 0;
-		lines = [];
-		unuseds = [];
-
-		if (!isString(s) && !Array.isArray(s)) {
-			errorAt("Input is neither a string nor an array of strings.", 0);
-			return false;
-		}
-
-		if (isString(s) && /^\s*$/g.test(s)) {
-			errorAt("Input is an empty string.", 0);
-			return false;
-		}
-
-		if (s.length === 0) {
-			errorAt("Input is an empty array.", 0);
-			return false;
-		}
-
-		lex.init(s);
-
-		prereg = true;
-		directive = {};
-
-		prevtoken = token = nexttoken = syntax["(begin)"];
-		for (var name in o) {
-			if (is_own(o, name)) {
-				checkOption(name, token);
-			}
-		}
-
-		assume();
-		combine(predefined, g || {});
-		comma.first = true;
-		quotmark = undefined;
-
-		try {
-			advance();
-			switch (nexttoken.id) {
-			case "{":
-			case "[":
-				option.laxbreak = true;
-				jsonmode = true;
-				jsonValue();
-				break;
-			default:
-				directives();
-				if (directive["use strict"] && !option.globalstrict) {
-					warning("Use the function form of \"use strict\".", prevtoken);
-				}
-
-				statements();
-			}
-			advance((nexttoken && nexttoken.value !== ".")	? "(end)" : undefined);
-
-			var markDefined = function (name, context) {
-				do {
-					if (typeof context[name] === "string") {
-
-						if (context[name] === "unused")
-							context[name] = "var";
-						else if (context[name] === "unction")
-							context[name] = "closure";
-
-						return true;
-					}
-
-					context = context["(context)"];
-				} while (context);
-
-				return false;
-			};
-
-			var clearImplied = function (name, line) {
-				if (!implied[name])
-					return;
-
-				var newImplied = [];
-				for (var i = 0; i < implied[name].length; i += 1) {
-					if (implied[name][i] !== line)
-						newImplied.push(implied[name][i]);
-				}
-
-				if (newImplied.length === 0)
-					delete implied[name];
-				else
-					implied[name] = newImplied;
-			};
-
-			var warnUnused = function (name, token) {
-				var line = token.line;
-				var chr  = token.character;
-
-				if (option.unused)
-					warningAt("'{a}' is defined but never used.", line, chr, name);
-
-				unuseds.push({
-					name: name,
-					line: line,
-					character: chr
-				});
-			};
-
-			var checkUnused = function (func, key) {
-				var type = func[key];
-				var token = func["(tokens)"][key];
-
-				if (key.charAt(0) === "(")
-					return;
-
-				if (type !== "unused" && type !== "unction")
-					return;
-				if (func["(params)"] && func["(params)"].indexOf(key) !== -1)
-					return;
-
-				warnUnused(key, token);
-			};
-			for (i = 0; i < JSHINT.undefs.length; i += 1) {
-				k = JSHINT.undefs[i].slice(0);
-
-				if (markDefined(k[2].value, k[0])) {
-					clearImplied(k[2].value, k[2].line);
-				} else {
-					warning.apply(warning, k.slice(1));
-				}
-			}
-
-			functions.forEach(function (func) {
-				for (var key in func) {
-					if (is_own(func, key)) {
-						checkUnused(func, key);
-					}
-				}
-
-				if (!func["(params)"])
-					return;
-
-				var params = func["(params)"].slice();
-				var param  = params.pop();
-				var type;
-
-				while (param) {
-					type = func[param];
-
-					if (param === "undefined")
-						return;
-
-					if (type !== "unused" && type !== "unction")
-						return;
-
-					warnUnused(param, func["(tokens)"][param]);
-					param = params.pop();
-				}
-			});
-
-			for (var key in declared) {
-				if (is_own(declared, key) && !is_own(global, key)) {
-					warnUnused(key, declared[key]);
-				}
-			}
-		} catch (e) {
-			if (e) {
-				var nt = nexttoken || {};
-				JSHINT.errors.push({
-					raw		  : e.raw,
-					reason	  : e.message,
-					line	  : e.line || nt.line,
-					character : e.character || nt.from
-				}, null);
-			}
-		}
-
-		if (JSHINT.scope === "(main)") {
-			o = o || {};
-
-			for (i = 0; i < JSHINT.internals.length; i += 1) {
-				k = JSHINT.internals[i];
-				o.scope = k.elem;
-				itself(k.value, o, g);
-			}
-		}
-
-		return JSHINT.errors.length === 0;
-	};
-	itself.data = function () {
-		var data = {
-			functions: [],
-			options: option
-		};
-		var implieds = [];
-		var members = [];
-		var fu, f, i, j, n, globals;
-
-		if (itself.errors.length) {
-			data.errors = itself.errors;
-		}
-
-		if (jsonmode) {
-			data.json = true;
-		}
-
-		for (n in implied) {
-			if (is_own(implied, n)) {
-				implieds.push({
-					name: n,
-					line: implied[n]
-				});
-			}
-		}
-
-		if (implieds.length > 0) {
-			data.implieds = implieds;
-		}
-
-		if (urls.length > 0) {
-			data.urls = urls;
-		}
-
-		globals = Object.keys(scope);
-		if (globals.length > 0) {
-			data.globals = globals;
-		}
-
-		for (i = 1; i < functions.length; i += 1) {
-			f = functions[i];
-			fu = {};
-
-			for (j = 0; j < functionicity.length; j += 1) {
-				fu[functionicity[j]] = [];
-			}
-
-			for (j = 0; j < functionicity.length; j += 1) {
-				if (fu[functionicity[j]].length === 0) {
-					delete fu[functionicity[j]];
-				}
-			}
-
-			fu.name = f["(name)"];
-			fu.param = f["(params)"];
-			fu.line = f["(line)"];
-			fu.character = f["(character)"];
-			fu.last = f["(last)"];
-			fu.lastcharacter = f["(lastcharacter)"];
-			data.functions.push(fu);
-		}
-
-		if (unuseds.length > 0) {
-			data.unused = unuseds;
-		}
-
-		members = [];
-		for (n in member) {
-			if (typeof member[n] === "number") {
-				data.member = member;
-				break;
-			}
-		}
-
-		return data;
-	};
-
-	itself.jshint = itself;
-
-	return itself;
-}());
-if (typeof exports === "object" && exports) {
-	exports.JSHINT = JSHINT;
-}
-
-});
\ No newline at end of file
diff --git a/try/ace/worker-json.js b/try/ace/worker-json.js
deleted file mode 100644
index 1dedf4c..0000000
--- a/try/ace/worker-json.js
+++ /dev/null
@@ -1,2256 +0,0 @@
-"no use strict";
-;(function(window) {
-if (typeof window.window != "undefined" && window.document) {
-    return;
-}
-
-window.console = {
-    log: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    },
-    error: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    }
-};
-window.window = window;
-window.ace = window;
-
-window.normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-        
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-    
-    return moduleName;
-};
-
-window.require = function(parentId, id) {
-    if (!id) {
-        id = parentId
-        parentId = null;
-    }
-    if (!id.charAt)
-        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
-
-    id = normalizeModule(parentId, id);
-
-    var module = require.modules[id];
-    if (module) {
-        if (!module.initialized) {
-            module.initialized = true;
-            module.exports = module.factory().exports;
-        }
-        return module.exports;
-    }
-    
-    var chunks = id.split("/");
-    chunks[0] = require.tlns[chunks[0]] || chunks[0];
-    var path = chunks.join("/") + ".js";
-    
-    require.id = id;
-    importScripts(path);
-    return require(parentId, id);
-};
-
-require.modules = {};
-require.tlns = {};
-
-window.define = function(id, deps, factory) {
-    if (arguments.length == 2) {
-        factory = deps;
-        if (typeof id != "string") {
-            deps = id;
-            id = require.id;
-        }
-    } else if (arguments.length == 1) {
-        factory = id;
-        id = require.id;
-    }
-
-    if (id.indexOf("text!") === 0) 
-        return;
-    
-    var req = function(deps, factory) {
-        return require(id, deps, factory);
-    };
-
-    require.modules[id] = {
-        factory: function() {
-            var module = {
-                exports: {}
-            };
-            var returnExports = factory(req, module.exports, module);
-            if (returnExports)
-                module.exports = returnExports;
-            return module;
-        }
-    };
-};
-
-window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
-    require.tlns = topLevelNamespaces;
-}
-
-window.initSender = function initSender() {
-
-    var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
-    var oop = require("ace/lib/oop");
-    
-    var Sender = function() {};
-    
-    (function() {
-        
-        oop.implement(this, EventEmitter);
-                
-        this.callback = function(data, callbackId) {
-            postMessage({
-                type: "call",
-                id: callbackId,
-                data: data
-            });
-        };
-    
-        this.emit = function(name, data) {
-            postMessage({
-                type: "event",
-                name: name,
-                data: data
-            });
-        };
-        
-    }).call(Sender.prototype);
-    
-    return new Sender();
-}
-
-window.main = null;
-window.sender = null;
-
-window.onmessage = function(e) {
-    var msg = e.data;
-    if (msg.command) {
-        if (main[msg.command])
-            main[msg.command].apply(main, msg.args);
-        else
-            throw new Error("Unknown command:" + msg.command);
-    }
-    else if (msg.init) {        
-        initBaseUrls(msg.tlns);
-        require("ace/lib/es5-shim");
-        sender = initSender();
-        var clazz = require(msg.module)[msg.classname];
-        main = new clazz(sender);
-    } 
-    else if (msg.event && sender) {
-        sender._emit(msg.event, msg.data);
-    }
-};
-})(this);
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
-
-define('ace/mode/json_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/json/json_parse'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var Mirror = require("../worker/mirror").Mirror;
-var parse = require("./json/json_parse");
-
-var JsonWorker = exports.JsonWorker = function(sender) {
-    Mirror.call(this, sender);
-    this.setTimeout(200);
-};
-
-oop.inherits(JsonWorker, Mirror);
-
-(function() {
-
-    this.onUpdate = function() {
-        var value = this.doc.getValue();
-
-        try {
-            var result = parse(value);
-        } catch (e) {
-            var pos = this.doc.indexToPosition(e.at-1);
-            this.sender.emit("error", {
-                row: pos.row,
-                column: pos.column,
-                text: e.message,
-                type: "error"
-            });
-            return;
-        }
-        this.sender.emit("ok");
-    };
-
-}).call(JsonWorker.prototype);
-
-});
-define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var Document = require("../document").Document;
-var lang = require("../lib/lang");
-    
-var Mirror = exports.Mirror = function(sender) {
-    this.sender = sender;
-    var doc = this.doc = new Document("");
-    
-    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
-    
-    var _self = this;
-    sender.on("change", function(e) {
-        doc.applyDeltas(e.data);
-        deferredUpdate.schedule(_self.$timeout);
-    });
-};
-
-(function() {
-    
-    this.$timeout = 500;
-    
-    this.setTimeout = function(timeout) {
-        this.$timeout = timeout;
-    };
-    
-    this.setValue = function(value) {
-        this.doc.setValue(value);
-        this.deferredUpdate.schedule(this.$timeout);
-    };
-    
-    this.getValue = function(callbackId) {
-        this.sender.callback(this.doc.getValue(), callbackId);
-    };
-    
-    this.onUpdate = function() {
-    };
-    
-}).call(Mirror.prototype);
-
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
-
-define('ace/mode/json/json_parse', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-    var at,     // The index of the current character
-        ch,     // The current character
-        escapee = {
-            '"':  '"',
-            '\\': '\\',
-            '/':  '/',
-            b:    '\b',
-            f:    '\f',
-            n:    '\n',
-            r:    '\r',
-            t:    '\t'
-        },
-        text,
-
-        error = function (m) {
-
-            throw {
-                name:    'SyntaxError',
-                message: m,
-                at:      at,
-                text:    text
-            };
-        },
-
-        next = function (c) {
-
-            if (c && c !== ch) {
-                error("Expected '" + c + "' instead of '" + ch + "'");
-            }
-
-            ch = text.charAt(at);
-            at += 1;
-            return ch;
-        },
-
-        number = function () {
-
-            var number,
-                string = '';
-
-            if (ch === '-') {
-                string = '-';
-                next('-');
-            }
-            while (ch >= '0' && ch <= '9') {
-                string += ch;
-                next();
-            }
-            if (ch === '.') {
-                string += '.';
-                while (next() && ch >= '0' && ch <= '9') {
-                    string += ch;
-                }
-            }
-            if (ch === 'e' || ch === 'E') {
-                string += ch;
-                next();
-                if (ch === '-' || ch === '+') {
-                    string += ch;
-                    next();
-                }
-                while (ch >= '0' && ch <= '9') {
-                    string += ch;
-                    next();
-                }
-            }
-            number = +string;
-            if (isNaN(number)) {
-                error("Bad number");
-            } else {
-                return number;
-            }
-        },
-
-        string = function () {
-
-            var hex,
-                i,
-                string = '',
-                uffff;
-
-            if (ch === '"') {
-                while (next()) {
-                    if (ch === '"') {
-                        next();
-                        return string;
-                    } else if (ch === '\\') {
-                        next();
-                        if (ch === 'u') {
-                            uffff = 0;
-                            for (i = 0; i < 4; i += 1) {
-                                hex = parseInt(next(), 16);
-                                if (!isFinite(hex)) {
-                                    break;
-                                }
-                                uffff = uffff * 16 + hex;
-                            }
-                            string += String.fromCharCode(uffff);
-                        } else if (typeof escapee[ch] === 'string') {
-                            string += escapee[ch];
-                        } else {
-                            break;
-                        }
-                    } else {
-                        string += ch;
-                    }
-                }
-            }
-            error("Bad string");
-        },
-
-        white = function () {
-
-            while (ch && ch <= ' ') {
-                next();
-            }
-        },
-
-        word = function () {
-
-            switch (ch) {
-            case 't':
-                next('t');
-                next('r');
-                next('u');
-                next('e');
-                return true;
-            case 'f':
-                next('f');
-                next('a');
-                next('l');
-                next('s');
-                next('e');
-                return false;
-            case 'n':
-                next('n');
-                next('u');
-                next('l');
-                next('l');
-                return null;
-            }
-            error("Unexpected '" + ch + "'");
-        },
-
-        value,  // Place holder for the value function.
-
-        array = function () {
-
-            var array = [];
-
-            if (ch === '[') {
-                next('[');
-                white();
-                if (ch === ']') {
-                    next(']');
-                    return array;   // empty array
-                }
-                while (ch) {
-                    array.push(value());
-                    white();
-                    if (ch === ']') {
-                        next(']');
-                        return array;
-                    }
-                    next(',');
-                    white();
-                }
-            }
-            error("Bad array");
-        },
-
-        object = function () {
-
-            var key,
-                object = {};
-
-            if (ch === '{') {
-                next('{');
-                white();
-                if (ch === '}') {
-                    next('}');
-                    return object;   // empty object
-                }
-                while (ch) {
-                    key = string();
-                    white();
-                    next(':');
-                    if (Object.hasOwnProperty.call(object, key)) {
-                        error('Duplicate key "' + key + '"');
-                    }
-                    object[key] = value();
-                    white();
-                    if (ch === '}') {
-                        next('}');
-                        return object;
-                    }
-                    next(',');
-                    white();
-                }
-            }
-            error("Bad object");
-        };
-
-    value = function () {
-
-        white();
-        switch (ch) {
-        case '{':
-            return object();
-        case '[':
-            return array();
-        case '"':
-            return string();
-        case '-':
-            return number();
-        default:
-            return ch >= '0' && ch <= '9' ? number() : word();
-        }
-    };
-
-    return function (source, reviver) {
-        var result;
-
-        text = source;
-        at = 0;
-        ch = ' ';
-        result = value();
-        white();
-        if (ch) {
-            error("Syntax error");
-        }
-
-        return typeof reviver === 'function' ? function walk(holder, key) {
-            var k, v, value = holder[key];
-            if (value && typeof value === 'object') {
-                for (k in value) {
-                    if (Object.hasOwnProperty.call(value, k)) {
-                        v = walk(value, k);
-                        if (v !== undefined) {
-                            value[k] = v;
-                        } else {
-                            delete value[k];
-                        }
-                    }
-                }
-            }
-            return reviver.call(holder, key, value);
-        }({'': result}, '') : result;
-    };
-});
diff --git a/try/ace/worker-lua.js b/try/ace/worker-lua.js
deleted file mode 100644
index d670f83..0000000
--- a/try/ace/worker-lua.js
+++ /dev/null
@@ -1,3364 +0,0 @@
-"no use strict";
-;(function(window) {
-if (typeof window.window != "undefined" && window.document) {
-    return;
-}
-
-window.console = {
-    log: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    },
-    error: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    }
-};
-window.window = window;
-window.ace = window;
-
-window.normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-        
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-    
-    return moduleName;
-};
-
-window.require = function(parentId, id) {
-    if (!id) {
-        id = parentId
-        parentId = null;
-    }
-    if (!id.charAt)
-        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
-
-    id = normalizeModule(parentId, id);
-
-    var module = require.modules[id];
-    if (module) {
-        if (!module.initialized) {
-            module.initialized = true;
-            module.exports = module.factory().exports;
-        }
-        return module.exports;
-    }
-    
-    var chunks = id.split("/");
-    chunks[0] = require.tlns[chunks[0]] || chunks[0];
-    var path = chunks.join("/") + ".js";
-    
-    require.id = id;
-    importScripts(path);
-    return require(parentId, id);
-};
-
-require.modules = {};
-require.tlns = {};
-
-window.define = function(id, deps, factory) {
-    if (arguments.length == 2) {
-        factory = deps;
-        if (typeof id != "string") {
-            deps = id;
-            id = require.id;
-        }
-    } else if (arguments.length == 1) {
-        factory = id;
-        id = require.id;
-    }
-
-    if (id.indexOf("text!") === 0) 
-        return;
-    
-    var req = function(deps, factory) {
-        return require(id, deps, factory);
-    };
-
-    require.modules[id] = {
-        factory: function() {
-            var module = {
-                exports: {}
-            };
-            var returnExports = factory(req, module.exports, module);
-            if (returnExports)
-                module.exports = returnExports;
-            return module;
-        }
-    };
-};
-
-window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
-    require.tlns = topLevelNamespaces;
-}
-
-window.initSender = function initSender() {
-
-    var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
-    var oop = require("ace/lib/oop");
-    
-    var Sender = function() {};
-    
-    (function() {
-        
-        oop.implement(this, EventEmitter);
-                
-        this.callback = function(data, callbackId) {
-            postMessage({
-                type: "call",
-                id: callbackId,
-                data: data
-            });
-        };
-    
-        this.emit = function(name, data) {
-            postMessage({
-                type: "event",
-                name: name,
-                data: data
-            });
-        };
-        
-    }).call(Sender.prototype);
-    
-    return new Sender();
-}
-
-window.main = null;
-window.sender = null;
-
-window.onmessage = function(e) {
-    var msg = e.data;
-    if (msg.command) {
-        if (main[msg.command])
-            main[msg.command].apply(main, msg.args);
-        else
-            throw new Error("Unknown command:" + msg.command);
-    }
-    else if (msg.init) {        
-        initBaseUrls(msg.tlns);
-        require("ace/lib/es5-shim");
-        sender = initSender();
-        var clazz = require(msg.module)[msg.classname];
-        main = new clazz(sender);
-    } 
-    else if (msg.event && sender) {
-        sender._emit(msg.event, msg.data);
-    }
-};
-})(this);
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
-
-define('ace/mode/lua_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/lua/luaparse'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var Mirror = require("../worker/mirror").Mirror;
-var luaparse = require("../mode/lua/luaparse");
-
-var Worker = exports.Worker = function(sender) {
-    Mirror.call(this, sender);
-    this.setTimeout(500);
-};
-
-oop.inherits(Worker, Mirror);
-
-(function() {
-
-    this.onUpdate = function() {
-        var value = this.doc.getValue();
-        try {
-            luaparse.parse(value);
-        } catch(e) {
-            if (e instanceof SyntaxError) {
-                this.sender.emit("error", {
-					row: e.line - 1,
-					column: e.column,
-					text: e.message,
-					type: "error"
-				});
-            }
-            return;
-        }
-        this.sender.emit("ok");
-    };
-
-}).call(Worker.prototype);
-
-});
-define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var Document = require("../document").Document;
-var lang = require("../lib/lang");
-    
-var Mirror = exports.Mirror = function(sender) {
-    this.sender = sender;
-    var doc = this.doc = new Document("");
-    
-    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
-    
-    var _self = this;
-    sender.on("change", function(e) {
-        doc.applyDeltas(e.data);
-        deferredUpdate.schedule(_self.$timeout);
-    });
-};
-
-(function() {
-    
-    this.$timeout = 500;
-    
-    this.setTimeout = function(timeout) {
-        this.$timeout = timeout;
-    };
-    
-    this.setValue = function(value) {
-        this.doc.setValue(value);
-        this.deferredUpdate.schedule(this.$timeout);
-    };
-    
-    this.getValue = function(callbackId) {
-        this.sender.callback(this.doc.getValue(), callbackId);
-    };
-    
-    this.onUpdate = function() {
-    };
-    
-}).call(Mirror.prototype);
-
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
-define('ace/mode/lua/luaparse', ['require', 'exports', 'module' , 'exports'], function(require, exports, module) {
-
-(function (root, name, factory) {
-  
-
-  if (typeof exports !== 'undefined') {
-    factory(exports);
-  } else if (typeof define === 'function' && define.amd) {
-    define(['exports'], factory);
-  } else {
-    factory((root[name] = {}));
-  }
-}(this, 'luaparse', function (exports) {
-  
-
-  exports.version = '0.0.11';
-
-  var input, options, length;
-  var defaultOptions = exports.defaultOptions = {
-      wait: false
-    , comments: true
-    , scope: false
-  };
-
-  var EOF = 1, StringLiteral = 2, Keyword = 4, Identifier = 8
-    , NumericLiteral = 16, Punctuator = 32, BooleanLiteral = 64
-    , NilLiteral = 128, VarargLiteral = 256;
-
-  var errors = exports.errors = {
-      unexpected: 'Unexpected %1 \'%2\' near \'%3\''
-    , expected: '\'%1\' expected near \'%2\''
-    , expectedToken: '%1 expected near \'%2\''
-    , unfinishedString: 'unfinished string near \'%1\''
-    , malformedNumber: 'malformed number near \'%1\''
-  };
-
-  var ast = exports.ast = {
-      labelStatement: function(label) {
-      return {
-          type: 'LabelStatement'
-        , label: label
-      };
-    }
-
-    , breakStatement: function() {
-      return {
-          type: 'BreakStatement'
-      };
-    }
-
-    , gotoStatement: function(label) {
-      return {
-          type: 'GotoStatement'
-        , label: label
-      };
-    }
-
-    , returnStatement: function(args) {
-      return {
-          type: 'ReturnStatement'
-        , 'arguments': args
-      };
-    }
-
-    , ifStatement: function(clauses) {
-      return {
-          type: 'IfStatement'
-        , clauses: clauses
-      };
-    }
-    , ifClause: function(condition, body) {
-      return {
-          type: 'IfClause'
-        , condition: condition
-        , body: body
-      };
-    }
-    , elseifClause: function(condition, body) {
-      return {
-          type: 'ElseifClause'
-        , condition: condition
-        , body: body
-      };
-    }
-    , elseClause: function(body) {
-      return {
-          type: 'ElseClause'
-        , body: body
-      };
-    }
-
-    , whileStatement: function(condition, body) {
-      return {
-          type: 'WhileStatement'
-        , condition: condition
-        , body: body
-      };
-    }
-
-    , doStatement: function(body) {
-      return {
-          type: 'DoStatement'
-        , body: body
-      };
-    }
-
-    , repeatStatement: function(condition, body) {
-      return {
-          type: 'RepeatStatement'
-        , condition: condition
-        , body: body
-      };
-    }
-
-    , localStatement: function(variables, init) {
-      return {
-          type: 'LocalStatement'
-        , variables: variables
-        , init: init
-      };
-    }
-
-    , assignmentStatement: function(variables, init) {
-      return {
-          type: 'AssignmentStatement'
-        , variables: variables
-        , init: init
-      };
-    }
-
-    , callStatement: function(expression) {
-      return {
-          type: 'CallStatement'
-        , expression: expression
-      };
-    }
-
-    , functionStatement: function(identifier, parameters, isLocal, body) {
-      return {
-          type: 'FunctionDeclaration'
-        , identifier: identifier
-        , isLocal: isLocal
-        , parameters: parameters
-        , body: body
-      };
-    }
-
-    , forNumericStatement: function(variable, start, end, step, body) {
-      return {
-          type: 'ForNumericStatement'
-        , variable: variable
-        , start: start
-        , end: end
-        , step: step
-        , body: body
-      };
-    }
-
-    , forGenericStatement: function(variables, iterators, body) {
-      return {
-          type: 'ForGenericStatement'
-        , variables: variables
-        , iterators: iterators
-        , body: body
-      };
-    }
-
-    , chunk: function(body) {
-      return {
-          type: 'Chunk'
-        , body: body
-      };
-    }
-
-    , identifier: function(name) {
-      return {
-          type: 'Identifier'
-        , name: name
-      };
-    }
-
-    , literal: function(type, value, raw) {
-      type = (type === StringLiteral) ? 'StringLiteral'
-        : (type === NumericLiteral) ? 'NumericLiteral'
-        : (type === BooleanLiteral) ? 'BooleanLiteral'
-        : (type === NilLiteral) ? 'NilLiteral'
-        : 'VarargLiteral';
-
-      return {
-          type: type
-        , value: value
-        , raw: raw
-      };
-    }
-
-    , tableKey: function(key, value) {
-      return {
-          type: 'TableKey'
-        , key: key
-        , value: value
-      };
-    }
-    , tableKeyString: function(key, value) {
-      return {
-          type: 'TableKeyString'
-        , key: key
-        , value: value
-      };
-    }
-    , tableValue: function(value) {
-      return {
-          type: 'TableValue'
-        , value: value
-      };
-    }
-
-
-    , tableConstructorExpression: function(fields) {
-      return {
-          type: 'TableConstructorExpression'
-        , fields: fields
-      };
-    }
-    , binaryExpression: function(operator, left, right) {
-      var type = ('and' === operator || 'or' === operator) ?
-        'LogicalExpression' :
-        'BinaryExpression';
-
-      return {
-          type: type
-        , operator: operator
-        , left: left
-        , right: right
-      };
-    }
-    , unaryExpression: function(operator, argument) {
-      return {
-          type: 'UnaryExpression'
-        , operator: operator
-        , argument: argument
-      };
-    }
-    , memberExpression: function(base, indexer, identifier) {
-      return {
-          type: 'MemberExpression'
-        , indexer: indexer
-        , identifier: identifier
-        , base: base
-      };
-    }
-
-    , indexExpression: function(base, index) {
-      return {
-          type: 'IndexExpression'
-        , base: base
-        , index: index
-      };
-    }
-
-    , callExpression: function(base, args) {
-      return {
-          type: 'CallExpression'
-        , base: base
-        , 'arguments': args
-      };
-    }
-
-    , tableCallExpression: function(base, args) {
-      return {
-          type: 'TableCallExpression'
-        , base: base
-        , 'arguments': args
-      };
-    }
-
-    , stringCallExpression: function(base, argument) {
-      return {
-          type: 'StringCallExpression'
-        , base: base
-        , argument: argument
-      };
-    }
-  };
-
-  var slice = Array.prototype.slice
-    , toString = Object.prototype.toString
-    , indexOf = Array.prototype.indexOf || function indexOf(element) {
-      for (var i = 0, length = this.length; i < length; i++) {
-        if (this[i] === element) return i;
-      }
-      return -1;
-    };
-
-  function sprintf(format) {
-    var args = slice.call(arguments, 1);
-    format = format.replace(/%(\d)/g, function (match, index) {
-      return '' + args[index - 1] || '';
-    });
-    return format;
-  }
-
-  function extend() {
-    var args = slice.call(arguments)
-      , dest = {}
-      , src, prop;
-
-    for (var i = 0, l = args.length; i < l; i++) {
-      src = args[i];
-      for (prop in src) if (src.hasOwnProperty(prop)) {
-        dest[prop] = src[prop];
-      }
-    }
-    return dest;
-  }
-
-  function raise(token) {
-    var message = sprintf.apply(null, slice.call(arguments, 1))
-      , error, col;
-
-    if ('undefined' !== typeof token.line) {
-      col = token.range[0] - token.lineStart;
-      error = new SyntaxError(sprintf('[%1:%2] %3', token.line, col, message));
-      error.line = token.line;
-      error.index = token.range[0];
-      error.column = col;
-    } else {
-      col = index - lineStart + 1;
-      error = new SyntaxError(sprintf('[%1:%2] %3', line, col, message));
-      error.index = index;
-      error.line = line;
-      error.column = col;
-    }
-    throw error;
-  }
-
-  function raiseUnexpectedToken(type, token) {
-    raise(token, errors.expectedToken, type, token.value);
-  }
-
-  function unexpected(found, near) {
-    if ('undefined' === typeof near) near = lookahead.value;
-    if ('undefined' !== typeof found.type) {
-      var type;
-      switch (found.type) {
-        case StringLiteral:   type = 'string';      break;
-        case Keyword:         type = 'keyword';     break;
-        case Identifier:      type = 'identifier';  break;
-        case NumericLiteral:  type = 'number';      break;
-        case Punctuator:      type = 'symbol';      break;
-        case BooleanLiteral:  type = 'boolean';     break;
-        case NilLiteral:
-          return raise(found, errors.unexpected, 'symbol', 'nil', near);
-      }
-      return raise(found, errors.unexpected, type, found.value, near);
-    }
-    return raise(found, errors.unexpected, 'symbol', found, near);
-  }
-
-  var index
-    , token
-    , lookahead
-    , comments
-    , tokenStart
-    , line
-    , lineStart;
-
-  function readToken() {
-    skipWhiteSpace();
-    while (45 === input.charCodeAt(index) &&
-           45 === input.charCodeAt(index + 1)) {
-      scanComment();
-      skipWhiteSpace();
-    }
-    if (index >= length) return {
-        type : EOF
-      , value: '<eof>'
-      , line: line
-      , lineStart: lineStart
-      , range: [index, index]
-    };
-
-    var character = input.charCodeAt(index)
-      , next = input.charCodeAt(index + 1);
-    tokenStart = index;
-    if (isIdentifierStart(character)) return scanIdentifierOrKeyword();
-
-    switch (character) {
-      case 39: case 34: // '"
-        return scanStringLiteral();
-      case 48: case 49: case 50: case 51: case 52: case 53:
-      case 54: case 55: case 56: case 57:
-        return scanNumericLiteral();
-
-      case 46: // .
-        if (isDecDigit(next)) return scanNumericLiteral();
-        if (46 === next) {
-          if (46 === input.charCodeAt(index + 2)) return scanVarargLiteral();
-          return scanPunctuator('..');
-        }
-        return scanPunctuator('.');
-
-      case 61: // =
-        if (61 === next) return scanPunctuator('==');
-        return scanPunctuator('=');
-
-      case 62: // >
-        if (61 === next) return scanPunctuator('>=');
-        return scanPunctuator('>');
-
-      case 60: // <
-        if (61 === next) return scanPunctuator('<=');
-        return scanPunctuator('<');
-
-      case 126: // ~
-        if (61 === next) return scanPunctuator('~=');
-        return raise({}, errors.expected, '=', '~');
-
-      case 58: // :
-        if (58 === next) return scanPunctuator('::');
-        return scanPunctuator(':');
-
-      case 91: // [
-        if (91 === next || 61 === next) return scanLongStringLiteral();
-        return scanPunctuator('[');
-      case 42: case 47: case 94: case 37: case 44: case 123: case 125:
-      case 93: case 40: case 41: case 59: case 35: case 45: case 43:
-        return scanPunctuator(input.charAt(index));
-    }
-
-    return unexpected(input.charAt(index));
-  }
-
-  function skipWhiteSpace() {
-    while (index < length) {
-      var character = input.charCodeAt(index);
-      if (isWhiteSpace(character)) {
-        index++;
-      } else if (isLineTerminator(character)) {
-        line++;
-        lineStart = ++index;
-      } else {
-        break;
-      }
-    }
-  }
-
-  function scanIdentifierOrKeyword() {
-    var value, type;
-    while (isIdentifierPart(input.charCodeAt(++index)));
-    value = input.slice(tokenStart, index);
-    if (isKeyword(value)) {
-      type = Keyword;
-    } else if ('true' === value || 'false' === value) {
-      type = BooleanLiteral;
-      value = ('true' === value);
-    } else if ('nil' === value) {
-      type = NilLiteral;
-      value = null;
-    } else {
-      type = Identifier;
-    }
-
-    return {
-        type: type
-      , value: value
-      , line: line
-      , lineStart: lineStart
-      , range: [tokenStart, index]
-    };
-  }
-
-  function scanPunctuator(value) {
-    index += value.length;
-    return {
-        type: Punctuator
-      , value: value
-      , line: line
-      , lineStart: lineStart
-      , range: [tokenStart, index]
-    };
-  }
-
-  function scanVarargLiteral() {
-    index += 3;
-    return {
-        type: VarargLiteral
-      , value: '...'
-      , line: line
-      , lineStart: lineStart
-      , range: [tokenStart, index]
-    };
-  }
-
-  function scanStringLiteral() {
-    var delimiter = input.charCodeAt(index++)
-      , stringStart = index
-      , string = ''
-      , character;
-
-    while (index < length) {
-      character = input.charCodeAt(index++);
-      if (delimiter === character) break;
-      if (92 === character) { // \
-        string += input.slice(stringStart, index - 1) + readEscapeSequence();
-        stringStart = index;
-      }
-      else if (index >= length || isLineTerminator(character)) {
-        string += input.slice(stringStart, index - 1);
-        raise({}, errors.unfinishedString, string + String.fromCharCode(character));
-      }
-    }
-    string += input.slice(stringStart, index - 1);
-
-    return {
-        type: StringLiteral
-      , value: string
-      , line: line
-      , lineStart: lineStart
-      , range: [tokenStart, index]
-    };
-  }
-
-  function scanLongStringLiteral() {
-    var string = readLongString();
-    if (false === string) raise(token, errors.expected, '[', token.value);
-
-    return {
-        type: StringLiteral
-      , value: string
-      , line: line
-      , lineStart: lineStart
-      , range: [tokenStart, index]
-    };
-  }
-
-  function scanNumericLiteral() {
-    var character = input.charAt(index)
-      , next = input.charAt(index + 1);
-
-    var value = ('0' === character && 'xX'.indexOf(next || null) >= 0) ?
-      readHexLiteral() : readDecLiteral();
-
-    return {
-        type: NumericLiteral
-      , value: value
-      , line: line
-      , lineStart: lineStart
-      , range: [tokenStart, index]
-    };
-  }
-
-  function readHexLiteral() {
-    var fraction = 0 // defaults to 0 as it gets summed
-      , binaryExponent = 1 // defaults to 1 as it gets multiplied
-      , binarySign = 1 // positive
-      , digit, fractionStart, exponentStart, digitStart;
-
-    digitStart = index += 2; // Skip 0x part
-    if (!isHexDigit(input.charCodeAt(index)))
-      raise({}, errors.malformedNumber, input.slice(tokenStart, index));
-
-    while (isHexDigit(input.charCodeAt(index))) index++;
-    digit = parseInt(input.slice(digitStart, index), 16);
-    if ('.' === input.charAt(index)) {
-      fractionStart = ++index;
-
-      while (isHexDigit(input.charCodeAt(index))) index++;
-      fraction = input.slice(fractionStart, index);
-      fraction = (fractionStart === index) ? 0
-        : parseInt(fraction, 16) / Math.pow(16, index - fractionStart);
-    }
-    if ('pP'.indexOf(input.charAt(index) || null) >= 0) {
-      index++;
-      if ('+-'.indexOf(input.charAt(index) || null) >= 0)
-        binarySign = ('+' === input.charAt(index++)) ? 1 : -1;
-
-      exponentStart = index;
-      if (!isDecDigit(input.charCodeAt(index)))
-        raise({}, errors.malformedNumber, input.slice(tokenStart, index));
-
-      while (isDecDigit(input.charCodeAt(index))) index++;
-      binaryExponent = input.slice(exponentStart, index);
-      binaryExponent = Math.pow(2, binaryExponent * binarySign);
-    }
-
-    return (digit + fraction) * binaryExponent;
-  }
-
-  function readDecLiteral() {
-    while (isDecDigit(input.charCodeAt(index))) index++;
-    if ('.' === input.charAt(index)) {
-      index++;
-      while (isDecDigit(input.charCodeAt(index))) index++;
-    }
-    if ('eE'.indexOf(input.charAt(index) || null) >= 0) {
-      index++;
-      if ('+-'.indexOf(input.charAt(index) || null) >= 0) index++;
-      if (!isDecDigit(input.charCodeAt(index)))
-        raise({}, errors.malformedNumber, input.slice(tokenStart, index));
-
-      while (isDecDigit(input.charCodeAt(index))) index++;
-    }
-
-    return parseFloat(input.slice(tokenStart, index));
-  }
-
-  function readEscapeSequence() {
-    var sequenceStart = index;
-    switch (input.charAt(index)) {
-      case 'n': index++; return '\n';
-      case 'r': index++; return '\r';
-      case 't': index++; return '\t';
-      case 'v': index++; return '\x0B';
-      case 'b': index++; return '\b';
-      case 'f': index++; return '\f';
-      case 'z': index++; skipWhiteSpace(); return '';
-      case 'x':
-        if (isHexDigit(input.charCodeAt(index + 1)) &&
-            isHexDigit(input.charCodeAt(index + 2))) {
-          index += 3;
-          return '\\' + input.slice(sequenceStart, index);
-        }
-        return '\\' + input.charAt(index++);
-      default:
-        if (isDecDigit(input.charCodeAt(index))) {
-          while (isDecDigit(input.charCodeAt(++index)));
-          return '\\' + input.slice(sequenceStart, index);
-        }
-        return input.charAt(index++);
-    }
-  }
-
-  function scanComment() {
-    tokenStart = index;
-    index += 2; // --
-
-    var character = input.charAt(index)
-      , content = ''
-      , isLong = false
-      , commentStart = index;
-
-    if ('[' === character) {
-      content = readLongString();
-      if (false === content) content = character;
-      else isLong = true;
-    }
-    if (!isLong) {
-      while (index < length) {
-        if (isLineTerminator(input.charCodeAt(index))) break;
-        index++;
-      }
-      content = input.slice(commentStart, index);
-    }
-
-    if (options.comments) {
-      comments.push({
-          type: 'Comment'
-        , value: content
-        , raw: input.slice(tokenStart, index)
-      });
-    }
-  }
-
-  function readLongString() {
-    var level = 0
-      , content = ''
-      , terminator = false
-      , character, stringStart;
-
-    index++; // [
-    while ('=' === input.charAt(index + level)) level++;
-    if ('[' !== input.charAt(index + level)) return false;
-
-    index += level + 1;
-    if (isLineTerminator(input.charCodeAt(index))) {
-      line++;
-      lineStart = index++;
-    }
-
-    stringStart = index;
-    while (index < length) {
-      character = input.charAt(index++);
-      if (isLineTerminator(character.charCodeAt(0))) {
-        line++;
-        lineStart = index;
-      }
-
-      if (']' === character) {
-        terminator = true;
-        for (var i = 0; i < level; i++) {
-          if ('=' !== input.charAt(index + i)) terminator = false;
-        }
-        if (']' !== input.charAt(index + level)) terminator = false;
-      }
-      if (terminator) break;
-    }
-    content += input.slice(stringStart, index - 1);
-    index += level + 1;
-
-    return content;
-  }
-
-  function next() {
-    token = lookahead;
-    lookahead = readToken();
-  }
-
-  function consume(value) {
-    if (value === token.value) {
-      next();
-      return true;
-    }
-    return false;
-  }
-
-  function expect(value) {
-    if (value === token.value) next();
-    else raise(token, errors.expected, value, token.value);
-  }
-
-  function isWhiteSpace(character) {
-    return 9 === character || 32 === character || 0xB === character || 0xC === character;
-  }
-
-  function isLineTerminator(character) {
-    return 10 === character || 13 === character;
-  }
-
-  function isDecDigit(character) {
-    return character >= 48 && character <= 57;
-  }
-
-  function isHexDigit(character) {
-    return (character >= 48 && character <= 57) || (character >= 97 && character <= 102) || (character >= 65 && character <= 70);
-  }
-
-  function isIdentifierStart(character) {
-    return (character >= 65 && character <= 90) || (character >= 97 && character <= 122) || 95 === character;
-  }
-
-  function isIdentifierPart(character) {
-    return (character >= 65 && character <= 90) || (character >= 97 && character <= 122) || 95 === character || (character >= 48 && character <= 57);
-  }
-
-  function isKeyword(id) {
-    switch (id.length) {
-      case 2:
-        return 'do' === id || 'if' === id || 'in' === id || 'or' === id;
-      case 3:
-        return 'and' === id || 'end' === id || 'for' === id || 'not' === id;
-      case 4:
-        return 'else' === id || 'goto' === id || 'then' === id;
-      case 5:
-        return 'break' === id || 'local' === id || 'until' === id || 'while' === id;
-      case 6:
-        return 'elseif' === id || 'repeat' === id || 'return' === id;
-      case 8:
-        return 'function' === id;
-    }
-    return false;
-  }
-
-  function isUnary(token) {
-    if (Punctuator === token.type) return '#-'.indexOf(token.value) >= 0;
-    if (Keyword === token.type) return 'not' === token.value;
-    return false;
-  }
-  function isCallExpression(expression) {
-    switch (expression.type) {
-      case 'CallExpression':
-      case 'TableCallExpression':
-      case 'StringCallExpression':
-        return true;
-    }
-    return false;
-  }
-
-  function isBlockFollow(token) {
-    if (EOF === token.type) return true;
-    if (Keyword !== token.type) return false;
-    switch (token.value) {
-      case 'else': case 'elseif':
-      case 'end': case 'until':
-        return true;
-      default:
-        return false;
-    }
-  }
-  var scopes
-    , scopeDepth
-    , globals
-    , globalNames;
-  function createScope() {
-    scopes.push(Array.apply(null, scopes[scopeDepth++]));
-  }
-  function exitScope() {
-    scopes.pop();
-    scopeDepth--;
-  }
-  function scopeIdentifierName(name) {
-    if (-1 !== indexOf.call(scopes[scopeDepth], name)) return;
-    scopes[scopeDepth].push(name);
-  }
-  function scopeIdentifier(node) {
-    scopeIdentifierName(node.name);
-    attachScope(node, true);
-  }
-  function attachScope(node, isLocal) {
-    if (!isLocal && -1 === indexOf.call(globalNames, node.name)) {
-      globalNames.push(node.name);
-      globals.push(node);
-    }
-
-    node.isLocal = isLocal;
-  }
-  function scopeHasName(name) {
-    return (-1 !== indexOf.call(scopes[scopeDepth], name));
-  }
-
-  function parseChunk() {
-    next();
-    var body = parseBlock();
-    if (EOF !== token.type) unexpected(token);
-    return ast.chunk(body);
-  }
-
-  function parseBlock(terminator) {
-    var block = []
-      , statement;
-    if (options.scope) createScope();
-
-    while (!isBlockFollow(token)) {
-      if ('return' === token.value) {
-        block.push(parseStatement());
-        break;
-      }
-      statement = parseStatement();
-      if (statement) block.push(statement);
-    }
-
-    if (options.scope) exitScope();
-    return block;
-  }
-
-  function parseStatement() {
-    if (Keyword === token.type) {
-      switch (token.value) {
-        case 'local':    next(); return parseLocalStatement();
-        case 'if':       next(); return parseIfStatement();
-        case 'return':   next(); return parseReturnStatement();
-        case 'function': next();
-          var name = parseFunctionName();
-          return parseFunctionDeclaration(name);
-        case 'while':    next(); return parseWhileStatement();
-        case 'for':      next(); return parseForStatement();
-        case 'repeat':   next(); return parseRepeatStatement();
-        case 'break':    next(); return parseBreakStatement();
-        case 'do':       next(); return parseDoStatement();
-        case 'goto':     next(); return parseGotoStatement();
-      }
-    }
-
-    if (Punctuator === token.type) {
-      if (consume('::')) return parseLabelStatement();
-    }
-    if (consume(';')) return;
-
-    return parseAssignmentOrCallStatement();
-  }
-
-  function parseLabelStatement() {
-    var name = token.value
-      , label = parseIdentifier();
-
-    if (options.scope) {
-      scopeIdentifierName('::' + name + '::');
-      attachScope(label, true);
-    }
-
-    expect('::');
-    return ast.labelStatement(label);
-  }
-
-  function parseBreakStatement() {
-    return ast.breakStatement();
-  }
-
-  function parseGotoStatement() {
-    var name = token.value
-      , label = parseIdentifier();
-
-    if (options.scope) label.isLabel = scopeHasName('::' + name + '::');
-    return ast.gotoStatement(label);
-  }
-
-  function parseDoStatement() {
-    var body = parseBlock();
-    expect('end');
-    return ast.doStatement(body);
-  }
-
-  function parseWhileStatement() {
-    var condition = parseExpectedExpression();
-    expect('do');
-    var body = parseBlock();
-    expect('end');
-    return ast.whileStatement(condition, body);
-  }
-
-  function parseRepeatStatement() {
-    var body = parseBlock();
-    expect('until');
-    var condition = parseExpectedExpression();
-    return ast.repeatStatement(condition, body);
-  }
-
-  function parseReturnStatement() {
-    var expressions = [];
-
-    if ('end' !== token.value) {
-      var expression = parseExpression();
-      if (null != expression) expressions.push(expression);
-      while (consume(',')) {
-        expression = parseExpectedExpression();
-        expressions.push(expression);
-      }
-      consume(';'); // grammar tells us ; is optional here.
-    }
-    return ast.returnStatement(expressions);
-  }
-
-  function parseIfStatement() {
-    var clauses = []
-      , condition
-      , body;
-
-    condition = parseExpectedExpression();
-    expect('then');
-    body = parseBlock();
-    clauses.push(ast.ifClause(condition, body));
-
-    while (consume('elseif')) {
-      condition = parseExpectedExpression();
-      expect('then');
-      body = parseBlock();
-      clauses.push(ast.elseifClause(condition, body));
-    }
-
-    if (consume('else')) {
-      body = parseBlock();
-      clauses.push(ast.elseClause(body));
-    }
-
-    expect('end');
-    return ast.ifStatement(clauses);
-  }
-
-  function parseForStatement() {
-    var variable = parseIdentifier()
-      , body;
-    if (options.scope) scopeIdentifier(variable);
-    if (consume('=')) {
-      var start = parseExpectedExpression();
-      expect(',');
-      var end = parseExpectedExpression();
-      var step = consume(',') ? parseExpectedExpression() : null;
-
-      expect('do');
-      body = parseBlock();
-      expect('end');
-
-      return ast.forNumericStatement(variable, start, end, step, body);
-    } else {
-      var variables = [variable];
-      while (consume(',')) {
-        variable = parseIdentifier();
-        if (options.scope) scopeIdentifier(variable);
-        variables.push(variable);
-      }
-      expect('in');
-      var iterators = [];
-      do {
-        var expression = parseExpectedExpression();
-        iterators.push(expression);
-      } while (consume(','));
-
-      expect('do');
-      body = parseBlock();
-      expect('end');
-
-      return ast.forGenericStatement(variables, iterators, body);
-    }
-  }
-
-  function parseLocalStatement() {
-    var name;
-
-    if (Identifier === token.type) {
-      var variables = []
-        , init = [];
-
-      do {
-        name = parseIdentifier();
-
-        variables.push(name);
-      } while (consume(','));
-
-      if (consume('=')) {
-        do {
-          var expression = parseExpectedExpression();
-          init.push(expression);
-        } while (consume(','));
-      }
-      if (options.scope) {
-        for (var i = 0, l = variables.length; i < l; i++) {
-          scopeIdentifier(variables[i]);
-        }
-      }
-
-      return ast.localStatement(variables, init);
-    }
-    if (consume('function')) {
-      name = parseIdentifier();
-      if (options.scope) scopeIdentifier(name);
-      return parseFunctionDeclaration(name, true);
-    } else {
-      raiseUnexpectedToken('<name>', token);
-    }
-  }
-
-  function parseAssignmentOrCallStatement() {
-    var previous = token
-      , expression = parsePrefixExpression();
-
-    if (null == expression) return unexpected(token);
-    if (',='.indexOf(token.value) >= 0) {
-      var variables = [expression]
-        , init = []
-        , exp;
-
-      while (consume(',')) {
-        exp = parsePrefixExpression();
-        if (null == exp) raiseUnexpectedToken('<expression>', token);
-        variables.push(exp);
-      }
-      expect('=');
-      do {
-        exp = parseExpectedExpression();
-        init.push(exp);
-      } while (consume(','));
-      return ast.assignmentStatement(variables, init);
-    }
-    if (isCallExpression(expression)) {
-      return ast.callStatement(expression);
-    }
-    return unexpected(previous);
-  }
-
-  function parseIdentifier() {
-    var identifier = token.value;
-    if (Identifier !== token.type) raiseUnexpectedToken('<name>', token);
-    next();
-    return ast.identifier(identifier);
-  }
-
-  function parseFunctionDeclaration(name, isLocal) {
-    var parameters = [];
-    expect('(');
-    if (!consume(')')) {
-      while (true) {
-        if (Identifier === token.type) {
-          var parameter = parseIdentifier();
-          if (options.scope) scopeIdentifier(parameter);
-
-          parameters.push(parameter);
-
-          if (consume(',')) continue;
-          else if (consume(')')) break;
-        } else if (VarargLiteral === token.type) {
-          parameters.push(parsePrimaryExpression());
-          expect(')');
-          break;
-        } else {
-          raiseUnexpectedToken('<name> or \'...\'', token);
-        }
-      }
-    }
-
-    var body = parseBlock();
-    expect('end');
-
-    isLocal = isLocal || false;
-    return ast.functionStatement(name, parameters, isLocal, body);
-  }
-
-  function parseFunctionName() {
-    var base = parseIdentifier()
-      , name;
-    if (options.scope) attachScope(base, false);
-
-    while (consume('.')) {
-      name = parseIdentifier();
-      if (options.scope) attachScope(name, false);
-      base = ast.memberExpression(base, '.', name);
-    }
-
-    if (consume(':')) {
-      name = parseIdentifier();
-      if (options.scope) attachScope(name, false);
-      base = ast.memberExpression(base, ':', name);
-    }
-
-    return base;
-  }
-
-  function parseTableConstructor() {
-    var fields = []
-      , key, value;
-
-    while (true) {
-      if (Punctuator === token.type && consume('[')) {
-        key = parseExpectedExpression();
-        expect(']');
-        expect('=');
-        value = parseExpectedExpression();
-        fields.push(ast.tableKey(key, value));
-      } else if (Identifier === token.type) {
-        key = parseExpectedExpression();
-        if (consume('=')) {
-          value = parseExpectedExpression();
-          fields.push(ast.tableKeyString(key, value));
-        } else {
-          fields.push(ast.tableValue(key));
-        }
-      } else {
-        if (null == (value = parseExpression())) break;
-        fields.push(ast.tableValue(value));
-      }
-      if (',;'.indexOf(token.value) >= 0) {
-        next();
-        continue;
-      }
-      if ('}' === token.value) break;
-    }
-    expect('}');
-    return ast.tableConstructorExpression(fields);
-  }
-
-  function parseExpression() {
-    var expression = parseSubExpression(0);
-    return expression;
-  }
-
-  function parseExpectedExpression() {
-    var expression = parseExpression();
-    if (null == expression) raiseUnexpectedToken('<expression>', token);
-    else return expression;
-  }
-
-  function binaryPrecedence(operator) {
-    var character = operator.charCodeAt(0)
-      , length = operator.length;
-
-    if (1 === length) {
-      switch (character) {
-        case 94: return 10; // ^
-        case 42: case 47: case 37: return 7; // * / %
-        case 43: case 45: return 6; // + -
-        case 60: case 62: return 3; // < >
-      }
-    } else if (2 === length) {
-      switch (character) {
-        case 46: return 5; // ..
-        case 60: case 62: case 61: case 126: return 3; // <= >= == ~=
-        case 111: return 1; // or
-      }
-    } else if (97 === character && 'and' === operator) return 2;
-    return 0;
-  }
-
-  function parseSubExpression(minPrecedence) {
-    var operator = token.value;
-    var expression;
-    if (isUnary(token)) {
-      next();
-      var argument = parseSubExpression(8);
-      if (argument == null) raiseUnexpectedToken('<expression>', token);
-      expression = ast.unaryExpression(operator, argument);
-    }
-    if (null == expression) {
-      expression = parsePrimaryExpression();
-      if (null == expression) {
-        expression = parsePrefixExpression();
-      }
-    }
-    if (null == expression) return null;
-
-    var precedence;
-    while (true) {
-      operator = token.value;
-
-      precedence = (Punctuator === token.type || Keyword === token.type) ?
-        binaryPrecedence(operator) : 0;
-
-      if (precedence === 0 || precedence <= minPrecedence) break;
-      if ('^' === operator || '..' === operator) precedence--;
-      next();
-      var right = parseSubExpression(precedence);
-      if (null == right) raiseUnexpectedToken('<expression>', token);
-      expression = ast.binaryExpression(operator, expression, right);
-    }
-    return expression;
-  }
-
-  function parsePrefixExpression() {
-    var base, name
-      , isLocal;
-    if (Identifier === token.type) {
-      name = token.value;
-      base = parseIdentifier();
-      if (options.scope) attachScope(base, isLocal = scopeHasName(name));
-    } else if (consume('(')) {
-      base = parseExpectedExpression();
-      expect(')');
-      if (options.scope) isLocal = base.isLocal;
-    } else {
-      return null;
-    }
-    var expression, identifier;
-    while (true) {
-      if (Punctuator === token.type) {
-        switch (token.value) {
-          case '[':
-            next();
-            expression = parseExpectedExpression();
-            base = ast.indexExpression(base, expression);
-            expect(']');
-            break;
-          case '.':
-            next();
-            identifier = parseIdentifier();
-            if (options.scope) attachScope(identifier, isLocal);
-            base = ast.memberExpression(base, '.', identifier);
-            break;
-          case ':':
-            next();
-            identifier = parseIdentifier();
-            if (options.scope) attachScope(identifier, isLocal);
-            base = ast.memberExpression(base, ':', identifier);
-            base = parseCallExpression(base);
-            break;
-          case '(': case '{': // args
-            base = parseCallExpression(base);
-            break;
-          default:
-            return base;
-        }
-      } else if (StringLiteral === token.type) {
-        base = parseCallExpression(base);
-      } else {
-        break;
-      }
-    }
-
-    return base;
-  }
-
-  function parseCallExpression(base) {
-    if (Punctuator === token.type) {
-      switch (token.value) {
-        case '(':
-          next();
-          var expressions = [];
-          var expression = parseExpression();
-          if (null != expression) expressions.push(expression);
-          while (consume(',')) {
-            expression = parseExpectedExpression();
-            expressions.push(expression);
-          }
-
-          expect(')');
-          return ast.callExpression(base, expressions);
-
-        case '{':
-          next();
-          var table = parseTableConstructor();
-          return ast.tableCallExpression(base, table);
-      }
-
-    } else if (StringLiteral === token.type) {
-      return ast.stringCallExpression(base, parsePrimaryExpression());
-    }
-
-    raiseUnexpectedToken('function arguments', token);
-  }
-
-  function parsePrimaryExpression() {
-    var literals = StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral
-      , value = token.value
-      , type = token.type;
-
-    if (type & literals) {
-      var raw = input.slice(token.range[0], token.range[1]);
-      next();
-      return ast.literal(type, value, raw);
-    } else if (Keyword === type && 'function' === value) {
-      next();
-      return parseFunctionDeclaration(null);
-    } else if (consume('{'))
-      return parseTableConstructor();
-  }
-
-  exports.parse = parse;
-
-  function parse(_input, _options) {
-    if ('undefined' === typeof _options && 'object' === typeof _input) {
-      _options = _input;
-      _input = undefined;
-    }
-    if (!_options) _options = {};
-
-    input = _input || '';
-    options = extend(defaultOptions, _options);
-    index = 0;
-    line = 1;
-    lineStart = 0;
-    length = input.length;
-    scopes = [[]];
-    scopeDepth = 0;
-    globals = [];
-    globalNames = [];
-
-    if (options.comments) comments = [];
-    if (!options.wait) return end();
-    return exports;
-  }
-  exports.write = write;
-
-  function write(_input) {
-    input += String(_input);
-    length = input.length;
-    return exports;
-  }
-  exports.end = end;
-
-  function end(_input) {
-    if ('undefined' !== typeof _input) write(_input);
-
-    length = input.length;
-    lookahead = readToken();
-
-    var chunk = parseChunk();
-    if (options.comments) chunk.comments = comments;
-    if (options.scope) chunk.globals = globals;
-    return chunk;
-  }
-  exports.lex = readToken;
-
-}));
-
-});
\ No newline at end of file
diff --git a/try/ace/worker-php.js b/try/ace/worker-php.js
deleted file mode 100644
index 9acd33e..0000000
--- a/try/ace/worker-php.js
+++ /dev/null
@@ -1,6694 +0,0 @@
-"no use strict";
-;(function(window) {
-if (typeof window.window != "undefined" && window.document) {
-    return;
-}
-
-window.console = {
-    log: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    },
-    error: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    }
-};
-window.window = window;
-window.ace = window;
-
-window.normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-        
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-    
-    return moduleName;
-};
-
-window.require = function(parentId, id) {
-    if (!id) {
-        id = parentId
-        parentId = null;
-    }
-    if (!id.charAt)
-        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
-
-    id = normalizeModule(parentId, id);
-
-    var module = require.modules[id];
-    if (module) {
-        if (!module.initialized) {
-            module.initialized = true;
-            module.exports = module.factory().exports;
-        }
-        return module.exports;
-    }
-    
-    var chunks = id.split("/");
-    chunks[0] = require.tlns[chunks[0]] || chunks[0];
-    var path = chunks.join("/") + ".js";
-    
-    require.id = id;
-    importScripts(path);
-    return require(parentId, id);
-};
-
-require.modules = {};
-require.tlns = {};
-
-window.define = function(id, deps, factory) {
-    if (arguments.length == 2) {
-        factory = deps;
-        if (typeof id != "string") {
-            deps = id;
-            id = require.id;
-        }
-    } else if (arguments.length == 1) {
-        factory = id;
-        id = require.id;
-    }
-
-    if (id.indexOf("text!") === 0) 
-        return;
-    
-    var req = function(deps, factory) {
-        return require(id, deps, factory);
-    };
-
-    require.modules[id] = {
-        factory: function() {
-            var module = {
-                exports: {}
-            };
-            var returnExports = factory(req, module.exports, module);
-            if (returnExports)
-                module.exports = returnExports;
-            return module;
-        }
-    };
-};
-
-window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
-    require.tlns = topLevelNamespaces;
-}
-
-window.initSender = function initSender() {
-
-    var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
-    var oop = require("ace/lib/oop");
-    
-    var Sender = function() {};
-    
-    (function() {
-        
-        oop.implement(this, EventEmitter);
-                
-        this.callback = function(data, callbackId) {
-            postMessage({
-                type: "call",
-                id: callbackId,
-                data: data
-            });
-        };
-    
-        this.emit = function(name, data) {
-            postMessage({
-                type: "event",
-                name: name,
-                data: data
-            });
-        };
-        
-    }).call(Sender.prototype);
-    
-    return new Sender();
-}
-
-window.main = null;
-window.sender = null;
-
-window.onmessage = function(e) {
-    var msg = e.data;
-    if (msg.command) {
-        if (main[msg.command])
-            main[msg.command].apply(main, msg.args);
-        else
-            throw new Error("Unknown command:" + msg.command);
-    }
-    else if (msg.init) {        
-        initBaseUrls(msg.tlns);
-        require("ace/lib/es5-shim");
-        sender = initSender();
-        var clazz = require(msg.module)[msg.classname];
-        main = new clazz(sender);
-    } 
-    else if (msg.event && sender) {
-        sender._emit(msg.event, msg.data);
-    }
-};
-})(this);
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
-
-define('ace/mode/php_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/php/php'], function(require, exports, module) {
-
-
-var oop = require("../lib/oop");
-var Mirror = require("../worker/mirror").Mirror;
-var PHP = require("./php/php").PHP;
-
-var PhpWorker = exports.PhpWorker = function(sender) {
-    Mirror.call(this, sender);
-    this.setTimeout(500);
-};
-
-oop.inherits(PhpWorker, Mirror);
-
-(function() {
-
-    this.onUpdate = function() {
-        var value = this.doc.getValue();
-        var errors = [];
-
-        var tokens = PHP.Lexer(value, {short_open_tag: 1});
-        try {
-            new PHP.Parser(tokens);
-        } catch(e) {
-            errors.push({
-                row: e.line - 1,
-                column: null,
-                text: e.message.charAt(0).toUpperCase() + e.message.substring(1),
-                type: "error"
-            });
-        }
-
-        if (errors.length) {
-            this.sender.emit("error", errors);
-        } else {
-            this.sender.emit("ok");
-        }
-    };
-
-}).call(PhpWorker.prototype);
-
-});
-define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var Document = require("../document").Document;
-var lang = require("../lib/lang");
-    
-var Mirror = exports.Mirror = function(sender) {
-    this.sender = sender;
-    var doc = this.doc = new Document("");
-    
-    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
-    
-    var _self = this;
-    sender.on("change", function(e) {
-        doc.applyDeltas(e.data);
-        deferredUpdate.schedule(_self.$timeout);
-    });
-};
-
-(function() {
-    
-    this.$timeout = 500;
-    
-    this.setTimeout = function(timeout) {
-        this.$timeout = timeout;
-    };
-    
-    this.setValue = function(value) {
-        this.doc.setValue(value);
-        this.deferredUpdate.schedule(this.$timeout);
-    };
-    
-    this.getValue = function(callbackId) {
-        this.sender.callback(this.doc.getValue(), callbackId);
-    };
-    
-    this.onUpdate = function() {
-    };
-    
-}).call(Mirror.prototype);
-
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
-
-
-
-define('ace/mode/php/php', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var PHP = {Constants:{}};
-
-
-
-
-
-
-PHP.Constants.T_INCLUDE = 262;
-PHP.Constants.T_INCLUDE_ONCE = 261;
-PHP.Constants.T_EVAL = 260;
-PHP.Constants.T_REQUIRE = 259;
-PHP.Constants.T_REQUIRE_ONCE = 258;
-PHP.Constants.T_LOGICAL_OR = 263;
-PHP.Constants.T_LOGICAL_XOR = 264;
-PHP.Constants.T_LOGICAL_AND = 265;
-PHP.Constants.T_PRINT = 266;
-PHP.Constants.T_PLUS_EQUAL = 277;
-PHP.Constants.T_MINUS_EQUAL = 276;
-PHP.Constants.T_MUL_EQUAL = 275;
-PHP.Constants.T_DIV_EQUAL = 274;
-PHP.Constants.T_CONCAT_EQUAL = 273;
-PHP.Constants.T_MOD_EQUAL = 272;
-PHP.Constants.T_AND_EQUAL = 271;
-PHP.Constants.T_OR_EQUAL = 270;
-PHP.Constants.T_XOR_EQUAL = 269;
-PHP.Constants.T_SL_EQUAL = 268;
-PHP.Constants.T_SR_EQUAL = 267;
-PHP.Constants.T_BOOLEAN_OR = 278;
-PHP.Constants.T_BOOLEAN_AND = 279;
-PHP.Constants.T_IS_EQUAL = 283;
-PHP.Constants.T_IS_NOT_EQUAL = 282;
-PHP.Constants.T_IS_IDENTICAL = 281;
-PHP.Constants.T_IS_NOT_IDENTICAL = 280;
-PHP.Constants.T_IS_SMALLER_OR_EQUAL = 285;
-PHP.Constants.T_IS_GREATER_OR_EQUAL = 284;
-PHP.Constants.T_SL = 287;
-PHP.Constants.T_SR = 286;
-PHP.Constants.T_INSTANCEOF = 288;
-PHP.Constants.T_INC = 297;
-PHP.Constants.T_DEC = 296;
-PHP.Constants.T_INT_CAST = 295;
-PHP.Constants.T_DOUBLE_CAST = 294;
-PHP.Constants.T_STRING_CAST = 293;
-PHP.Constants.T_ARRAY_CAST = 292;
-PHP.Constants.T_OBJECT_CAST = 291;
-PHP.Constants.T_BOOL_CAST = 290;
-PHP.Constants.T_UNSET_CAST = 289;
-PHP.Constants.T_NEW = 299;
-PHP.Constants.T_CLONE = 298;
-PHP.Constants.T_EXIT = 300;
-PHP.Constants.T_IF = 301;
-PHP.Constants.T_ELSEIF = 302;
-PHP.Constants.T_ELSE = 303;
-PHP.Constants.T_ENDIF = 304;
-PHP.Constants.T_LNUMBER = 305;
-PHP.Constants.T_DNUMBER = 306;
-PHP.Constants.T_STRING = 307;
-PHP.Constants.T_STRING_VARNAME = 308;
-PHP.Constants.T_VARIABLE = 309;
-PHP.Constants.T_NUM_STRING = 310;
-PHP.Constants.T_INLINE_HTML = 311;
-PHP.Constants.T_CHARACTER = 312;
-PHP.Constants.T_BAD_CHARACTER = 313;
-PHP.Constants.T_ENCAPSED_AND_WHITESPACE = 314;
-PHP.Constants.T_CONSTANT_ENCAPSED_STRING = 315;
-PHP.Constants.T_ECHO = 316;
-PHP.Constants.T_DO = 317;
-PHP.Constants.T_WHILE = 318;
-PHP.Constants.T_ENDWHILE = 319;
-PHP.Constants.T_FOR = 320;
-PHP.Constants.T_ENDFOR = 321;
-PHP.Constants.T_FOREACH = 322;
-PHP.Constants.T_ENDFOREACH = 323;
-PHP.Constants.T_DECLARE = 324;
-PHP.Constants.T_ENDDECLARE = 325;
-PHP.Constants.T_AS = 326;
-PHP.Constants.T_SWITCH = 327;
-PHP.Constants.T_ENDSWITCH = 328;
-PHP.Constants.T_CASE = 329;
-PHP.Constants.T_DEFAULT = 330;
-PHP.Constants.T_BREAK = 331;
-PHP.Constants.T_CONTINUE = 332;
-PHP.Constants.T_GOTO = 333;
-PHP.Constants.T_FUNCTION = 334;
-PHP.Constants.T_CONST = 335;
-PHP.Constants.T_RETURN = 336;
-PHP.Constants.T_TRY = 337;
-PHP.Constants.T_CATCH = 338;
-PHP.Constants.T_THROW = 339;
-PHP.Constants.T_USE = 340;
-PHP.Constants.T_GLOBAL = 341;
-PHP.Constants.T_STATIC = 347;
-PHP.Constants.T_ABSTRACT = 346;
-PHP.Constants.T_FINAL = 345;
-PHP.Constants.T_PRIVATE = 344;
-PHP.Constants.T_PROTECTED = 343;
-PHP.Constants.T_PUBLIC = 342;
-PHP.Constants.T_VAR = 348;
-PHP.Constants.T_UNSET = 349;
-PHP.Constants.T_ISSET = 350;
-PHP.Constants.T_EMPTY = 351;
-PHP.Constants.T_HALT_COMPILER = 352;
-PHP.Constants.T_CLASS = 353;
-PHP.Constants.T_INTERFACE = 354;
-PHP.Constants.T_EXTENDS = 355;
-PHP.Constants.T_IMPLEMENTS = 356;
-PHP.Constants.T_OBJECT_OPERATOR = 357;
-PHP.Constants.T_DOUBLE_ARROW = 358;
-PHP.Constants.T_LIST = 359;
-PHP.Constants.T_ARRAY = 360;
-PHP.Constants.T_CLASS_C = 361;
-PHP.Constants.T_TRAIT_C = 381;
-PHP.Constants.T_METHOD_C = 362;
-PHP.Constants.T_FUNC_C = 363;
-PHP.Constants.T_LINE = 364;
-PHP.Constants.T_FILE = 365;
-PHP.Constants.T_COMMENT = 366;
-PHP.Constants.T_DOC_COMMENT = 367;
-PHP.Constants.T_OPEN_TAG = 368;
-PHP.Constants.T_OPEN_TAG_WITH_ECHO = 369;
-PHP.Constants.T_CLOSE_TAG = 370;
-PHP.Constants.T_WHITESPACE = 371;
-PHP.Constants.T_START_HEREDOC = 372;
-PHP.Constants.T_END_HEREDOC = 373;
-PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES = 374;
-PHP.Constants.T_CURLY_OPEN = 375;
-PHP.Constants.T_PAAMAYIM_NEKUDOTAYIM = 376;
-PHP.Constants.T_DOUBLE_COLON = 376;
-PHP.Constants.T_NAMESPACE = 377;
-PHP.Constants.T_NS_C = 378;
-PHP.Constants.T_DIR = 379;
-PHP.Constants.T_NS_SEPARATOR = 380;
-PHP.Lexer = function( src, ini ) {
-
-
-    var heredoc,
-    lineBreaker = function( result ) {
-        if (result.match(/\n/) !== null) {
-            var quote = result.substring(0, 1);
-            result = '[' + result.split(/\n/).join( quote + "," + quote ) + '].join("\\n")';
-
-        }
-
-        return result;
-    },
-    prev,
-
-    openTag = (ini === undefined || (/^(on|true|1)$/i.test(ini.short_open_tag) ) ? /(\<\?php\s|\<\?|\<\%|\<script language\=('|")?php('|")?\>)/i : /(\<\?php\s|<\?=|\<script language\=('|")?php('|")?\>)/i),
-        openTagStart = (ini === undefined || (/^(on|true|1)$/i.test(ini.short_open_tag)) ? /^(\<\?php\s|\<\?|\<\%|\<script language\=('|")?php('|")?\>)/i : /^(\<\?php\s|<\?=|\<script language\=('|")?php('|")?\>)/i),
-            tokens = [
-            {
-                value: PHP.Constants.T_USE,
-                re: /^use(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_ABSTRACT,
-                re: /^abstract(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_IMPLEMENTS,
-                re: /^implements(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_INTERFACE,
-                re: /^interface(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_CONST,
-                re: /^const(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_STATIC,
-                re: /^static(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_FINAL,
-                re: /^final(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_VAR,
-                re: /^var(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_GLOBAL,
-                re: /^global(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_CLONE,
-                re: /^clone(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_THROW,
-                re: /^throw(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_EXTENDS,
-                re: /^extends(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_AND_EQUAL,
-                re: /^&=/
-            },
-            {
-                value: PHP.Constants.T_AS,
-                re: /^as(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_ARRAY_CAST,
-                re: /^\(array\)/i
-            },
-            {
-                value: PHP.Constants.T_BOOL_CAST,
-                re: /^\((bool|boolean)\)/i
-            },
-            {
-                value: PHP.Constants.T_DOUBLE_CAST,
-                re: /^\((real|float|double)\)/i
-            },
-            {
-                value: PHP.Constants.T_INT_CAST,
-                re: /^\((int|integer)\)/i
-            },
-            {
-                value: PHP.Constants.T_OBJECT_CAST,
-                re: /^\(object\)/i
-            },
-            {
-                value: PHP.Constants.T_STRING_CAST,
-                re: /^\(string\)/i
-            },
-            {
-                value: PHP.Constants.T_UNSET_CAST,
-                re: /^\(unset\)/i
-            },
-            {
-                value: PHP.Constants.T_TRY,
-                re: /^try(?=\s*{)/i
-            },
-            {
-                value: PHP.Constants.T_CATCH,
-                re: /^catch(?=\s*\()/i
-            },
-            {
-                value: PHP.Constants.T_INSTANCEOF,
-                re: /^instanceof(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_LOGICAL_OR,
-                re: /^or(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_LOGICAL_AND,
-                re: /^and(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_LOGICAL_XOR,
-                re: /^xor(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_BOOLEAN_AND,
-                re: /^&&/
-            },
-            {
-                value: PHP.Constants.T_BOOLEAN_OR,
-                re: /^\|\|/
-            },
-            {
-                value: PHP.Constants.T_CONTINUE,
-                re: /^continue(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_BREAK,
-                re: /^break(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_ENDDECLARE,
-                re: /^enddeclare(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_ENDFOR,
-                re: /^endfor(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_ENDFOREACH,
-                re: /^endforeach(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_ENDIF,
-                re: /^endif(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_ENDSWITCH,
-                re: /^endswitch(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_ENDWHILE,
-                re: /^endwhile(?=\s|;)/i
-            },
-            {
-                value: PHP.Constants.T_CASE,
-                re: /^case(?=\s)/i
-            },
-            {
-                value: PHP.Constants.T_DEFAULT,
-                re: /^default(?=\s|:)/i
-            },
-            {
-                value: PHP.Constants.T_SWITCH,
-                re: /^switch(?=[ (])/i
-            },
-            {
-                value: PHP.Constants.T_EXIT,
-                re: /^(exit|die)(?=[ \(;])/i
-            },
-            {
-                value: PHP.Constants.T_CLOSE_TAG,
-                re: /^(\?\>|\%\>|\<\/script\>)\s?\s?/i,
-                func: function( result ) {
-                    insidePHP = false;
-                    return result;
-                }
-            },
-            {
-                value: PHP.Constants.T_DOUBLE_ARROW,
-                re: /^\=\>/
-            },
-            {
-                value: PHP.Constants.T_DOUBLE_COLON,
-                re: /^\:\:/
-            },
-            {
-                value: PHP.Constants.T_METHOD_C,
-                re: /^__METHOD__/
-            },
-            {
-                value: PHP.Constants.T_LINE,
-                re: /^__LINE__/
-            },
-            {
-                value: PHP.Constants.T_FILE,
-                re: /^__FILE__/
-            },
-            {
-                value: PHP.Constants.T_FUNC_C,
-                re: /^__FUNCTION__/
-            },
-            {
-                value: PHP.Constants.T_NS_C,
-                re: /^__NAMESPACE__/
-            },
-            {
-                value: PHP.Constants.T_TRAIT_C,
-                re: /^__TRAIT__/
-            },
-            {
-                value: PHP.Constants.T_DIR,
-                re: /^__DIR__/
-            },
-            {
-                value: PHP.Constants.T_CLASS_C,
-                re: /^__CLASS__/
-            },
-            {
-                value: PHP.Constants.T_INC,
-                re: /^\+\+/
-            },
-            {
-                value: PHP.Constants.T_DEC,
-                re: /^\-\-/
-            },
-            {
-                value: PHP.Constants.T_CONCAT_EQUAL,
-                re: /^\.\=/
-            },
-            {
-                value: PHP.Constants.T_DIV_EQUAL,
-                re: /^\/\=/
-            },
-            {
-                value: PHP.Constants.T_XOR_EQUAL,
-                re: /^\^\=/
-            },
-            {
-                value: PHP.Constants.T_MUL_EQUAL,
-                re: /^\*\=/
-            },
-            {
-                value: PHP.Constants.T_MOD_EQUAL,
-                re: /^\%\=/
-            },
-            {
-                value: PHP.Constants.T_SL_EQUAL,
-                re: /^<<=/
-            },
-            {
-                value: PHP.Constants.T_START_HEREDOC,
-                re: /^<<<[A-Z_0-9]+\s/i,
-                func: function( result ){
-                    heredoc = result.substring(3, result.length - 1);
-                    return result;
-                }
-            },
-            {
-                value: PHP.Constants.T_SL,
-                re: /^<</
-            },
-            {
-                value: PHP.Constants.T_IS_SMALLER_OR_EQUAL,
-                re: /^<=/
-            },
-            {
-                value: PHP.Constants.T_SR_EQUAL,
-                re: /^>>=/
-            },
-            {
-                value: PHP.Constants.T_SR,
-                re: /^>>/
-            },
-            {
-                value: PHP.Constants.T_IS_GREATER_OR_EQUAL,
-                re: /^>=/
-            },
-            {
-                value: PHP.Constants.T_OR_EQUAL,
-                re: /^\|\=/
-            },
-            {
-                value: PHP.Constants.T_PLUS_EQUAL,
-                re: /^\+\=/
-            },
-            {
-                value: PHP.Constants.T_MINUS_EQUAL,
-                re: /^-\=/
-            },
-            {
-                value: PHP.Constants.T_OBJECT_OPERATOR,
-                re: /^\-\>/i
-            },
-            {
-                value: PHP.Constants.T_CLASS,
-                re: /^class(?=[\s\{])/i,
-                afterWhitespace: true
-            },
-            {
-                value: PHP.Constants.T_PUBLIC,
-                re: /^public(?=[\s])/i
-            },
-            {
-                value: PHP.Constants.T_PRIVATE,
-                re: /^private(?=[\s])/i
-            },
-            {
-                value: PHP.Constants.T_PROTECTED,
-                re: /^protected(?=[\s])/i
-            },
-            {
-                value: PHP.Constants.T_ARRAY,
-                re: /^array(?=\s*?\()/i
-            },
-            {
-                value: PHP.Constants.T_EMPTY,
-                re: /^empty(?=[ \(])/i
-            },
-            {
-                value: PHP.Constants.T_ISSET,
-                re: /^isset(?=[ \(])/i
-            },
-            {
-                value: PHP.Constants.T_UNSET,
-                re: /^unset(?=[ \(])/i
-            },
-            {
-                value: PHP.Constants.T_RETURN,
-                re: /^return(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_FUNCTION,
-                re: /^function(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_ECHO,
-                re: /^echo(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_LIST,
-                re: /^list(?=\s*?\()/i
-            },
-            {
-                value: PHP.Constants.T_PRINT,
-                re: /^print(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_INCLUDE,
-                re: /^include(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_INCLUDE_ONCE,
-                re: /^include_once(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_REQUIRE,
-                re: /^require(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_REQUIRE_ONCE,
-                re: /^require_once(?=[ "'(;])/i
-            },
-            {
-                value: PHP.Constants.T_NEW,
-                re: /^new(?=[ ])/i
-            },
-            {
-                value: PHP.Constants.T_COMMENT,
-                re: /^\/\*([\S\s]*?)(?:\*\/|$)/
-            },
-            {
-                value: PHP.Constants.T_COMMENT,
-                re: /^\/\/.*(\s)?/
-            },
-            {
-                value: PHP.Constants.T_COMMENT,
-                re: /^\#.*(\s)?/
-            },
-            {
-                value: PHP.Constants.T_ELSEIF,
-                re: /^elseif(?=[\s(])/i
-            },
-            {
-                value: PHP.Constants.T_GOTO,
-                re: /^goto(?=[\s(])/i
-            },
-            {
-                value: PHP.Constants.T_ELSE,
-                re: /^else(?=[\s{:])/i
-            },
-            {
-                value: PHP.Constants.T_IF,
-                re: /^if(?=[\s(])/i
-            },
-            {
-                value: PHP.Constants.T_DO,
-                re: /^do(?=[ {])/i
-            },
-            {
-                value: PHP.Constants.T_WHILE,
-                re: /^while(?=[ (])/i
-            },
-            {
-                value: PHP.Constants.T_FOREACH,
-                re: /^foreach(?=[ (])/i
-            },
-            {
-                value: PHP.Constants.T_ISSET,
-                re: /^isset(?=[ (])/i
-            },
-            {
-                value: PHP.Constants.T_IS_IDENTICAL,
-                re: /^===/
-            },
-            {
-                value: PHP.Constants.T_IS_EQUAL,
-                re: /^==/
-            },
-            {
-                value: PHP.Constants.T_IS_NOT_IDENTICAL,
-                re: /^\!==/
-            },
-            {
-                value: PHP.Constants.T_IS_NOT_EQUAL,
-                re: /^(\!=|\<\>)/
-            },
-            {
-                value: PHP.Constants.T_FOR,
-                re: /^for(?=[ (])/i
-            },
-
-            {
-                value: PHP.Constants.T_DNUMBER,
-                re: /^[0-9]*\.[0-9]+([eE][-]?[0-9]*)?/
-
-            },
-            {
-                value: PHP.Constants.T_LNUMBER,
-                re: /^(0x[0-9A-F]+|[0-9]+)/i
-            },
-            {
-                value: PHP.Constants.T_OPEN_TAG_WITH_ECHO,
-                re: /^(\<\?=|\<\%=)/i
-            },
-            {
-                value: PHP.Constants.T_OPEN_TAG,
-                re: openTagStart
-            },
-            {
-                value: PHP.Constants.T_VARIABLE,
-                re: /^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
-            },
-            {
-                value: PHP.Constants.T_WHITESPACE,
-                re: /^\s+/
-            },
-            {
-                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,
-                re: /^("(?:[^"\\]|\\[\s\S])*"|'(?:[^'\\]|\\[\s\S])*')/,
-                func: function( result, token ) {
-
-                    var curlyOpen = 0,
-                    len,
-                    bracketOpen = 0;
-
-                    if (result.substring( 0,1 ) === "'") {
-                        return result;
-                    }
-
-                    var match = result.match( /(?:[^\\]|\\.)*[^\\]\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/g );
-                    if ( match !== null ) {
-
-                        while( result.length > 0 ) {
-                            len = result.length;
-                            match = result.match( /^[\[\]\;\:\?\(\)\!\.\,\>\<\=\+\-\/\*\|\&\@\^\%\"\'\{\}]/ );
-
-                            if ( match !== null ) {
-
-                                results.push( match[ 0 ] );
-                                result = result.substring( 1 );
-
-                                if ( curlyOpen > 0 && match[ 0 ] === "}") {
-                                    curlyOpen--;
-                                }
-
-                                if ( match[ 0 ] === "[" ) {
-                                    bracketOpen++;
-                                }
-
-                                if ( match[ 0 ] === "]" ) {
-                                    bracketOpen--;
-                                }
-
-                            }
-
-                            match = result.match(/^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/);
-
-
-
-                            if ( match !== null ) {
-
-                                results.push([
-                                    parseInt(PHP.Constants.T_VARIABLE, 10),
-                                    match[ 0 ],
-                                    line
-                                    ]);
-
-                                result = result.substring( match[ 0 ].length );
-
-                                match = result.match(/^(\-\>)([a-zA-Z0-9_\x7f-\xff]*)/);
-
-                                if ( match !== null ) {
-
-                                    results.push([
-                                        parseInt(PHP.Constants.T_OBJECT_OPERATOR, 10),
-                                        match[ 1 ],
-                                        line
-                                        ]);
-                                    results.push([
-                                        parseInt(PHP.Constants.T_STRING, 10),
-                                        match[ 2 ],
-                                        line
-                                        ]);
-                                    result = result.substring( match[ 0 ].length );
-                                }
-
-
-                                if ( result.match( /^\[/g ) !== null ) {
-                                    continue;
-                                }
-                            }
-
-                            var re;
-                            if ( curlyOpen > 0) {
-                                re = /^([^\\\$"{}\]]|\\.)+/g;
-                            } else {
-                                re = /^([^\\\$"{]|\\.|{[^\$])+/g;
-                            }
-
-                            while(( match = result.match( re )) !== null ) {
-
-
-                                if (result.length === 1) {
-                                    throw new Error(match);
-                                }
-
-
-
-                                results.push([
-                                    parseInt(( curlyOpen > 0 ) ? PHP.Constants.T_CONSTANT_ENCAPSED_STRING : PHP.Constants.T_ENCAPSED_AND_WHITESPACE, 10),
-                                    match[ 0 ],
-                                    line
-                                    ]);
-
-                                line += match[ 0 ].split('\n').length - 1;
-
-                                result = result.substring( match[ 0 ].length );
-
-                            }
-
-                            if( result.match(/^{\$/) !== null ) {
-
-                                results.push([
-                                    parseInt(PHP.Constants.T_CURLY_OPEN, 10),
-                                    "{",
-                                    line
-                                    ]);
-                                result = result.substring( 1 );
-                                curlyOpen++;
-                            }
-
-                            if (len === result.length) {
-                                if ((match =  result.match( /^(([^\\]|\\.)*?[^\\]\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/g )) !== null) {
-                                    return;
-                                }
-                            }
-
-                        }
-
-                        return undefined;
-
-                    }
-                    return result;
-                }
-            },
-            {
-                value: PHP.Constants.T_STRING,
-                re: /^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
-            },
-            {
-                value: -1,
-                re: /^[\[\]\;\:\?\(\)\!\.\,\>\<\=\+\-\/\*\|\&\{\}\@\^\%\"\'\$\~]/
-            }];
-
-
-
-
-
-            var results = [],
-            line = 1,
-            insidePHP = false,
-            cancel = true;
-
-            if ( src === null ) {
-                return results;
-            }
-
-            if ( typeof src !== "string" ) {
-                src = src.toString();
-            }
-
-
-
-            while (src.length > 0 && cancel === true) {
-
-                if ( insidePHP === true ) {
-
-                    if ( heredoc !== undefined ) {
-
-                        var regexp = new RegExp('([\\S\\s]*)(\\r\\n|\\n|\\r)(' + heredoc + ')(;|\\r\\n|\\n)',"i");
-
-
-
-                        var result = src.match( regexp );
-                        if ( result !== null ) {
-
-                            results.push([
-                                parseInt(PHP.Constants.T_ENCAPSED_AND_WHITESPACE, 10),
-                                result[ 1 ].replace(/^\n/g,"").replace(/\\\$/g,"$") + "\n",
-                                line
-                                ]);
-                            line += result[ 1 ].split('\n').length;
-                            results.push([
-                                parseInt(PHP.Constants.T_END_HEREDOC, 10),
-                                result[ 3 ],
-                                line
-                                ]);
-
-                            src = src.substring( result[1].length + result[2].length + result[3].length );
-                            heredoc = undefined;
-                        }
-
-                        if (result === null) {
-                            throw Error("sup");
-                        }
-
-
-                    } else {
-                        cancel =  tokens.some(function( token ){
-                            if ( token.afterWhitespace === true ) {
-                                var last = results[ results.length - 1 ];
-                                if ( !Array.isArray( last ) || (last[ 0 ] !== PHP.Constants.T_WHITESPACE && last[ 0 ] !== PHP.Constants.T_OPEN_TAG  && last[ 0 ] !== PHP.Constants.T_COMMENT)) {
-                                    return false;
-                                }
-                            }
-                            var result = src.match( token.re );
-
-                            if ( result !== null ) {
-                                if ( token.value !== -1) {
-                                    var resultString = result[ 0 ];
-
-
-
-                                    if (token.func !== undefined ) {
-                                        resultString = token.func( resultString, token );
-                                    }
-                                    if (resultString !== undefined ) {
-
-                                        results.push([
-                                            parseInt(token.value, 10),
-                                            resultString,
-                                            line
-                                            ]);
-                                        line += resultString.split('\n').length - 1;
-                                    }
-
-                                } else {
-                                    results.push( result[ 0 ] );
-                                }
-
-                                src = src.substring(result[ 0 ].length);
-
-                                return true;
-                            }
-                            return false;
-
-
-                        });
-                    }
-
-                } else {
-
-                    var result = openTag.exec( src );
-
-
-                    if ( result !== null ) {
-                        if ( result.index > 0 ) {
-                            var resultString = src.substring(0, result.index);
-                            results.push ([
-                                parseInt(PHP.Constants.T_INLINE_HTML, 10),
-                                resultString,
-                                line
-                                ]);
-
-                            line += resultString.split('\n').length - 1;
-
-                            src = src.substring( result.index );
-                        }
-
-                        insidePHP = true;
-                    } else {
-
-                        results.push ([
-                            parseInt(PHP.Constants.T_INLINE_HTML, 10),
-                            src.replace(/^\n/, ""),
-                            line
-                            ]);
-                        return results;
-                    }
-
-                }
-
-
-
-            }
-
-
-
-            return results;
-
-
-
-        };
-
-
-PHP.Parser = function ( preprocessedTokens, eval ) {
-
-    var yybase = this.yybase,
-    yydefault = this.yydefault,
-    yycheck = this.yycheck,
-    yyaction = this.yyaction,
-    yylen = this.yylen,
-    yygbase = this.yygbase,
-    yygcheck = this.yygcheck,
-    yyp = this.yyp,
-    yygoto = this.yygoto,
-    yylhs = this.yylhs,
-    terminals = this.terminals,
-    translate = this.translate,
-    yygdefault = this.yygdefault;
-
-
-    this.pos = -1;
-    this.line = 1;
-
-    this.tokenMap = this.createTokenMap( );
-
-    this.dropTokens = {};
-    this.dropTokens[ PHP.Constants.T_WHITESPACE ] = 1;
-    this.dropTokens[ PHP.Constants.T_OPEN_TAG ] = 1;
-    var tokens = [];
-    preprocessedTokens.forEach( function( token, index ) {
-        if ( typeof token === "object" && token[ 0 ] === PHP.Constants.T_OPEN_TAG_WITH_ECHO) {
-            tokens.push([
-                PHP.Constants.T_OPEN_TAG,
-                token[ 1 ],
-                token[ 2 ]
-                ]);
-            tokens.push([
-                PHP.Constants.T_ECHO,
-                token[ 1 ],
-                token[ 2 ]
-                ]);
-        } else {
-            tokens.push( token );
-        }
-    });
-    this.tokens = tokens;
-    var tokenId = this.TOKEN_NONE;
-    this.startAttributes = {
-        'startLine': 1
-    };
-
-    this.endAttributes = {};
-    var attributeStack = [ this.startAttributes ];
-    var state = 0;
-    var stateStack = [ state ];
-    this.yyastk = [];
-    this.stackPos  = 0;
-
-    var yyn;
-
-    var origTokenId;
-
-
-    for (;;) {
-
-        if ( yybase[ state ] === 0 ) {
-            yyn = yydefault[ state ];
-        } else {
-            if (tokenId === this.TOKEN_NONE ) {
-                origTokenId = this.getNextToken( );
-                tokenId = (origTokenId >= 0 && origTokenId < this.TOKEN_MAP_SIZE) ? translate[ origTokenId ] : this.TOKEN_INVALID;
-
-                attributeStack[ this.stackPos ] = this.startAttributes;
-            }
-
-            if (((yyn = yybase[ state ] + tokenId) >= 0
-                && yyn < this.YYLAST && yycheck[ yyn ] === tokenId
-                || (state < this.YY2TBLSTATE
-                    && (yyn = yybase[state + this.YYNLSTATES] + tokenId) >= 0
-                    && yyn < this.YYLAST
-                    && yycheck[ yyn ] === tokenId))
-            && (yyn = yyaction[ yyn ]) !== this.YYDEFAULT ) {
-                if (yyn > 0) {
-                    ++this.stackPos;
-
-                    stateStack[ this.stackPos ] = state = yyn;
-                    this.yyastk[ this.stackPos ] = this.tokenValue;
-                    attributeStack[ this.stackPos ] = this.startAttributes;
-                    tokenId = this.TOKEN_NONE;
-
-                    if (yyn < this.YYNLSTATES)
-                        continue;
-                    yyn -= this.YYNLSTATES;
-                } else {
-                    yyn = -yyn;
-                }
-            } else {
-                yyn = yydefault[ state ];
-            }
-        }
-
-        for (;;) {
-
-            if ( yyn === 0 ) {
-                return this.yyval;
-            } else if (yyn !== this.YYUNEXPECTED ) {
-                for (var attr in this.endAttributes) {
-                    attributeStack[ this.stackPos - yylen[ yyn ] ][ attr ] = this.endAttributes[ attr ];
-                }
-                try {
-                    this['yyn' + yyn](attributeStack[ this.stackPos - yylen[ yyn ] ]);
-                } catch (e) {
-                    throw e;
-                }
-                this.stackPos -= yylen[ yyn ];
-                yyn = yylhs[ yyn ];
-                if ((yyp = yygbase[ yyn ] + stateStack[ this.stackPos ]) >= 0
-                    && yyp < this.YYGLAST
-                    && yygcheck[ yyp ] === yyn) {
-                    state = yygoto[ yyp ];
-                } else {
-                    state = yygdefault[ yyn ];
-                }
-
-                ++this.stackPos;
-
-                stateStack[ this.stackPos ] = state;
-                this.yyastk[ this.stackPos ] = this.yyval;
-                attributeStack[ this.stackPos ] = this.startAttributes;
-            } else {
-                if (eval !== true) {
-
-                    var expected = [];
-
-                    for (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {
-                        if ((yyn = yybase[ state ] + i) >= 0 && yyn < this.YYLAST && yycheck[ yyn ] == i
-                         || state < this.YY2TBLSTATE
-                            && (yyn = yybase[ state + this.YYNLSTATES] + i)
-                            && yyn < this.YYLAST && yycheck[ yyn ] == i
-                        ) {
-                            if (yyaction[ yyn ] != this.YYUNEXPECTED) {
-                                if (expected.length == 4) {
-                                    expected = [];
-                                    break;
-                                }
-
-                                expected.push( this.terminals[ i ] );
-                            }
-                        }
-                    }
-
-                    var expectedString = '';
-                    if (expected.length) {
-                        expectedString = ', expecting ' + expected.join(' or ');
-                    }
-                    throw new PHP.ParseError('syntax error, unexpected ' + terminals[ tokenId ] + expectedString, this.startAttributes['startLine']);
-                } else {
-                    return this.startAttributes['startLine'];
-                }
-
-            }
-
-            if (state < this.YYNLSTATES)
-                break;
-            yyn = state - this.YYNLSTATES;
-        }
-    }
-};
-
-PHP.ParseError = function( msg, line ) {
-    this.message = msg;
-    this.line = line;
-};
-
-PHP.Parser.prototype.MODIFIER_PUBLIC    =  1;
-PHP.Parser.prototype.MODIFIER_PROTECTED =  2;
-PHP.Parser.prototype.MODIFIER_PRIVATE   =  4;
-PHP.Parser.prototype.MODIFIER_STATIC    =  8;
-PHP.Parser.prototype.MODIFIER_ABSTRACT  = 16;
-PHP.Parser.prototype.MODIFIER_FINAL     = 32;
-
-PHP.Parser.prototype.getNextToken = function( ) {
-
-    this.startAttributes = {};
-    this.endAttributes = {};
-
-    var token,
-    tmp;
-
-    while (this.tokens[++this.pos] !== undefined) {
-        token = this.tokens[this.pos];
-
-        if (typeof token === "string") {
-            this.startAttributes['startLine'] = this.line;
-            this.endAttributes['endLine'] = this.line;
-
-            this.tokenValue = token;
-            return token.charCodeAt(0);
-        } else {
-
-
-
-            this.line += ((tmp = token[ 1 ].match(/\n/g)) === null) ? 0 : tmp.length;
-
-            if (PHP.Constants.T_COMMENT === token[0]) {
-
-                if (!Array.isArray(this.startAttributes['comments'])) {
-                    this.startAttributes['comments'] = [];
-                }
-
-                this.startAttributes['comments'].push( {
-                    type: "comment",
-                    comment: token[1],
-                    line: token[2]
-                });
-
-            } else if (PHP.Constants.T_DOC_COMMENT === token[0]) {
-                this.startAttributes['comments'].push( new PHPParser_Comment_Doc(token[1], token[2]) );
-            } else if (this.dropTokens[token[0]] === undefined) {
-                this.tokenValue = token[1];
-                this.startAttributes['startLine'] = token[2];
-                this.endAttributes['endLine'] = this.line;
-
-                return this.tokenMap[token[0]];
-            }
-        }
-    }
-
-    this.startAttributes['startLine'] = this.line;
-    return 0;
-};
-
-PHP.Parser.prototype.tokenName = function( token ) {
-    var constants = ["T_INCLUDE","T_INCLUDE_ONCE","T_EVAL","T_REQUIRE","T_REQUIRE_ONCE","T_LOGICAL_OR","T_LOGICAL_XOR","T_LOGICAL_AND","T_PRINT","T_PLUS_EQUAL","T_MINUS_EQUAL","T_MUL_EQUAL","T_DIV_EQUAL","T_CONCAT_EQUAL","T_MOD_EQUAL","T_AND_EQUAL","T_OR_EQUAL","T_XOR_EQUAL","T_SL_EQUAL","T_SR_EQUAL","T_BOOLEAN_OR","T_BOOLEAN_AND","T_IS_EQUAL","T_IS_NOT_EQUAL","T_IS_IDENTICAL","T_IS_NOT_IDENTICAL","T_IS_SMALLER_OR_EQUAL","T_IS_GREATER_OR_EQUAL","T_SL","T_SR","T_INSTANCEOF","T_INC","T_DEC","T_INT_CAST","T_DOUBLE_CAST","T_STRING_CAST","T_ARRAY_CAST","T_OBJECT_CAST","T_BOOL_CAST","T_UNSET_CAST","T_NEW","T_CLONE","T_EXIT","T_IF","T_ELSEIF","T_ELSE","T_ENDIF","T_LNUMBER","T_DNUMBER","T_STRING","T_STRING_VARNAME","T_VARIABLE","T_NUM_STRING","T_INLINE_HTML","T_CHARACTER","T_BAD_CHARACTER","T_ENCAPSED_AND_WHITESPACE","T_CONSTANT_ENCAPSED_STRING","T_ECHO","T_DO","T_WHILE","T_ENDWHILE","T_FOR","T_ENDFOR","T_FOREACH","T_ENDFOREACH","T_DECLARE","T_ENDDECLARE","T_AS","T_SWITCH","T_ENDSWITCH","T_CASE","T_DEFAULT","T_BREAK","T_CONTINUE","T_GOTO","T_FUNCTION","T_CONST","T_RETURN","T_TRY","T_CATCH","T_THROW","T_USE","T_INSTEADOF","T_GLOBAL","T_STATIC","T_ABSTRACT","T_FINAL","T_PRIVATE","T_PROTECTED","T_PUBLIC","T_VAR","T_UNSET","T_ISSET","T_EMPTY","T_HALT_COMPILER","T_CLASS","T_TRAIT","T_INTERFACE","T_EXTENDS","T_IMPLEMENTS","T_OBJECT_OPERATOR","T_DOUBLE_ARROW","T_LIST","T_ARRAY","T_CALLABLE","T_CLASS_C","T_TRAIT_C","T_METHOD_C","T_FUNC_C","T_LINE","T_FILE","T_COMMENT","T_DOC_COMMENT","T_OPEN_TAG","T_OPEN_TAG_WITH_ECHO","T_CLOSE_TAG","T_WHITESPACE","T_START_HEREDOC","T_END_HEREDOC","T_DOLLAR_OPEN_CURLY_BRACES","T_CURLY_OPEN","T_PAAMAYIM_NEKUDOTAYIM","T_DOUBLE_COLON","T_NAMESPACE","T_NS_C","T_DIR","T_NS_SEPARATOR"];
-    var current = "UNKNOWN";
-    constants.some(function( constant ) {
-        if (PHP.Constants[ constant ] === token) {
-            current = constant;
-            return true;
-        } else {
-            return false;
-        }
-    });
-
-    return current;
-};
-
-PHP.Parser.prototype.createTokenMap = function() {
-    var tokenMap = {},
-    name,
-    i;
-    var T_DOUBLE_COLON = PHP.Constants.T_PAAMAYIM_NEKUDOTAYIM;
-    for ( i = 256; i < 1000; ++i ) {
-        if ( T_DOUBLE_COLON === i ) {
-            tokenMap[ i ] = this.T_PAAMAYIM_NEKUDOTAYIM;
-        } else if( PHP.Constants.T_OPEN_TAG_WITH_ECHO === i ) {
-            tokenMap[ i ] = PHP.Constants.T_ECHO;
-        } else if( PHP.Constants.T_CLOSE_TAG === i ) {
-            tokenMap[ i ] = 59;
-        } else if ( 'UNKNOWN' !== (name = this.tokenName( i ) ) ) {
-
-            tokenMap[ i ] =  this[name];
-        }
-    }
-    return tokenMap;
-};
-
-PHP.Parser.prototype.TOKEN_NONE    = -1;
-PHP.Parser.prototype.TOKEN_INVALID = 149;
-
-PHP.Parser.prototype.TOKEN_MAP_SIZE = 384;
-
-PHP.Parser.prototype.YYLAST       = 913;
-PHP.Parser.prototype.YY2TBLSTATE  = 328;
-PHP.Parser.prototype.YYGLAST      = 415;
-PHP.Parser.prototype.YYNLSTATES   = 544;
-PHP.Parser.prototype.YYUNEXPECTED = 32767;
-PHP.Parser.prototype.YYDEFAULT    = -32766;
-PHP.Parser.prototype.YYERRTOK = 256;
-PHP.Parser.prototype.T_INCLUDE = 257;
-PHP.Parser.prototype.T_INCLUDE_ONCE = 258;
-PHP.Parser.prototype.T_EVAL = 259;
-PHP.Parser.prototype.T_REQUIRE = 260;
-PHP.Parser.prototype.T_REQUIRE_ONCE = 261;
-PHP.Parser.prototype.T_LOGICAL_OR = 262;
-PHP.Parser.prototype.T_LOGICAL_XOR = 263;
-PHP.Parser.prototype.T_LOGICAL_AND = 264;
-PHP.Parser.prototype.T_PRINT = 265;
-PHP.Parser.prototype.T_PLUS_EQUAL = 266;
-PHP.Parser.prototype.T_MINUS_EQUAL = 267;
-PHP.Parser.prototype.T_MUL_EQUAL = 268;
-PHP.Parser.prototype.T_DIV_EQUAL = 269;
-PHP.Parser.prototype.T_CONCAT_EQUAL = 270;
-PHP.Parser.prototype.T_MOD_EQUAL = 271;
-PHP.Parser.prototype.T_AND_EQUAL = 272;
-PHP.Parser.prototype.T_OR_EQUAL = 273;
-PHP.Parser.prototype.T_XOR_EQUAL = 274;
-PHP.Parser.prototype.T_SL_EQUAL = 275;
-PHP.Parser.prototype.T_SR_EQUAL = 276;
-PHP.Parser.prototype.T_BOOLEAN_OR = 277;
-PHP.Parser.prototype.T_BOOLEAN_AND = 278;
-PHP.Parser.prototype.T_IS_EQUAL = 279;
-PHP.Parser.prototype.T_IS_NOT_EQUAL = 280;
-PHP.Parser.prototype.T_IS_IDENTICAL = 281;
-PHP.Parser.prototype.T_IS_NOT_IDENTICAL = 282;
-PHP.Parser.prototype.T_IS_SMALLER_OR_EQUAL = 283;
-PHP.Parser.prototype.T_IS_GREATER_OR_EQUAL = 284;
-PHP.Parser.prototype.T_SL = 285;
-PHP.Parser.prototype.T_SR = 286;
-PHP.Parser.prototype.T_INSTANCEOF = 287;
-PHP.Parser.prototype.T_INC = 288;
-PHP.Parser.prototype.T_DEC = 289;
-PHP.Parser.prototype.T_INT_CAST = 290;
-PHP.Parser.prototype.T_DOUBLE_CAST = 291;
-PHP.Parser.prototype.T_STRING_CAST = 292;
-PHP.Parser.prototype.T_ARRAY_CAST = 293;
-PHP.Parser.prototype.T_OBJECT_CAST = 294;
-PHP.Parser.prototype.T_BOOL_CAST = 295;
-PHP.Parser.prototype.T_UNSET_CAST = 296;
-PHP.Parser.prototype.T_NEW = 297;
-PHP.Parser.prototype.T_CLONE = 298;
-PHP.Parser.prototype.T_EXIT = 299;
-PHP.Parser.prototype.T_IF = 300;
-PHP.Parser.prototype.T_ELSEIF = 301;
-PHP.Parser.prototype.T_ELSE = 302;
-PHP.Parser.prototype.T_ENDIF = 303;
-PHP.Parser.prototype.T_LNUMBER = 304;
-PHP.Parser.prototype.T_DNUMBER = 305;
-PHP.Parser.prototype.T_STRING = 306;
-PHP.Parser.prototype.T_STRING_VARNAME = 307;
-PHP.Parser.prototype.T_VARIABLE = 308;
-PHP.Parser.prototype.T_NUM_STRING = 309;
-PHP.Parser.prototype.T_INLINE_HTML = 310;
-PHP.Parser.prototype.T_CHARACTER = 311;
-PHP.Parser.prototype.T_BAD_CHARACTER = 312;
-PHP.Parser.prototype.T_ENCAPSED_AND_WHITESPACE = 313;
-PHP.Parser.prototype.T_CONSTANT_ENCAPSED_STRING = 314;
-PHP.Parser.prototype.T_ECHO = 315;
-PHP.Parser.prototype.T_DO = 316;
-PHP.Parser.prototype.T_WHILE = 317;
-PHP.Parser.prototype.T_ENDWHILE = 318;
-PHP.Parser.prototype.T_FOR = 319;
-PHP.Parser.prototype.T_ENDFOR = 320;
-PHP.Parser.prototype.T_FOREACH = 321;
-PHP.Parser.prototype.T_ENDFOREACH = 322;
-PHP.Parser.prototype.T_DECLARE = 323;
-PHP.Parser.prototype.T_ENDDECLARE = 324;
-PHP.Parser.prototype.T_AS = 325;
-PHP.Parser.prototype.T_SWITCH = 326;
-PHP.Parser.prototype.T_ENDSWITCH = 327;
-PHP.Parser.prototype.T_CASE = 328;
-PHP.Parser.prototype.T_DEFAULT = 329;
-PHP.Parser.prototype.T_BREAK = 330;
-PHP.Parser.prototype.T_CONTINUE = 331;
-PHP.Parser.prototype.T_GOTO = 332;
-PHP.Parser.prototype.T_FUNCTION = 333;
-PHP.Parser.prototype.T_CONST = 334;
-PHP.Parser.prototype.T_RETURN = 335;
-PHP.Parser.prototype.T_TRY = 336;
-PHP.Parser.prototype.T_CATCH = 337;
-PHP.Parser.prototype.T_THROW = 338;
-PHP.Parser.prototype.T_USE = 339;
-PHP.Parser.prototype.T_INSTEADOF = 340;
-PHP.Parser.prototype.T_GLOBAL = 341;
-PHP.Parser.prototype.T_STATIC = 342;
-PHP.Parser.prototype.T_ABSTRACT = 343;
-PHP.Parser.prototype.T_FINAL = 344;
-PHP.Parser.prototype.T_PRIVATE = 345;
-PHP.Parser.prototype.T_PROTECTED = 346;
-PHP.Parser.prototype.T_PUBLIC = 347;
-PHP.Parser.prototype.T_VAR = 348;
-PHP.Parser.prototype.T_UNSET = 349;
-PHP.Parser.prototype.T_ISSET = 350;
-PHP.Parser.prototype.T_EMPTY = 351;
-PHP.Parser.prototype.T_HALT_COMPILER = 352;
-PHP.Parser.prototype.T_CLASS = 353;
-PHP.Parser.prototype.T_TRAIT = 354;
-PHP.Parser.prototype.T_INTERFACE = 355;
-PHP.Parser.prototype.T_EXTENDS = 356;
-PHP.Parser.prototype.T_IMPLEMENTS = 357;
-PHP.Parser.prototype.T_OBJECT_OPERATOR = 358;
-PHP.Parser.prototype.T_DOUBLE_ARROW = 359;
-PHP.Parser.prototype.T_LIST = 360;
-PHP.Parser.prototype.T_ARRAY = 361;
-PHP.Parser.prototype.T_CALLABLE = 362;
-PHP.Parser.prototype.T_CLASS_C = 363;
-PHP.Parser.prototype.T_TRAIT_C = 364;
-PHP.Parser.prototype.T_METHOD_C = 365;
-PHP.Parser.prototype.T_FUNC_C = 366;
-PHP.Parser.prototype.T_LINE = 367;
-PHP.Parser.prototype.T_FILE = 368;
-PHP.Parser.prototype.T_COMMENT = 369;
-PHP.Parser.prototype.T_DOC_COMMENT = 370;
-PHP.Parser.prototype.T_OPEN_TAG = 371;
-PHP.Parser.prototype.T_OPEN_TAG_WITH_ECHO = 372;
-PHP.Parser.prototype.T_CLOSE_TAG = 373;
-PHP.Parser.prototype.T_WHITESPACE = 374;
-PHP.Parser.prototype.T_START_HEREDOC = 375;
-PHP.Parser.prototype.T_END_HEREDOC = 376;
-PHP.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES = 377;
-PHP.Parser.prototype.T_CURLY_OPEN = 378;
-PHP.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM = 379;
-PHP.Parser.prototype.T_NAMESPACE = 380;
-PHP.Parser.prototype.T_NS_C = 381;
-PHP.Parser.prototype.T_DIR = 382;
-PHP.Parser.prototype.T_NS_SEPARATOR = 383;
-PHP.Parser.prototype.terminals = [
-    "$EOF",
-    "error",
-    "T_INCLUDE",
-    "T_INCLUDE_ONCE",
-    "T_EVAL",
-    "T_REQUIRE",
-    "T_REQUIRE_ONCE",
-    "','",
-    "T_LOGICAL_OR",
-    "T_LOGICAL_XOR",
-    "T_LOGICAL_AND",
-    "T_PRINT",
-    "'='",
-    "T_PLUS_EQUAL",
-    "T_MINUS_EQUAL",
-    "T_MUL_EQUAL",
-    "T_DIV_EQUAL",
-    "T_CONCAT_EQUAL",
-    "T_MOD_EQUAL",
-    "T_AND_EQUAL",
-    "T_OR_EQUAL",
-    "T_XOR_EQUAL",
-    "T_SL_EQUAL",
-    "T_SR_EQUAL",
-    "'?'",
-    "':'",
-    "T_BOOLEAN_OR",
-    "T_BOOLEAN_AND",
-    "'|'",
-    "'^'",
-    "'&'",
-    "T_IS_EQUAL",
-    "T_IS_NOT_EQUAL",
-    "T_IS_IDENTICAL",
-    "T_IS_NOT_IDENTICAL",
-    "'<'",
-    "T_IS_SMALLER_OR_EQUAL",
-    "'>'",
-    "T_IS_GREATER_OR_EQUAL",
-    "T_SL",
-    "T_SR",
-    "'+'",
-    "'-'",
-    "'.'",
-    "'*'",
-    "'/'",
-    "'%'",
-    "'!'",
-    "T_INSTANCEOF",
-    "'~'",
-    "T_INC",
-    "T_DEC",
-    "T_INT_CAST",
-    "T_DOUBLE_CAST",
-    "T_STRING_CAST",
-    "T_ARRAY_CAST",
-    "T_OBJECT_CAST",
-    "T_BOOL_CAST",
-    "T_UNSET_CAST",
-    "'@'",
-    "'['",
-    "T_NEW",
-    "T_CLONE",
-    "T_EXIT",
-    "T_IF",
-    "T_ELSEIF",
-    "T_ELSE",
-    "T_ENDIF",
-    "T_LNUMBER",
-    "T_DNUMBER",
-    "T_STRING",
-    "T_STRING_VARNAME",
-    "T_VARIABLE",
-    "T_NUM_STRING",
-    "T_INLINE_HTML",
-    "T_ENCAPSED_AND_WHITESPACE",
-    "T_CONSTANT_ENCAPSED_STRING",
-    "T_ECHO",
-    "T_DO",
-    "T_WHILE",
-    "T_ENDWHILE",
-    "T_FOR",
-    "T_ENDFOR",
-    "T_FOREACH",
-    "T_ENDFOREACH",
-    "T_DECLARE",
-    "T_ENDDECLARE",
-    "T_AS",
-    "T_SWITCH",
-    "T_ENDSWITCH",
-    "T_CASE",
-    "T_DEFAULT",
-    "T_BREAK",
-    "T_CONTINUE",
-    "T_GOTO",
-    "T_FUNCTION",
-    "T_CONST",
-    "T_RETURN",
-    "T_TRY",
-    "T_CATCH",
-    "T_THROW",
-    "T_USE",
-    "T_INSTEADOF",
-    "T_GLOBAL",
-    "T_STATIC",
-    "T_ABSTRACT",
-    "T_FINAL",
-    "T_PRIVATE",
-    "T_PROTECTED",
-    "T_PUBLIC",
-    "T_VAR",
-    "T_UNSET",
-    "T_ISSET",
-    "T_EMPTY",
-    "T_HALT_COMPILER",
-    "T_CLASS",
-    "T_TRAIT",
-    "T_INTERFACE",
-    "T_EXTENDS",
-    "T_IMPLEMENTS",
-    "T_OBJECT_OPERATOR",
-    "T_DOUBLE_ARROW",
-    "T_LIST",
-    "T_ARRAY",
-    "T_CALLABLE",
-    "T_CLASS_C",
-    "T_TRAIT_C",
-    "T_METHOD_C",
-    "T_FUNC_C",
-    "T_LINE",
-    "T_FILE",
-    "T_START_HEREDOC",
-    "T_END_HEREDOC",
-    "T_DOLLAR_OPEN_CURLY_BRACES",
-    "T_CURLY_OPEN",
-    "T_PAAMAYIM_NEKUDOTAYIM",
-    "T_NAMESPACE",
-    "T_NS_C",
-    "T_DIR",
-    "T_NS_SEPARATOR",
-    "';'",
-    "'{'",
-    "'}'",
-    "'('",
-    "')'",
-    "'$'",
-    "']'",
-    "'`'",
-    "'\"'"
-    , "???"
-];
-PHP.Parser.prototype.translate = [
-        0,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,   47,  148,  149,  145,   46,   30,  149,
-      143,  144,   44,   41,    7,   42,   43,   45,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,   25,  140,
-       35,   12,   37,   24,   59,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,   60,  149,  146,   29,  149,  147,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  141,   28,  142,   49,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,    1,    2,    3,    4,
-        5,    6,    8,    9,   10,   11,   13,   14,   15,   16,
-       17,   18,   19,   20,   21,   22,   23,   26,   27,   31,
-       32,   33,   34,   36,   38,   39,   40,   48,   50,   51,
-       52,   53,   54,   55,   56,   57,   58,   61,   62,   63,
-       64,   65,   66,   67,   68,   69,   70,   71,   72,   73,
-       74,  149,  149,   75,   76,   77,   78,   79,   80,   81,
-       82,   83,   84,   85,   86,   87,   88,   89,   90,   91,
-       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
-      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
-      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-      122,  123,  124,  125,  126,  127,  128,  129,  130,  149,
-      149,  149,  149,  149,  149,  131,  132,  133,  134,  135,
-      136,  137,  138,  139
-];
-
-PHP.Parser.prototype.yyaction = [
-       61,   62,  363,   63,   64,-32766,-32766,-32766,  509,   65,
-      708,  709,  710,  707,  706,  705,-32766,-32766,-32766,-32766,
-    -32766,-32766,  132,-32766,-32766,-32766,-32766,-32766,-32767,-32767,
-    -32767,-32767,-32766,  335,-32766,-32766,-32766,-32766,-32766,   66,
-       67,  351,  663,  664,   40,   68,  548,   69,  232,  233,
-       70,   71,   72,   73,   74,   75,   76,   77,   30,  246,
-       78,  336,  364, -112,    0,  469,  833,  834,  365,  641,
-      890,  436,  590,   41,  835,   53,   27,  366,  294,  367,
-      687,  368,  921,  369,  923,  922,  370,-32766,-32766,-32766,
-       42,   43,  371,  339,  126,   44,  372,  337,   79,  297,
-      349,  292,  293,-32766,  918,-32766,-32766,  373,  374,  375,
-      376,  377,  391,  199,  361,  338,  573,  613,  378,  379,
-      380,  381,  845,  839,  840,  841,  842,  836,  837,  253,
-    -32766,   87,   88,   89,  391,  843,  838,  338,  597,  519,
-      128,   80,  129,  273,  332,  257,  261,   47,  673,   90,
-       91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
-      101,  102,  103,  104,  105,  106,  107,  108,  109,  110,
-      799,  247,  884,  108,  109,  110,  226,  247,   21,-32766,
-      310,-32766,-32766,-32766,  642,  548,-32766,-32766,-32766,-32766,
-       56,  353,-32766,-32766,-32766,   55,-32766,-32766,-32766,-32766,
-    -32766,   58,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-    -32766,  557,-32766,-32766,  518,-32766,  548,  890,-32766,  390,
-    -32766,  228,  252,-32766,-32766,-32766,-32766,-32766,  275,-32766,
-      234,-32766,  587,  588,-32766,-32766,-32766,-32766,-32766,-32766,
-    -32766,   46,  236,-32766,-32766,  281,-32766,  682,  348,-32766,
-      390,-32766,  346,  333,  521,-32766,-32766,-32766,  271,  911,
-      262,  237,  446,  911,-32766,  894,   59,  700,  358,  135,
-      548,  123,  538,   35,-32766,  333,  122,-32766,-32766,-32766,
-      271,-32766,  124,-32766,  692,-32766,-32766,-32766,-32766,  700,
-      273,   22,-32766,-32766,-32766,-32766,  239,-32766,-32766,  612,
-    -32766,  548,  134,-32766,  390,-32766,  462,  354,-32766,-32766,
-    -32766,-32766,-32766,  227,-32766,  238,-32766,  845,  542,-32766,
-      856,  611,  200,-32766,-32766,-32766,  259,  280,-32766,-32766,
-      201,-32766,  855,  129,-32766,  390,  130,  202,  333,  206,
-    -32766,-32766,-32766,  271,-32766,-32766,-32766,  125,  601,-32766,
-      136,  299,  700,  489,   28,  548,  105,  106,  107,-32766,
-      498,  499,-32766,-32766,-32766,  207,-32766,  133,-32766,  525,
-    -32766,-32766,-32766,-32766,  663,  664,  527,-32766,-32766,-32766,
-    -32766,  528,-32766,-32766,  610,-32766,  548,  427,-32766,  390,
-    -32766,  532,  539,-32766,-32766,-32766,-32766,-32766,  240,-32766,
-      247,-32766,  697,  543,-32766,  554,  523,  608,-32766,-32766,
-    -32766,  686,  535,-32766,-32766,   54,-32766,   57,   60,-32766,
-      390,  246, -155,  278,  345,-32766,-32766,-32766,  506,  347,
-     -152,  471,  402,  403,-32766,  405,  404,  272,  493,  416,
-      548,  318,  417,  505,-32766,  517,  548,-32766,-32766,-32766,
-      549,-32766,  562,-32766,  916,-32766,-32766,-32766,-32766,  564,
-      826,  848,-32766,-32766,-32766,-32766,  694,-32766,-32766,  485,
-    -32766,  548,  487,-32766,  390,-32766,  504,  802,-32766,-32766,
-    -32766,-32766,-32766,  279,-32766,  911,-32766,  502,  492,-32766,
-      413,  483,  269,-32766,-32766,-32766,  243,  337,-32766,-32766,
-      418,-32766,  454,  229,-32766,  390,  274,  373,  374,  344,
-    -32766,-32766,-32766,  360,  614,-32766,  573,  613,  378,  379,
-     -274,  548,  615, -332,  844,-32766,  258,   51,-32766,-32766,
-    -32766,  270,-32766,  346,-32766,   52,-32766,  260,    0,-32766,
-     -333,-32766,-32766,-32766,-32766,-32766,-32766,  205,-32766,-32766,
-       49,-32766,  548,  424,-32766,  390,-32766, -266,  264,-32766,
-    -32766,-32766,-32766,-32766,  409,-32766,  343,-32766,  265,  312,
-    -32766,  470,  513, -275,-32766,-32766,-32766,  920,  337,-32766,
-    -32766,  530,-32766,  531,  600,-32766,  390,  592,  373,  374,
-      578,  581,-32766,-32766,  644,  629,-32766,  573,  613,  378,
-      379,  635,  548,  636,  576,  627,-32766,  625,  693,-32766,
-    -32766,-32766,  691,-32766,  591,-32766,  582,-32766,  203,  204,
-    -32766,  584,  583,-32766,-32766,-32766,-32766,  586,  599,-32766,
-    -32766,  589,-32766,  690,  558,-32766,  390,  197,  683,  919,
-       86,  520,  522,-32766,  524,  833,  834,  529,  533,-32766,
-      534,  537,  541,  835,   48,  111,  112,  113,  114,  115,
-      116,  117,  118,  119,  120,  121,  127,   31,  633,  337,
-      330,  634,  585,-32766,   32,  291,  337,  330,  478,  373,
-      374,  917,  291,  891,  889,  875,  373,  374,  553,  613,
-      378,  379,  737,  739,  887,  553,  613,  378,  379,  824,
-      451,  675,  839,  840,  841,  842,  836,  837,  320,  895,
-      277,  885,   23,   33,  843,  838,  556,  277,  337,  330,
-    -32766,   34,-32766,  555,  291,   36,   37,   38,  373,  374,
-       39,   45,   50,   81,   82,   83,   84,  553,  613,  378,
-      379,-32767,-32767,-32767,-32767,  103,  104,  105,  106,  107,
-      337,   85,  131,  137,  337,  138,  198,  224,  225,  277,
-      373,  374, -332,  230,  373,  374,   24,  337,  231,  573,
-      613,  378,  379,  573,  613,  378,  379,  373,  374,  235,
-      248,  249,  250,  337,  251,    0,  573,  613,  378,  379,
-      276,  329,  331,  373,  374,-32766,  337,  574,  490,  792,
-      337,  609,  573,  613,  378,  379,  373,  374,   25,  300,
-      373,  374,  319,  337,  795,  573,  613,  378,  379,  573,
-      613,  378,  379,  373,  374,  516,  355,  359,  445,  482,
-      796,  507,  573,  613,  378,  379,  508,  548,  337,  890,
-      775,  791,  337,  604,  803,  808,  806,  698,  373,  374,
-      888,  807,  373,  374,-32766,-32766,-32766,  573,  613,  378,
-      379,  573,  613,  378,  379,  873,  832,  804,  872,  851,
-    -32766,  809,-32766,-32766,-32766,-32766,  805,   20,   26,   29,
-      298,  480,  515,  770,  778,  827,  457,    0,  900,  455,
-      774,    0,    0,    0,  874,  870,  886,  823,  915,  852,
-      869,  488,    0,  391,  793,    0,  338,    0,    0,    0,
-      340,    0,  273
-];
-
-PHP.Parser.prototype.yycheck = [
-        2,    3,    4,    5,    6,    8,    9,   10,   70,   11,
-      104,  105,  106,  107,  108,  109,    8,    9,   10,    8,
-        9,   24,   60,   26,   27,   28,   29,   30,   31,   32,
-       33,   34,   24,    7,   26,   27,   28,   29,   30,   41,
-       42,    7,  123,  124,    7,   47,   70,   49,   50,   51,
-       52,   53,   54,   55,   56,   57,   58,   59,   60,   61,
-       62,   63,   64,  144,    0,   75,   68,   69,   70,   25,
-       72,   70,   74,    7,   76,   77,   78,   79,    7,   81,
-      142,   83,   70,   85,   72,   73,   88,    8,    9,   10,
-       92,   93,   94,   95,    7,   97,   98,   95,  100,    7,
-        7,  103,  104,   24,  142,   26,   27,  105,  106,  111,
-      112,  113,  136,    7,    7,  139,  114,  115,  116,  117,
-      122,  123,  132,  125,  126,  127,  128,  129,  130,  131,
-        8,    8,    9,   10,  136,  137,  138,  139,  140,  141,
-       25,  143,  141,  145,  142,  147,  148,   24,   72,   26,
-       27,   28,   29,   30,   31,   32,   33,   34,   35,   36,
-       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
-      144,   48,   72,   44,   45,   46,   30,   48,  144,   64,
-       72,    8,    9,   10,  140,   70,    8,    9,   10,   74,
-       60,   25,   77,   78,   79,   60,   81,   24,   83,   26,
-       85,   60,   24,   88,   26,   27,   28,   92,   93,   94,
-       64,  140,   97,   98,   70,  100,   70,   72,  103,  104,
-       74,  145,    7,   77,   78,   79,  111,   81,    7,   83,
-       30,   85,  140,  140,   88,    8,    9,   10,   92,   93,
-       94,  133,  134,   97,   98,  145,  100,  140,    7,  103,
-      104,   24,  139,   96,  141,  140,  141,  111,  101,   75,
-       75,   30,   70,   75,   64,   70,   60,  110,  121,   12,
-       70,  141,   25,  143,   74,   96,  141,   77,   78,   79,
-      101,   81,  141,   83,  140,   85,  140,  141,   88,  110,
-      145,  144,   92,   93,   94,   64,    7,   97,   98,  142,
-      100,   70,  141,  103,  104,   74,  145,  141,   77,   78,
-       79,  111,   81,    7,   83,   30,   85,  132,   25,   88,
-      132,  142,   12,   92,   93,   94,  120,   60,   97,   98,
-       12,  100,  148,  141,  103,  104,  141,   12,   96,   12,
-      140,  141,  111,  101,    8,    9,   10,  141,   25,   64,
-       90,   91,  110,   65,   66,   70,   41,   42,   43,   74,
-       65,   66,   77,   78,   79,   12,   81,   25,   83,   25,
-       85,  140,  141,   88,  123,  124,   25,   92,   93,   94,
-       64,   25,   97,   98,  142,  100,   70,  120,  103,  104,
-       74,   25,   25,   77,   78,   79,  111,   81,   30,   83,
-       48,   85,  140,  141,   88,  140,  141,   30,   92,   93,
-       94,  140,  141,   97,   98,   60,  100,   60,   60,  103,
-      104,   61,   72,   75,   70,  140,  141,  111,   67,   70,
-       87,   99,   70,   70,   64,   70,   72,  102,   89,   70,
-       70,   71,   70,   70,   74,   70,   70,   77,   78,   79,
-       70,   81,   70,   83,   70,   85,  140,  141,   88,   70,
-      144,   70,   92,   93,   94,   64,   70,   97,   98,   72,
-      100,   70,   72,  103,  104,   74,   72,   72,   77,   78,
-       79,  111,   81,   75,   83,   75,   85,   89,   86,   88,
-       79,  101,  118,   92,   93,   94,   87,   95,   97,   98,
-       87,  100,   87,   87,  103,  104,  118,  105,  106,   95,
-      140,  141,  111,   95,  115,   64,  114,  115,  116,  117,
-      135,   70,  115,  120,  132,   74,  120,  140,   77,   78,
-       79,  119,   81,  139,   83,  140,   85,  120,   -1,   88,
-      120,  140,  141,   92,   93,   94,   64,  121,   97,   98,
-      121,  100,   70,  122,  103,  104,   74,  135,  135,   77,
-       78,   79,  111,   81,  139,   83,  139,   85,  135,  135,
-       88,  135,  135,  135,   92,   93,   94,  142,   95,   97,
-       98,  140,  100,  140,  140,  103,  104,  140,  105,  106,
-      140,  140,  141,  111,  140,  140,   64,  114,  115,  116,
-      117,  140,   70,  140,  140,  140,   74,  140,  140,   77,
-       78,   79,  140,   81,  140,   83,  140,   85,   41,   42,
-       88,  140,  140,  141,   92,   93,   94,  140,  140,   97,
-       98,  140,  100,  140,  140,  103,  104,   60,  140,  142,
-      141,  141,  141,  111,  141,   68,   69,  141,  141,   72,
-      141,  141,  141,   76,   12,   13,   14,   15,   16,   17,
-       18,   19,   20,   21,   22,   23,  141,  143,  142,   95,
-       96,  142,  140,  141,  143,  101,   95,   96,  142,  105,
-      106,  142,  101,  142,  142,  142,  105,  106,  114,  115,
-      116,  117,   50,   51,  142,  114,  115,  116,  117,  142,
-      123,  142,  125,  126,  127,  128,  129,  130,  131,  142,
-      136,  142,  144,  143,  137,  138,  142,  136,   95,   96,
-      143,  143,  145,  142,  101,  143,  143,  143,  105,  106,
-      143,  143,  143,  143,  143,  143,  143,  114,  115,  116,
-      117,   35,   36,   37,   38,   39,   40,   41,   42,   43,
-       95,  143,  143,  143,   95,  143,  143,  143,  143,  136,
-      105,  106,  120,  143,  105,  106,  144,   95,  143,  114,
-      115,  116,  117,  114,  115,  116,  117,  105,  106,  143,
-      143,  143,  143,   95,  143,   -1,  114,  115,  116,  117,
-      143,  143,  143,  105,  106,  143,   95,  142,   80,  146,
-       95,  142,  114,  115,  116,  117,  105,  106,  144,  144,
-      105,  106,  144,   95,  142,  114,  115,  116,  117,  114,
-      115,  116,  117,  105,  106,   82,  144,  144,  144,  144,
-      142,   84,  114,  115,  116,  117,  144,   70,   95,   72,
-      144,  144,   95,  142,  144,  146,  144,  142,  105,  106,
-      146,  144,  105,  106,    8,    9,   10,  114,  115,  116,
-      117,  114,  115,  116,  117,  144,  144,  144,  144,  144,
-       24,  104,   26,   27,   28,   29,  144,  144,  144,  144,
-      144,  144,  144,  144,  144,  144,  144,   -1,  144,  144,
-      144,   -1,   -1,   -1,  146,  146,  146,  146,  146,  146,
-      146,  146,   -1,  136,  147,   -1,  139,   -1,   -1,   -1,
-      143,   -1,  145
-];
-
-PHP.Parser.prototype.yybase = [
-        0,  574,  581,  623,  655,    2,  718,  402,  747,  659,
-      672,  688,  743,  701,  705,  483,  483,  483,  483,  483,
-      351,  356,  366,  366,  367,  366,  344,   -2,   -2,   -2,
-      200,  200,  231,  231,  231,  231,  231,  231,  231,  231,
-      200,  231,  451,  482,  532,  316,  370,  115,  146,  285,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,   44,
-      474,  429,  476,  481,  487,  488,  739,  740,  741,  734,
-      733,  416,  736,  539,  541,  342,  542,  543,  552,  557,
-      559,  536,  567,  737,  755,  569,  735,  738,  123,  123,
-      123,  123,  123,  123,  123,  123,  123,  122,   11,  336,
-      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  227,  227,  173,  577,  577,  577,
-      577,  577,  577,  577,  577,  577,  577,  577,   79,  178,
-      846,    8,   -3,   -3,   -3,   -3,  642,  706,  706,  706,
-      706,  157,  179,  242,  431,  431,  360,  431,  525,  368,
-      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
-      767,  767,  350,  375,  315,  315,  652,  652,  -81,  -81,
-      -81,  -81,  251,  185,  188,  184,  -62,  348,  195,  195,
-      195,  408,  392,  410,    1,  192,  129,  129,  129,  -24,
-      -24,  -24,  -24,  499,  -24,  -24,  -24,  113,  108,  108,
-       12,  161,  349,  526,  271,  398,  529,  438,  130,  206,
-      265,  427,   76,  414,  427,  288,  295,   76,  166,   44,
-      262,  422,  141,  491,  372,  494,  413,   71,   92,   93,
-      267,  135,  100,   34,  415,  745,  746,  742,  -38,  420,
-      -10,  135,  147,  744,  498,  107,   26,  493,  144,  377,
-      363,  369,  332,  363,  400,  377,  588,  377,  376,  377,
-      360,   37,  582,  376,  377,  374,  376,  388,  363,  364,
-      412,  369,  377,  441,  443,  390,  106,  332,  377,  390,
-      377,  400,   64,  590,  591,  323,  592,  589,  593,  649,
-      608,  362,  500,  399,  407,  620,  625,  636,  365,  354,
-      614,  524,  425,  359,  355,  423,  570,  578,  357,  406,
-      414,  394,  352,  403,  531,  433,  403,  653,  434,  385,
-      417,  411,  444,  310,  318,  501,  425,  668,  757,  380,
-      637,  684,  403,  609,  387,   87,  325,  638,  382,  403,
-      639,  403,  696,  503,  615,  403,  697,  384,  435,  425,
-      352,  352,  352,  700,   66,  699,  583,  702,  707,  704,
-      748,  721,  749,  584,  750,  358,  583,  722,  751,  682,
-      215,  613,  422,  436,  389,  447,  221,  257,  752,  403,
-      403,  506,  499,  403,  395,  685,  397,  426,  753,  392,
-      391,  647,  683,  403,  418,  754,  221,  723,  587,  724,
-      450,  568,  507,  648,  509,  327,  725,  353,  497,  610,
-      454,  622,  455,  461,  404,  510,  373,  732,  612,  247,
-      361,  664,  463,  405,  692,  641,  464,  465,  511,  343,
-      437,  335,  409,  396,  665,  293,  467,  468,  472,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,    0,    0,    0,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,
-       -2,   -2,   -2,  123,  123,  123,  123,  123,  123,  123,
-      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
-      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
-      123,  123,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  123,  123,  123,  123,  123,  123,  123,  123,  123,
-      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
-      123,  767,  767,  767,  767,  767,  767,  767,  767,  767,
-      767,  767,  123,  123,  123,  123,  123,  123,  123,  123,
-        0,  129,  129,  129,  129,  -94,  -94,  -94,  767,  767,
-      767,  767,  767,  767,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  -94,  -94,  129,  129,
-      767,  767,  -24,  -24,  -24,  -24,  -24,  108,  108,  108,
-      -24,  108,  145,  145,  145,  108,  108,  108,  100,  100,
-        0,    0,    0,    0,    0,    0,    0,  145,    0,    0,
-        0,  376,    0,    0,    0,  145,  260,  260,  221,  260,
-      260,  135,    0,    0,  425,  376,    0,  364,  376,    0,
-        0,    0,    0,    0,    0,  531,    0,   87,  637,  241,
-      425,    0,    0,    0,    0,    0,    0,    0,  425,  289,
-      289,  306,    0,  358,    0,    0,    0,  306,  241,    0,
-        0,  221
-];
-
-PHP.Parser.prototype.yydefault = [
-        3,32767,32767,    1,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,  104,   96,  110,   95,  106,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-      358,  358,  122,  122,  122,  122,  122,  122,  122,  122,
-      316,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-      173,  173,  173,32767,  348,  348,  348,  348,  348,  348,
-      348,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,  363,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,  232,  233,
-      235,  236,  172,  125,  349,  362,  171,  199,  201,  250,
-      200,  177,  182,  183,  184,  185,  186,  187,  188,  189,
-      190,  191,  192,  176,  229,  228,  197,  313,  313,  316,
-    32767,32767,32767,32767,32767,32767,32767,32767,  198,  202,
-      204,  203,  219,  220,  217,  218,  175,  221,  222,  223,
-      224,  157,  157,  157,  357,  357,32767,  357,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,  158,32767,  211,  212,  276,  276,  117,  117,
-      117,  117,  117,32767,32767,32767,32767,  284,32767,32767,
-    32767,32767,32767,  286,32767,32767,  206,  207,  205,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,  285,32767,
-    32767,32767,32767,32767,32767,32767,32767,  334,  321,  272,
-    32767,32767,32767,  265,32767,  107,  109,32767,32767,32767,
-    32767,  302,  339,32767,32767,32767,   17,32767,32767,32767,
-      370,  334,32767,32767,   19,32767,32767,32767,32767,  227,
-    32767,  338,  332,32767,32767,32767,32767,32767,32767,   63,
-    32767,32767,32767,32767,32767,   63,  281,   63,32767,   63,
-    32767,  315,  287,32767,   63,   74,32767,   72,32767,32767,
-       76,32767,   63,   93,   93,  254,  315,   54,   63,  254,
-       63,32767,32767,32767,32767,    4,32767,32767,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,32767,  267,32767,  323,32767,  337,  336,  324,32767,
-      265,32767,  215,  194,  266,32767,  196,32767,32767,  270,
-      273,32767,32767,32767,  134,32767,  268,  180,32767,32767,
-    32767,32767,  365,32767,32767,  174,32767,32767,32767,  130,
-    32767,   61,  332,32767,32767,  355,32767,32767,  332,  269,
-      208,  209,  210,32767,  121,32767,  310,32767,32767,32767,
-    32767,32767,32767,  327,32767,  333,32767,32767,32767,32767,
-      111,32767,  302,32767,32767,32767,   75,32767,32767,  178,
-      126,32767,32767,  364,32767,32767,32767,  320,32767,32767,
-    32767,32767,32767,   62,32767,32767,   77,32767,32767,32767,
-    32767,  332,32767,32767,32767,  115,32767,  169,32767,32767,
-    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-    32767,  332,32767,32767,32767,32767,32767,32767,32767,    4,
-    32767,  151,32767,32767,32767,32767,32767,32767,32767,   25,
-       25,    3,  137,    3,  137,   25,  101,   25,   25,  137,
-       93,   93,   25,   25,   25,  144,   25,   25,   25,   25,
-       25,   25,   25,   25
-];
-
-PHP.Parser.prototype.yygoto = [
-      141,  141,  173,  173,  173,  173,  173,  173,  173,  173,
-      141,  173,  142,  143,  144,  148,  153,  155,  181,  175,
-      172,  172,  172,  172,  174,  174,  174,  174,  174,  174,
-      174,  168,  169,  170,  171,  179,  757,  758,  392,  760,
-      781,  782,  783,  784,  785,  786,  787,  789,  725,  145,
-      146,  147,  149,  150,  151,  152,  154,  177,  178,  180,
-      196,  208,  209,  210,  211,  212,  213,  214,  215,  217,
-      218,  219,  220,  244,  245,  266,  267,  268,  430,  431,
-      432,  182,  183,  184,  185,  186,  187,  188,  189,  190,
-      191,  192,  156,  157,  158,  159,  176,  160,  194,  161,
-      162,  163,  164,  195,  165,  193,  139,  166,  167,  452,
-      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
-      453,  453,  453,  453,  453,  453,  453,  453,  453,  453,
-      453,  551,  551,  551,  464,  491,  394,  394,  394,  394,
-      394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
-      394,  394,  394,  394,  407,  552,  552,  552,  810,  810,
-      662,  662,  662,  662,  662,  594,  283,  595,  510,  399,
-      399,  567,  679,  632,  849,  850,  863,  660,  714,  426,
-      222,  622,  622,  622,  622,  223,  617,  623,  494,  395,
-      395,  395,  395,  395,  395,  395,  395,  395,  395,  395,
-      395,  395,  395,  395,  395,  395,  395,  465,  472,  514,
-      904,  398,  398,  425,  425,  459,  425,  419,  322,  421,
-      421,  393,  396,  412,  422,  428,  460,  463,  473,  481,
-      501,    5,  476,  284,  327,    1,   15,    2,    6,    7,
-      550,  550,  550,    8,    9,   10,  668,   16,   11,   17,
-       12,   18,   13,   19,   14,  704,  328,  881,  881,  643,
-      628,  626,  626,  624,  626,  526,  401,  652,  647,  847,
-      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,
-      437,  438,  441,  447,  477,  479,  497,  290,  910,  910,
-      400,  400,  486,  880,  880,  263,  913,  910,  303,  255,
-      723,  306,  822,  821,  306,  896,  896,  896,  861,  304,
-      323,  410,  913,  913,  897,  316,  420,  769,  658,  559,
-      879,  671,  536,  324,  466,  565,  311,  311,  311,  801,
-      241,  676,  496,  439,  440,  442,  444,  448,  475,  631,
-      858,  311,  285,  286,  603,  495,  712,    0,  406,  321,
-        0,    0,    0,  314,    0,    0,  429,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  411
-];
-
-PHP.Parser.prototype.yygcheck = [
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   35,
-       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,    6,    6,    6,   21,   21,   35,   35,   35,   35,
-       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
-       35,   35,   35,   35,   71,    7,    7,    7,   35,   35,
-       35,   35,   35,   35,   35,   29,   44,   29,   35,   86,
-       86,   12,   12,   12,   12,   12,   12,   12,   12,   75,
-       40,   35,   35,   35,   35,   40,   35,   35,   35,   82,
-       82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
-       82,   82,   82,   82,   82,   82,   82,   36,   36,   36,
-      104,   82,   82,   28,   28,   28,   28,   28,   28,   28,
-       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
-       28,   13,   42,   42,   42,    2,   13,    2,   13,   13,
-        5,    5,    5,   13,   13,   13,   54,   13,   13,   13,
-       13,   13,   13,   13,   13,   67,   67,   83,   83,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       52,   52,   52,   52,   52,   52,   52,    4,  105,  105,
-       89,   89,   94,   84,   84,   92,  105,  105,   26,   92,
-       71,    4,   91,   91,    4,   84,   84,   84,   97,   30,
-       70,   30,  105,  105,  102,   27,   30,   72,   50,   10,
-       84,   55,   46,    9,   30,   11,   90,   90,   90,   80,
-       30,   56,   30,   85,   85,   85,   85,   85,   85,   43,
-       96,   90,   44,   44,   34,   77,   69,   -1,    4,   90,
-       -1,   -1,   -1,    4,   -1,   -1,    4,   -1,   -1,   -1,
-       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-       -1,   -1,   -1,   -1,   71
-];
-
-PHP.Parser.prototype.yygbase = [
-        0,    0, -286,    0,   10,  239,  130,  154,    0,  -10,
-       25,  -23,  -29, -289,    0,  -30,    0,    0,    0,    0,
-        0,   83,    0,    0,    0,    0,  245,   84,  -11,  142,
-      -28,    0,    0,    0,  -13,  -88,  -42,    0,    0,    0,
-     -344,    0,  -38,  -12, -188,    0,   23,    0,    0,    0,
-       66,    0,  247,    0,  205,   24,  -18,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   13,    0,  -15,
-       85,   74,   70,    0,    0,  148,    0,  -14,    0,    0,
-       -6,    0,  -35,   11,   47,  278,  -77,    0,    0,   44,
-       68,   43,   38,   72,   94,    0,  -16,  109,    0,    0,
-        0,    0,   87,    0,  170,   34,    0
-];
-
-PHP.Parser.prototype.yygdefault = [
-    -32768,  362,    3,  546,  382,  570,  571,  572,  307,  305,
-      560,  566,  467,    4,  568,  140,  295,  575,  296,  500,
-      577,  414,  579,  580,  308,  309,  415,  315,  216,  593,
-      503,  313,  596,  357,  602,  301,  449,  383,  350,  461,
-      221,  423,  456,  630,  282,  638,  540,  646,  649,  450,
-      657,  352,  433,  434,  667,  672,  677,  680,  334,  325,
-      474,  684,  685,  256,  689,  511,  512,  703,  242,  711,
-      317,  724,  342,  788,  790,  397,  408,  484,  797,  326,
-      800,  384,  385,  386,  387,  435,  818,  815,  289,  866,
-      287,  443,  254,  853,  468,  356,  903,  862,  288,  388,
-      389,  302,  898,  341,  905,  912,  458
-];
-
-PHP.Parser.prototype.yylhs = [
-        0,    1,    2,    2,    4,    4,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    8,    8,   10,   10,   10,
-       10,    9,    9,   11,   13,   13,   14,   14,   14,   14,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,   33,   33,
-       34,   27,   27,   30,   30,    6,    7,    7,    7,   37,
-       37,   37,   38,   38,   41,   41,   39,   39,   42,   42,
-       22,   22,   29,   29,   32,   32,   31,   31,   43,   23,
-       23,   23,   23,   44,   44,   45,   45,   46,   46,   20,
-       20,   16,   16,   47,   18,   18,   48,   17,   17,   19,
-       19,   36,   36,   49,   49,   50,   50,   51,   51,   51,
-       51,   52,   52,   53,   53,   54,   54,   24,   24,   55,
-       55,   55,   25,   25,   56,   56,   40,   40,   57,   57,
-       57,   57,   62,   62,   63,   63,   64,   64,   64,   64,
-       65,   66,   66,   61,   61,   58,   58,   60,   60,   68,
-       68,   67,   67,   67,   67,   67,   67,   59,   59,   69,
-       69,   26,   26,   21,   21,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   71,   77,   77,   79,   79,   80,   81,
-       81,   81,   81,   81,   81,   86,   86,   35,   35,   35,
-       72,   72,   87,   87,   82,   82,   88,   88,   88,   88,
-       88,   73,   73,   73,   76,   76,   76,   78,   78,   93,
-       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
-       93,   93,   93,   12,   12,   12,   12,   12,   12,   74,
-       74,   74,   74,   94,   94,   96,   96,   95,   95,   97,
-       97,   28,   28,   28,   28,   99,   99,   98,   98,   98,
-       98,   98,  100,  100,   84,   84,   89,   89,   83,   83,
-      101,  101,  101,  101,   90,   90,   90,   90,   85,   85,
-       91,   91,   91,   70,   70,  102,  102,  102,   75,   75,
-      103,  103,  104,  104,  104,  104,   92,   92,   92,   92,
-      105,  105,  105,  105,  105,  105,  105,  106,  106,  106
-];
-
-PHP.Parser.prototype.yylen = [
-        1,    1,    2,    0,    1,    3,    1,    1,    1,    1,
-        3,    5,    4,    3,    3,    3,    1,    1,    3,    2,
-        4,    3,    1,    3,    2,    0,    1,    1,    1,    1,
-        3,    7,   10,    5,    7,    9,    5,    2,    3,    2,
-        3,    2,    3,    3,    3,    3,    1,    2,    5,    7,
-        8,   10,    5,    1,    5,    3,    3,    2,    1,    2,
-        8,    1,    3,    0,    1,    9,    7,    6,    5,    1,
-        2,    2,    0,    2,    0,    2,    0,    2,    1,    3,
-        1,    4,    1,    4,    1,    4,    1,    3,    3,    3,
-        4,    4,    5,    0,    2,    4,    3,    1,    1,    1,
-        4,    0,    2,    5,    0,    2,    6,    0,    2,    0,
-        3,    1,    0,    1,    3,    3,    5,    0,    1,    1,
-        1,    1,    0,    1,    3,    1,    2,    3,    1,    1,
-        2,    4,    3,    1,    1,    3,    2,    0,    3,    3,
-        8,    3,    1,    3,    0,    2,    4,    5,    4,    4,
-        3,    1,    1,    1,    3,    1,    1,    0,    1,    1,
-        2,    1,    1,    1,    1,    1,    1,    1,    3,    1,
-        3,    3,    1,    0,    1,    1,    6,    3,    4,    4,
-        1,    2,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3,    3,    5,    4,
-        4,    4,    2,    2,    4,    2,    2,    2,    2,    2,
-        2,    2,    2,    2,    2,    2,    1,    4,    3,    3,
-        2,    9,   10,    3,    0,    4,    1,    3,    2,    4,
-        6,    8,    4,    4,    4,    1,    1,    1,    2,    3,
-        1,    1,    1,    1,    1,    1,    0,    3,    3,    4,
-        4,    0,    2,    3,    0,    1,    1,    0,    3,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        3,    2,    1,    1,    3,    2,    2,    4,    3,    1,
-        3,    3,    3,    0,    2,    0,    1,    3,    1,    3,
-        1,    1,    1,    1,    1,    6,    4,    3,    6,    4,
-        4,    4,    1,    3,    1,    2,    1,    1,    4,    1,
-        3,    6,    4,    4,    4,    4,    1,    4,    0,    1,
-        1,    3,    1,    3,    1,    1,    4,    0,    0,    2,
-        3,    1,    3,    1,    4,    2,    2,    2,    1,    2,
-        1,    4,    3,    3,    3,    6,    3,    1,    1,    1
-];
-
-
-
-
-
-
-
-PHP.Parser.prototype.yyn0 = function () {
-    this.yyval = this.yyastk[ this.stackPos ];
-};
-
-PHP.Parser.prototype.yyn1 = function ( attributes ) {
-     this.yyval = this.Stmt_Namespace_postprocess(this.yyastk[ this.stackPos-(1-1) ]); 
-};
-
-PHP.Parser.prototype.yyn2 = function ( attributes ) {
-     if (Array.isArray(this.yyastk[ this.stackPos-(2-2) ])) { this.yyval = this.yyastk[ this.stackPos-(2-1) ].concat( this.yyastk[ this.stackPos-(2-2) ]); } else { this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; }; 
-};
-
-PHP.Parser.prototype.yyn3 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn4 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn5 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn6 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn7 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn8 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn9 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_HaltCompiler(attributes); 
-};
-
-PHP.Parser.prototype.yyn10 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Namespace(this.Node_Name(this.yyastk[ this.stackPos-(3-2) ], attributes), null, attributes); 
-};
-
-PHP.Parser.prototype.yyn11 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Namespace(this.Node_Name(this.yyastk[ this.stackPos-(5-2) ], attributes), this.yyastk[ this.stackPos-(5-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn12 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Namespace(null, this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn13 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Use(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn14 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Const(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn15 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn16 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn17 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(1-1) ], attributes), null, attributes); 
-};
-
-PHP.Parser.prototype.yyn18 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(3-1) ], attributes), this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn19 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(2-2) ], attributes), null, attributes); 
-};
-
-PHP.Parser.prototype.yyn20 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(4-2) ], attributes), this.yyastk[ this.stackPos-(4-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn21 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn22 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn23 = function ( attributes ) {
-     this.yyval = this.Node_Const(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn24 = function ( attributes ) {
-     if (Array.isArray(this.yyastk[ this.stackPos-(2-2) ])) { this.yyval = this.yyastk[ this.stackPos-(2-1) ].concat( this.yyastk[ this.stackPos-(2-2) ]); } else { this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; }; 
-};
-
-PHP.Parser.prototype.yyn25 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn26 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn27 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn28 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn29 = function ( attributes ) {
-     throw new Error('__halt_compiler() can only be used from the outermost scope'); 
-};
-
-PHP.Parser.prototype.yyn30 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn31 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_If(this.yyastk[ this.stackPos-(7-3) ], {'stmts':  Array.isArray(this.yyastk[ this.stackPos-(7-5) ]) ? this.yyastk[ this.stackPos-(7-5) ] : [this.yyastk[ this.stackPos-(7-5) ]], 'elseifs':  this.yyastk[ this.stackPos-(7-6) ], 'Else':  this.yyastk[ this.stackPos-(7-7) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn32 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_If(this.yyastk[ this.stackPos-(10-3) ], {'stmts':  this.yyastk[ this.stackPos-(10-6) ], 'elseifs':  this.yyastk[ this.stackPos-(10-7) ], 'else':  this.yyastk[ this.stackPos-(10-8) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn33 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_While(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn34 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Do(this.yyastk[ this.stackPos-(7-5) ], Array.isArray(this.yyastk[ this.stackPos-(7-2) ]) ? this.yyastk[ this.stackPos-(7-2) ] : [this.yyastk[ this.stackPos-(7-2) ]], attributes); 
-};
-
-PHP.Parser.prototype.yyn35 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_For({'init':  this.yyastk[ this.stackPos-(9-3) ], 'cond':  this.yyastk[ this.stackPos-(9-5) ], 'loop':  this.yyastk[ this.stackPos-(9-7) ], 'stmts':  this.yyastk[ this.stackPos-(9-9) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn36 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Switch(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn37 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Break(null, attributes); 
-};
-
-PHP.Parser.prototype.yyn38 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Break(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn39 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Continue(null, attributes); 
-};
-
-PHP.Parser.prototype.yyn40 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Continue(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn41 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Return(null, attributes); 
-};
-
-PHP.Parser.prototype.yyn42 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Return(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn43 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Global(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn44 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Static(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn45 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Echo(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn46 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_InlineHTML(this.yyastk[ this.stackPos-(1-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn47 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn48 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Unset(this.yyastk[ this.stackPos-(5-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn49 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Foreach(this.yyastk[ this.stackPos-(7-3) ], this.yyastk[ this.stackPos-(7-5) ], {'keyVar':  null, 'byRef':  false, 'stmts':  this.yyastk[ this.stackPos-(7-7) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn50 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Foreach(this.yyastk[ this.stackPos-(8-3) ], this.yyastk[ this.stackPos-(8-6) ], {'keyVar':  null, 'byRef':  true, 'stmts':  this.yyastk[ this.stackPos-(8-8) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn51 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Foreach(this.yyastk[ this.stackPos-(10-3) ], this.yyastk[ this.stackPos-(10-8) ], {'keyVar':  this.yyastk[ this.stackPos-(10-5) ], 'byRef':  this.yyastk[ this.stackPos-(10-7) ], 'stmts':  this.yyastk[ this.stackPos-(10-10) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn52 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Declare(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn53 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn54 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_TryCatch(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn55 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Throw(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn56 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Goto(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn57 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Label(this.yyastk[ this.stackPos-(2-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn58 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn59 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn60 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Catch(this.yyastk[ this.stackPos-(8-3) ], this.yyastk[ this.stackPos-(8-4) ].substring( 1 ), this.yyastk[ this.stackPos-(8-7) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn61 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn62 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn63 = function ( attributes ) {
-     this.yyval = false; 
-};
-
-PHP.Parser.prototype.yyn64 = function ( attributes ) {
-     this.yyval = true; 
-};
-
-PHP.Parser.prototype.yyn65 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Function(this.yyastk[ this.stackPos-(9-3) ], {'byRef':  this.yyastk[ this.stackPos-(9-2) ], 'params':  this.yyastk[ this.stackPos-(9-5) ], 'stmts':  this.yyastk[ this.stackPos-(9-8) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn66 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Class(this.yyastk[ this.stackPos-(7-2) ], {'type':  this.yyastk[ this.stackPos-(7-1) ], 'Extends':  this.yyastk[ this.stackPos-(7-3) ], 'Implements':  this.yyastk[ this.stackPos-(7-4) ], 'stmts':  this.yyastk[ this.stackPos-(7-6) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn67 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Interface(this.yyastk[ this.stackPos-(6-2) ], {'Extends':  this.yyastk[ this.stackPos-(6-3) ], 'stmts':  this.yyastk[ this.stackPos-(6-5) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn68 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Trait(this.yyastk[ this.stackPos-(5-2) ], this.yyastk[ this.stackPos-(5-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn69 = function ( attributes ) {
-     this.yyval = 0; 
-};
-
-PHP.Parser.prototype.yyn70 = function ( attributes ) {
-     this.yyval = this.MODIFIER_ABSTRACT; 
-};
-
-PHP.Parser.prototype.yyn71 = function ( attributes ) {
-     this.yyval = this.MODIFIER_FINAL; 
-};
-
-PHP.Parser.prototype.yyn72 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn73 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(2-2) ]; 
-};
-
-PHP.Parser.prototype.yyn74 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn75 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(2-2) ]; 
-};
-
-PHP.Parser.prototype.yyn76 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn77 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(2-2) ]; 
-};
-
-PHP.Parser.prototype.yyn78 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn79 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn80 = function ( attributes ) {
-     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn81 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; 
-};
-
-PHP.Parser.prototype.yyn82 = function ( attributes ) {
-     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn83 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; 
-};
-
-PHP.Parser.prototype.yyn84 = function ( attributes ) {
-     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn85 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; 
-};
-
-PHP.Parser.prototype.yyn86 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn87 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn88 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_DeclareDeclare(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn89 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn90 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-3) ]; 
-};
-
-PHP.Parser.prototype.yyn91 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; 
-};
-
-PHP.Parser.prototype.yyn92 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(5-3) ]; 
-};
-
-PHP.Parser.prototype.yyn93 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn94 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn95 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Case(this.yyastk[ this.stackPos-(4-2) ], this.yyastk[ this.stackPos-(4-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn96 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Case(null, this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn97 = function () {
-    this.yyval = this.yyastk[ this.stackPos ];
-};
-
-PHP.Parser.prototype.yyn98 = function () {
-    this.yyval = this.yyastk[ this.stackPos ];
-};
-
-PHP.Parser.prototype.yyn99 = function ( attributes ) {
-     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn100 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; 
-};
-
-PHP.Parser.prototype.yyn101 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn102 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn103 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_ElseIf(this.yyastk[ this.stackPos-(5-3) ], Array.isArray(this.yyastk[ this.stackPos-(5-5) ]) ? this.yyastk[ this.stackPos-(5-5) ] : [this.yyastk[ this.stackPos-(5-5) ]], attributes); 
-};
-
-PHP.Parser.prototype.yyn104 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn105 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn106 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_ElseIf(this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-6) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn107 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn108 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Else(Array.isArray(this.yyastk[ this.stackPos-(2-2) ]) ? this.yyastk[ this.stackPos-(2-2) ] : [this.yyastk[ this.stackPos-(2-2) ]], attributes); 
-};
-
-PHP.Parser.prototype.yyn109 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn110 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Else(this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn111 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn112 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn113 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn114 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn115 = function ( attributes ) {
-     this.yyval = this.Node_Param(this.yyastk[ this.stackPos-(3-3) ].substring( 1 ), null, this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn116 = function ( attributes ) {
-     this.yyval = this.Node_Param(this.yyastk[ this.stackPos-(5-3) ].substring( 1 ), this.yyastk[ this.stackPos-(5-5) ], this.yyastk[ this.stackPos-(5-1) ], this.yyastk[ this.stackPos-(5-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn117 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn118 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn119 = function ( attributes ) {
-     this.yyval = 'array'; 
-};
-
-PHP.Parser.prototype.yyn120 = function ( attributes ) {
-     this.yyval = 'callable'; 
-};
-
-PHP.Parser.prototype.yyn121 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn122 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn123 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn124 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn125 = function ( attributes ) {
-     this.yyval = this.Node_Arg(this.yyastk[ this.stackPos-(1-1) ], false, attributes); 
-};
-
-PHP.Parser.prototype.yyn126 = function ( attributes ) {
-     this.yyval = this.Node_Arg(this.yyastk[ this.stackPos-(2-2) ], true, attributes); 
-};
-
-PHP.Parser.prototype.yyn127 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn128 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn129 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); 
-};
-
-PHP.Parser.prototype.yyn130 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn131 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn132 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn133 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn134 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_StaticVar(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), null, attributes); 
-};
-
-PHP.Parser.prototype.yyn135 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_StaticVar(this.yyastk[ this.stackPos-(3-1) ].substring( 1 ), this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn136 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn137 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn138 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_Property(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn139 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_ClassConst(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn140 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_ClassMethod(this.yyastk[ this.stackPos-(8-4) ], {'type':  this.yyastk[ this.stackPos-(8-1) ], 'byRef':  this.yyastk[ this.stackPos-(8-3) ], 'params':  this.yyastk[ this.stackPos-(8-6) ], 'stmts':  this.yyastk[ this.stackPos-(8-8) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn141 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_TraitUse(this.yyastk[ this.stackPos-(3-2) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn142 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn143 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn144 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn145 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn146 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_TraitUseAdaptation_Precedence(this.yyastk[ this.stackPos-(4-1) ][0], this.yyastk[ this.stackPos-(4-1) ][1], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn147 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[ this.stackPos-(5-1) ][0], this.yyastk[ this.stackPos-(5-1) ][1], this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn148 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[ this.stackPos-(4-1) ][0], this.yyastk[ this.stackPos-(4-1) ][1], this.yyastk[ this.stackPos-(4-3) ], null, attributes); 
-};
-
-PHP.Parser.prototype.yyn149 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[ this.stackPos-(4-1) ][0], this.yyastk[ this.stackPos-(4-1) ][1], null, this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn150 = function ( attributes ) {
-     this.yyval = array(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ]); 
-};
-
-PHP.Parser.prototype.yyn151 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn152 = function ( attributes ) {
-     this.yyval = array(null, this.yyastk[ this.stackPos-(1-1) ]); 
-};
-
-PHP.Parser.prototype.yyn153 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn154 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn155 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn156 = function ( attributes ) {
-     this.yyval = this.MODIFIER_PUBLIC; 
-};
-
-PHP.Parser.prototype.yyn157 = function ( attributes ) {
-     this.yyval = this.MODIFIER_PUBLIC; 
-};
-
-PHP.Parser.prototype.yyn158 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn159 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn160 = function ( attributes ) {
-     this.Stmt_Class_verifyModifier(this.yyastk[ this.stackPos-(2-1) ], this.yyastk[ this.stackPos-(2-2) ]); this.yyval = this.yyastk[ this.stackPos-(2-1) ] | this.yyastk[ this.stackPos-(2-2) ]; 
-};
-
-PHP.Parser.prototype.yyn161 = function ( attributes ) {
-     this.yyval = this.MODIFIER_PUBLIC; 
-};
-
-PHP.Parser.prototype.yyn162 = function ( attributes ) {
-     this.yyval = this.MODIFIER_PROTECTED; 
-};
-
-PHP.Parser.prototype.yyn163 = function ( attributes ) {
-     this.yyval = this.MODIFIER_PRIVATE; 
-};
-
-PHP.Parser.prototype.yyn164 = function ( attributes ) {
-     this.yyval = this.MODIFIER_STATIC; 
-};
-
-PHP.Parser.prototype.yyn165 = function ( attributes ) {
-     this.yyval = this.MODIFIER_ABSTRACT; 
-};
-
-PHP.Parser.prototype.yyn166 = function ( attributes ) {
-     this.yyval = this.MODIFIER_FINAL; 
-};
-
-PHP.Parser.prototype.yyn167 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn168 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn169 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_PropertyProperty(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), null, attributes); 
-};
-
-PHP.Parser.prototype.yyn170 = function ( attributes ) {
-     this.yyval = this.Node_Stmt_PropertyProperty(this.yyastk[ this.stackPos-(3-1) ].substring( 1 ), this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn171 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn172 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn173 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn174 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn175 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn176 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignList(this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-6) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn177 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Assign(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn178 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignRef(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn179 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignRef(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn180 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn181 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Clone(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn182 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignPlus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn183 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignMinus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn184 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignMul(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn185 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignDiv(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn186 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignConcat(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn187 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignMod(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn188 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignBitwiseAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn189 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignBitwiseOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn190 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignBitwiseXor(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn191 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignShiftLeft(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn192 = function ( attributes ) {
-     this.yyval = this.Node_Expr_AssignShiftRight(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn193 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PostInc(this.yyastk[ this.stackPos-(2-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn194 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PreInc(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn195 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PostDec(this.yyastk[ this.stackPos-(2-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn196 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PreDec(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn197 = function ( attributes ) {
-     this.yyval = this.Node_Expr_BooleanOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn198 = function ( attributes ) {
-     this.yyval = this.Node_Expr_BooleanAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn199 = function ( attributes ) {
-     this.yyval = this.Node_Expr_LogicalOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn200 = function ( attributes ) {
-     this.yyval = this.Node_Expr_LogicalAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn201 = function ( attributes ) {
-     this.yyval = this.Node_Expr_LogicalXor(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn202 = function ( attributes ) {
-     this.yyval = this.Node_Expr_BitwiseOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn203 = function ( attributes ) {
-     this.yyval = this.Node_Expr_BitwiseAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn204 = function ( attributes ) {
-     this.yyval = this.Node_Expr_BitwiseXor(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn205 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Concat(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn206 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Plus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn207 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Minus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn208 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Mul(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn209 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Div(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn210 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Mod(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn211 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ShiftLeft(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn212 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ShiftRight(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn213 = function ( attributes ) {
-     this.yyval = this.Node_Expr_UnaryPlus(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn214 = function ( attributes ) {
-     this.yyval = this.Node_Expr_UnaryMinus(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn215 = function ( attributes ) {
-     this.yyval = this.Node_Expr_BooleanNot(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn216 = function ( attributes ) {
-     this.yyval = this.Node_Expr_BitwiseNot(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn217 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Identical(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn218 = function ( attributes ) {
-     this.yyval = this.Node_Expr_NotIdentical(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn219 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Equal(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn220 = function ( attributes ) {
-     this.yyval = this.Node_Expr_NotEqual(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn221 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Smaller(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn222 = function ( attributes ) {
-     this.yyval = this.Node_Expr_SmallerOrEqual(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn223 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Greater(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn224 = function ( attributes ) {
-     this.yyval = this.Node_Expr_GreaterOrEqual(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn225 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Instanceof(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn226 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn227 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn228 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Ternary(this.yyastk[ this.stackPos-(5-1) ], this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn229 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Ternary(this.yyastk[ this.stackPos-(4-1) ], null, this.yyastk[ this.stackPos-(4-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn230 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Isset(this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn231 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Empty(this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn232 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], "Node_Expr_Include", attributes); 
-};
-
-PHP.Parser.prototype.yyn233 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], "Node_Expr_IncludeOnce", attributes); 
-};
-
-PHP.Parser.prototype.yyn234 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Eval(this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn235 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], "Node_Expr_Require", attributes); 
-};
-
-PHP.Parser.prototype.yyn236 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], "Node_Expr_RequireOnce", attributes); 
-};
-
-PHP.Parser.prototype.yyn237 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Cast_Int(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn238 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Cast_Double(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn239 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Cast_String(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn240 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Cast_Array(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn241 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Cast_Object(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn242 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Cast_Bool(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn243 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Cast_Unset(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn244 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Exit(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn245 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ErrorSuppress(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn246 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn247 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn248 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn249 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ShellExec(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn250 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Print(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn251 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Closure({'static':  false, 'byRef':  this.yyastk[ this.stackPos-(9-2) ], 'params':  this.yyastk[ this.stackPos-(9-4) ], 'uses':  this.yyastk[ this.stackPos-(9-6) ], 'stmts':  this.yyastk[ this.stackPos-(9-8) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn252 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Closure({'static':  true, 'byRef':  this.yyastk[ this.stackPos-(10-3) ], 'params':  this.yyastk[ this.stackPos-(10-5) ], 'uses':  this.yyastk[ this.stackPos-(10-7) ], 'stmts':  this.yyastk[ this.stackPos-(10-9) ]}, attributes); 
-};
-
-PHP.Parser.prototype.yyn253 = function ( attributes ) {
-     this.yyval = this.Node_Expr_New(this.yyastk[ this.stackPos-(3-2) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn254 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn255 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-3) ]; 
-};
-
-PHP.Parser.prototype.yyn256 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn257 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn258 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ClosureUse(this.yyastk[ this.stackPos-(2-2) ].substring( 1 ), this.yyastk[ this.stackPos-(2-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn259 = function ( attributes ) {
-     this.yyval = this.Node_Expr_FuncCall(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn260 = function ( attributes ) {
-     this.yyval = this.Node_Expr_StaticCall(this.yyastk[ this.stackPos-(6-1) ], this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn261 = function ( attributes ) {
-     this.yyval = this.Node_Expr_StaticCall(this.yyastk[ this.stackPos-(8-1) ], this.yyastk[ this.stackPos-(8-4) ], this.yyastk[ this.stackPos-(8-7) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn262 = function ( attributes ) {
-    
-            if (this.yyastk[ this.stackPos-(4-1) ].type === "Node_Expr_StaticPropertyFetch") {
-                this.yyval = this.Node_Expr_StaticCall(this.yyastk[ this.stackPos-(4-1) ].Class, this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-1) ].name, attributes), this.yyastk[ this.stackPos-(4-3) ], attributes);
-            } else if (this.yyastk[ this.stackPos-(4-1) ].type === "Node_Expr_ArrayDimFetch") {
-                var tmp = this.yyastk[ this.stackPos-(4-1) ];
-                while (tmp.variable.type === "Node_Expr_ArrayDimFetch") {
-                    tmp = tmp.variable;
-                }
-
-                this.yyval = this.Node_Expr_StaticCall(tmp.variable.Class, this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes);
-                tmp.variable = this.Node_Expr_Variable(tmp.variable.name, attributes);
-            } else {
-                throw new Exception;
-            }
-          
-};
-
-PHP.Parser.prototype.yyn263 = function ( attributes ) {
-     this.yyval = this.Node_Expr_FuncCall(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn264 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn265 = function ( attributes ) {
-     this.yyval = this.Node_Name('static', attributes); 
-};
-
-PHP.Parser.prototype.yyn266 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn267 = function ( attributes ) {
-     this.yyval = this.Node_Name(this.yyastk[ this.stackPos-(1-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn268 = function ( attributes ) {
-     this.yyval = this.Node_Name_FullyQualified(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn269 = function ( attributes ) {
-     this.yyval = this.Node_Name_Relative(this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn270 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn271 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn272 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn273 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn274 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn275 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn276 = function () {
-    this.yyval = this.yyastk[ this.stackPos ];
-};
-
-PHP.Parser.prototype.yyn277 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn278 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn279 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn280 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn281 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn282 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn283 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn284 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn285 = function ( attributes ) {
-     this.yyval = [this.Scalar_String_parseEscapeSequences(this.yyastk[ this.stackPos-(1-1) ], '`')]; 
-};
-
-PHP.Parser.prototype.yyn286 = function ( attributes ) {
-     ; this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn287 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn288 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn289 = function ( attributes ) {
-     this.yyval = this.Node_Scalar_LNumber(this.Scalar_LNumber_parse(this.yyastk[ this.stackPos-(1-1) ]), attributes); 
-};
-
-PHP.Parser.prototype.yyn290 = function ( attributes ) {
-     this.yyval = this.Node_Scalar_DNumber(this.Scalar_DNumber_parse(this.yyastk[ this.stackPos-(1-1) ]), attributes); 
-};
-
-PHP.Parser.prototype.yyn291 = function ( attributes ) {
-     this.yyval = this.Scalar_String_create(this.yyastk[ this.stackPos-(1-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn292 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_LineConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn293 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_FileConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn294 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_DirConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn295 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_ClassConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn296 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_TraitConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn297 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_MethodConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn298 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_FuncConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn299 = function ( attributes ) {
-     this.yyval = {type: "Node_Scalar_NSConst", attributes: attributes}; 
-};
-
-PHP.Parser.prototype.yyn300 = function ( attributes ) {
-     this.yyval = this.Node_Scalar_String(this.Scalar_String_parseDocString(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-2) ]), attributes); 
-};
-
-PHP.Parser.prototype.yyn301 = function ( attributes ) {
-     this.yyval = this.Node_Scalar_String('', attributes); 
-};
-
-PHP.Parser.prototype.yyn302 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ConstFetch(this.yyastk[ this.stackPos-(1-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn303 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn304 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ClassConstFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn305 = function ( attributes ) {
-     this.yyval = this.Node_Expr_UnaryPlus(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn306 = function ( attributes ) {
-     this.yyval = this.Node_Expr_UnaryMinus(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn307 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn308 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn309 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn310 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ClassConstFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn311 = function ( attributes ) {
-     ; this.yyval = this.Node_Scalar_Encapsed(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn312 = function ( attributes ) {
-     ; this.yyval = this.Node_Scalar_Encapsed(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn313 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn314 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn315 = function () {
-    this.yyval = this.yyastk[ this.stackPos ];
-};
-
-PHP.Parser.prototype.yyn316 = function () {
-    this.yyval = this.yyastk[ this.stackPos ];
-};
-
-PHP.Parser.prototype.yyn317 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn318 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn319 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(3-3) ], this.yyastk[ this.stackPos-(3-1) ], false, attributes); 
-};
-
-PHP.Parser.prototype.yyn320 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(1-1) ], null, false, attributes); 
-};
-
-PHP.Parser.prototype.yyn321 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn322 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn323 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn324 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn325 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(6-2) ], this.yyastk[ this.stackPos-(6-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn326 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn327 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn328 = function ( attributes ) {
-     this.yyval = this.Node_Expr_MethodCall(this.yyastk[ this.stackPos-(6-1) ], this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn329 = function ( attributes ) {
-     this.yyval = this.Node_Expr_FuncCall(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn330 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn331 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn332 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn333 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn334 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn335 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(2-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn336 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn337 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn338 = function ( attributes ) {
-     this.yyval = this.Node_Expr_StaticPropertyFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn339 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn340 = function ( attributes ) {
-     this.yyval = this.Node_Expr_StaticPropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ].substring( 1 ), attributes); 
-};
-
-PHP.Parser.prototype.yyn341 = function ( attributes ) {
-     this.yyval = this.Node_Expr_StaticPropertyFetch(this.yyastk[ this.stackPos-(6-1) ], this.yyastk[ this.stackPos-(6-5) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn342 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn343 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn344 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn345 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn346 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); 
-};
-
-PHP.Parser.prototype.yyn347 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn348 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn349 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn350 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn351 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn352 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn353 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn354 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn355 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; 
-};
-
-PHP.Parser.prototype.yyn356 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(4-3) ]; 
-};
-
-PHP.Parser.prototype.yyn357 = function ( attributes ) {
-     this.yyval = null; 
-};
-
-PHP.Parser.prototype.yyn358 = function ( attributes ) {
-     this.yyval = []; 
-};
-
-PHP.Parser.prototype.yyn359 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn360 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; 
-};
-
-PHP.Parser.prototype.yyn361 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn362 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(3-3) ], this.yyastk[ this.stackPos-(3-1) ], false, attributes); 
-};
-
-PHP.Parser.prototype.yyn363 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(1-1) ], null, false, attributes); 
-};
-
-PHP.Parser.prototype.yyn364 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(4-4) ], this.yyastk[ this.stackPos-(4-1) ], true, attributes); 
-};
-
-PHP.Parser.prototype.yyn365 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(2-2) ], null, true, attributes); 
-};
-
-PHP.Parser.prototype.yyn366 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn367 = function ( attributes ) {
-     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; 
-};
-
-PHP.Parser.prototype.yyn368 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; 
-};
-
-PHP.Parser.prototype.yyn369 = function ( attributes ) {
-     this.yyval = [this.yyastk[ this.stackPos-(2-1) ], this.yyastk[ this.stackPos-(2-2) ]]; 
-};
-
-PHP.Parser.prototype.yyn370 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); 
-};
-
-PHP.Parser.prototype.yyn371 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-1) ].substring( 1 ), attributes), this.yyastk[ this.stackPos-(4-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn372 = function ( attributes ) {
-     this.yyval = this.Node_Expr_PropertyFetch(this.Node_Expr_Variable(this.yyastk[ this.stackPos-(3-1) ].substring( 1 ), attributes), this.yyastk[ this.stackPos-(3-3) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn373 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn374 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(3-2) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn375 = function ( attributes ) {
-     this.yyval = this.Node_Expr_ArrayDimFetch(this.Node_Expr_Variable(this.yyastk[ this.stackPos-(6-2) ], attributes), this.yyastk[ this.stackPos-(6-4) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn376 = function ( attributes ) {
-     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; 
-};
-
-PHP.Parser.prototype.yyn377 = function ( attributes ) {
-     this.yyval = this.Node_Scalar_String(this.yyastk[ this.stackPos-(1-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn378 = function ( attributes ) {
-     this.yyval = this.Node_Scalar_String(this.yyastk[ this.stackPos-(1-1) ], attributes); 
-};
-
-PHP.Parser.prototype.yyn379 = function ( attributes ) {
-     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); 
-};
-
-
-PHP.Parser.prototype.Stmt_Namespace_postprocess = function( a ) {
-  return a;  
-};
-
-
-PHP.Parser.prototype.Node_Stmt_Echo = function() {
-    return {
-        type: "Node_Stmt_Echo",
-        exprs: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_If = function() {
-    return {
-        type: "Node_Stmt_If",
-        cond: arguments[ 0 ],
-        stmts: arguments[ 1 ].stmts,
-        elseifs: arguments[ 1 ].elseifs,
-        Else: arguments[ 1 ].Else || null,
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_For = function() {
-    
-    return {
-        type: "Node_Stmt_For",
-        init: arguments[ 0 ].init,
-        cond: arguments[ 0 ].cond,
-        loop: arguments[ 0 ].loop,
-        stmts: arguments[ 0 ].stmts,
-        attributes: arguments[ 1 ]
-    };   
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Function = function() {
-    return {
-        type: "Node_Stmt_Function",
-        name: arguments[ 0 ],
-        byRef: arguments[ 1 ].byRef,
-        params: arguments[ 1 ].params,
-        stmts: arguments[ 1 ].stmts,
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Stmt_Class_verifyModifier = function() {
-  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Class = function() {
-    return {
-        type: "Node_Stmt_Class",
-        name: arguments[ 0 ],
-        Type: arguments[ 1 ].type,
-        Extends: arguments[ 1 ].Extends,
-        Implements: arguments[ 1 ].Implements,
-        stmts: arguments[ 1 ].stmts,
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_ClassMethod = function() {
-    return {
-        type: "Node_Stmt_ClassMethod",
-        name: arguments[ 0 ],
-        Type: arguments[ 1 ].type,
-        byRef: arguments[ 1 ].byRef,
-        params: arguments[ 1 ].params,
-        stmts: arguments[ 1 ].stmts,
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_ClassConst = function() {
-    return {
-        type: "Node_Stmt_ClassConst",
-        consts: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Interface = function() {
-    return {
-        type: "Node_Stmt_Interface",
-        name: arguments[ 0 ],
-        Extends: arguments[ 1 ].Extends,
-        stmts: arguments[ 1 ].stmts,
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Throw = function() {
-    return {
-        type: "Node_Stmt_Throw",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Catch = function() {
-    return {
-        type: "Node_Stmt_Catch",
-        Type: arguments[ 0 ],
-        variable: arguments[ 1 ],
-        stmts: arguments[ 2 ],
-        attributes: arguments[ 3 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_TryCatch = function() {
-    return {
-        type: "Node_Stmt_TryCatch",
-        stmts: arguments[ 0 ],
-        catches: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_Foreach = function() {
-    return {
-        type: "Node_Stmt_Foreach",
-        expr: arguments[ 0 ],
-        valueVar: arguments[ 1 ],
-        keyVar: arguments[ 2 ].keyVar,
-        byRef: arguments[ 2 ].byRef,
-        stmts: arguments[ 2 ].stmts,
-        attributes: arguments[ 3 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_While = function() {
-    return {
-        type: "Node_Stmt_While",
-        cond: arguments[ 0 ],
-        stmts: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Do = function() {
-    return {
-        type: "Node_Stmt_Do",
-        cond: arguments[ 0 ],
-        stmts: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Break = function() {
-    return {
-        type: "Node_Stmt_Break",
-        num: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Continue = function() {
-    return {
-        type: "Node_Stmt_Continue",
-        num: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Return = function() {
-    return {
-        type: "Node_Stmt_Return",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Case = function() {
-    return {
-        type: "Node_Stmt_Case",
-        cond: arguments[ 0 ],
-        stmts: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Switch = function() {
-    return {
-        type: "Node_Stmt_Switch",
-        cond: arguments[ 0 ],
-        cases: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Else = function() {
-   
-    return {
-        type: "Node_Stmt_Else",
-        stmts: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_ElseIf = function() {
-    return {
-        type: "Node_Stmt_ElseIf",
-        cond: arguments[ 0 ],
-        stmts: arguments[ 1 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_InlineHTML = function() {
-    return {
-        type: "Node_Stmt_InlineHTML",
-        value: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_StaticVar = function() {
-    return {
-        type: "Node_Stmt_StaticVar",
-        name: arguments[ 0 ],
-        def: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_Static = function() {
-    return {
-        type: "Node_Stmt_Static",
-        vars: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Global = function() {
-    return {
-        type: "Node_Stmt_Global",
-        vars: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_PropertyProperty = function() {
-    return {
-        type: "Node_Stmt_PropertyProperty",
-        name: arguments[ 0 ],
-        def: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Stmt_Property = function() {
-    return {
-        type: "Node_Stmt_Property",
-        Type: arguments[ 0 ],
-        props: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Stmt_Unset = function() {
-    return {
-        type: "Node_Stmt_Unset",
-        variables: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Variable = function( a ) {
-    return {
-        type: "Node_Expr_Variable",
-        name: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-};
-
-PHP.Parser.prototype.Node_Expr_FuncCall = function() {
-
-    return {
-        type: "Node_Expr_FuncCall",
-        func: arguments[ 0 ],
-        args: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_MethodCall = function() {
-
-    return {
-        type: "Node_Expr_MethodCall",
-        variable: arguments[ 0 ],
-        name: arguments[ 1 ],
-        args: arguments[ 2 ],
-        attributes: arguments[ 3 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_StaticCall = function() {
-
-    return {
-        type: "Node_Expr_StaticCall",
-        Class: arguments[ 0 ],
-        func: arguments[ 1 ],
-        args: arguments[ 2 ],
-        attributes: arguments[ 3 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Ternary = function() {
-
-    return {
-        type: "Node_Expr_Ternary",
-        cond: arguments[ 0 ],
-        If: arguments[ 1 ],
-        Else: arguments[ 2 ],
-        attributes: arguments[ 3 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignList = function() {
-
-    return {
-        type: "Node_Expr_AssignList",
-        assignList: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Assign = function() {
-
-    return {
-        type: "Node_Expr_Assign",
-        variable: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignConcat = function() {
-
-    return {
-        type: "Node_Expr_AssignConcat",
-        variable: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignMinus = function() {
-
-    return {
-        type: "Node_Expr_AssignMinus",
-        variable: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignPlus = function() {
-
-    return {
-        type: "Node_Expr_AssignPlus",
-        variable: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignDiv = function() {
-
-    return {
-        type: "Node_Expr_AssignDiv",
-        variable: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignRef = function() {
-
-    return {
-        type: "Node_Expr_AssignRef",
-        variable: arguments[ 0 ],
-        refVar: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignMul = function() {
-
-    return {
-        type: "Node_Expr_AssignMul",
-        variable: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_AssignMod = function() {
-
-    return {
-        type: "Node_Expr_AssignMod",
-        variable: arguments[ 0 ],
-        expr: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Plus = function() {
-
-    return {
-        type: "Node_Expr_Plus",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Minus = function() {
-
-    return {
-        type: "Node_Expr_Minus",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Mul = function() {
-
-    return {
-        type: "Node_Expr_Mul",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Div = function() {
-
-    return {
-        type: "Node_Expr_Div",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Mod = function() {
-
-    return {
-        type: "Node_Expr_Mod",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Greater = function() {
-
-    return {
-        type: "Node_Expr_Greater",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Equal = function() {
-
-    return {
-        type: "Node_Expr_Equal",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_NotEqual = function() {
-
-    return {
-        type: "Node_Expr_NotEqual",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Identical = function() {
-
-    return {
-        type: "Node_Expr_Identical",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_NotIdentical = function() {
-
-    return {
-        type: "Node_Expr_NotIdentical",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_GreaterOrEqual = function() {
-
-    return {
-        type: "Node_Expr_GreaterOrEqual",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_SmallerOrEqual = function() {
-
-    return {
-        type: "Node_Expr_SmallerOrEqual",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Concat = function() {
-
-    return {
-        type: "Node_Expr_Concat",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Smaller = function() {
-
-    return {
-        type: "Node_Expr_Smaller",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_PostInc = function() {
-
-    return {
-        type: "Node_Expr_PostInc",
-        variable: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_PostDec = function() {
-
-    return {
-        type: "Node_Expr_PostDec",
-        variable: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_PreInc = function() {
-
-    return {
-        type: "Node_Expr_PreInc",
-        variable: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_PreDec = function() {
-
-    return {
-        type: "Node_Expr_PreDec",
-        variable: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Include = function() {
-    return {
-        expr: arguments[ 0 ],
-        type: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-};
-
-PHP.Parser.prototype.Node_Expr_ArrayDimFetch = function() {
-
-    return {
-        type: "Node_Expr_ArrayDimFetch",
-        variable: arguments[ 0 ],
-        dim: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_StaticPropertyFetch = function() {
-
-    return {
-        type: "Node_Expr_StaticPropertyFetch",
-        Class: arguments[ 0 ],
-        name: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_ClassConstFetch = function() {
-
-    return {
-        type: "Node_Expr_ClassConstFetch",
-        Class: arguments[ 0 ],
-        name: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_StaticPropertyFetch = function() {
-
-    return {
-        type: "Node_Expr_StaticPropertyFetch",
-        Class: arguments[ 0 ],
-        name: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_ConstFetch = function() {
-
-    return {
-        type: "Node_Expr_ConstFetch",
-        name: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_ArrayItem = function() {
-
-    return {
-        type: "Node_Expr_ArrayItem",
-        value: arguments[ 0 ],
-        key: arguments[ 1 ],
-        byRef: arguments[ 2 ],
-        attributes: arguments[ 3 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Array = function() {
-
-    return {
-        type: "Node_Expr_Array",
-        items: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_PropertyFetch = function() {
-
-    return {
-        type: "Node_Expr_PropertyFetch",
-        variable: arguments[ 0 ],
-        name: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_New = function() {
-
-    return {
-        type: "Node_Expr_New",
-        Class: arguments[ 0 ],
-        args: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Print = function() {
-    return {
-        type: "Node_Expr_Print",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Exit = function() {
-    return {
-        type: "Node_Expr_Exit",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Cast_Bool = function() {
-    return {
-        type: "Node_Expr_Cast_Bool",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Cast_Int = function() {
-    return {
-        type: "Node_Expr_Cast_Int",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Cast_String = function() {
-    return {
-        type: "Node_Expr_Cast_String",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Cast_Double = function() {
-    return {
-        type: "Node_Expr_Cast_Double",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Cast_Array = function() {
-    return {
-        type: "Node_Expr_Cast_Array",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Cast_Object = function() {
-    return {
-        type: "Node_Expr_Cast_Object",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_ErrorSuppress = function() {
-    return {
-        type: "Node_Expr_ErrorSuppress",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_Isset = function() {
-    return {
-        type: "Node_Expr_Isset",
-        variables: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-
-
-
-PHP.Parser.prototype.Node_Expr_UnaryMinus = function() {
-    return {
-        type: "Node_Expr_UnaryMinus",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_UnaryPlus = function() {
-    return {
-        type: "Node_Expr_UnaryPlus",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Empty = function() {
-    return {
-        type: "Node_Expr_Empty",
-        variable: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_BooleanOr = function() {
-    return {
-        type: "Node_Expr_BooleanOr",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_LogicalOr = function() {
-    return {
-        type: "Node_Expr_LogicalOr",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_LogicalAnd = function() {
-    return {
-        type: "Node_Expr_LogicalAnd",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-
-PHP.Parser.prototype.Node_Expr_LogicalXor = function() {
-    return {
-        type: "Node_Expr_LogicalXor",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_BitwiseAnd = function() {
-    return {
-        type: "Node_Expr_BitwiseAnd",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_BitwiseOr = function() {
-    return {
-        type: "Node_Expr_BitwiseOr",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_BitwiseNot = function() {
-    return {
-        type: "Node_Expr_BitwiseNot",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_BooleanNot = function() {
-    return {
-        type: "Node_Expr_BooleanNot",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_BooleanAnd = function() {
-    return {
-        type: "Node_Expr_BooleanAnd",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Instanceof = function() {
-
-    return {
-        type: "Node_Expr_Instanceof",
-        left: arguments[ 0 ],
-        right: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };
-
-};
-
-PHP.Parser.prototype.Node_Expr_Clone = function() {
-
-    return {
-        type: "Node_Expr_Clone",
-        expr: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };
-
-};
-
-
-
-PHP.Parser.prototype.Scalar_LNumber_parse = function( a ) {
-   
-    return a;  
-};
-
-PHP.Parser.prototype.Scalar_DNumber_parse = function( a ) {
-   
-    return a;  
-};
-
-PHP.Parser.prototype.Scalar_String_parseDocString = function() {
-    
-    return '"' + arguments[ 1 ].replace(/([^"\\]*(?:\\.[^"\\]*)*)"/g, '$1\\"') + '"';
-};
-
-
-PHP.Parser.prototype.Node_Scalar_String = function( ) {
-   
-    return {
-        type: "Node_Scalar_String",
-        value: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Scalar_String_create = function( ) {
-    return {
-        type: "Node_Scalar_String",
-        value: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-
-};
-
-PHP.Parser.prototype.Node_Scalar_LNumber = function() {
-   
-    return {
-        type: "Node_Scalar_LNumber",
-        value: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-  
-};
-
-
-PHP.Parser.prototype.Node_Scalar_DNumber = function() {
-   
-    return {
-        type: "Node_Scalar_DNumber",
-        value: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-  
-};
-
-
-PHP.Parser.prototype.Node_Scalar_Encapsed = function() {
-   
-    return {
-        type: "Node_Scalar_Encapsed",
-        parts: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-  
-};
-
-PHP.Parser.prototype.Node_Name = function() {
-   
-    return {
-        type: "Node_Name",
-        parts: arguments[ 0 ],
-        attributes: arguments[ 1 ]
-    };  
-  
-};
-
-PHP.Parser.prototype.Node_Param = function() {
-   
-    return {
-        type: "Node_Param",
-        name: arguments[ 0 ],
-        def: arguments[ 1 ],
-        Type: arguments[ 2 ],
-        byRef: arguments[ 3 ],
-        attributes: arguments[ 4 ]
-    };  
-  
-};
-
-PHP.Parser.prototype.Node_Arg = function() {
-   
-    return {
-        type: "Node_Name",
-        value: arguments[ 0 ],
-        byRef: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-  
-};
-
-
-PHP.Parser.prototype.Node_Const = function() {
-   
-    return {
-        type: "Node_Const",
-        name: arguments[ 0 ],
-        value: arguments[ 1 ],
-        attributes: arguments[ 2 ]
-    };  
-  
-};
-
-
-exports.PHP = PHP;
-});
diff --git a/try/ace/worker-xquery.js b/try/ace/worker-xquery.js
deleted file mode 100644
index 8af038f..0000000
--- a/try/ace/worker-xquery.js
+++ /dev/null
@@ -1,21848 +0,0 @@
-"no use strict";
-;(function(window) {
-if (typeof window.window != "undefined" && window.document) {
-    return;
-}
-
-window.console = {
-    log: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    },
-    error: function() {
-        var msgs = Array.prototype.slice.call(arguments, 0);
-        postMessage({type: "log", data: msgs});
-    }
-};
-window.window = window;
-window.ace = window;
-
-window.normalizeModule = function(parentId, moduleName) {
-    if (moduleName.indexOf("!") !== -1) {
-        var chunks = moduleName.split("!");
-        return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]);
-    }
-    if (moduleName.charAt(0) == ".") {
-        var base = parentId.split("/").slice(0, -1).join("/");
-        moduleName = base + "/" + moduleName;
-        
-        while(moduleName.indexOf(".") !== -1 && previous != moduleName) {
-            var previous = moduleName;
-            moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
-        }
-    }
-    
-    return moduleName;
-};
-
-window.require = function(parentId, id) {
-    if (!id) {
-        id = parentId
-        parentId = null;
-    }
-    if (!id.charAt)
-        throw new Error("worker.js require() accepts only (parentId, id) as arguments");
-
-    id = normalizeModule(parentId, id);
-
-    var module = require.modules[id];
-    if (module) {
-        if (!module.initialized) {
-            module.initialized = true;
-            module.exports = module.factory().exports;
-        }
-        return module.exports;
-    }
-    
-    var chunks = id.split("/");
-    chunks[0] = require.tlns[chunks[0]] || chunks[0];
-    var path = chunks.join("/") + ".js";
-    
-    require.id = id;
-    importScripts(path);
-    return require(parentId, id);
-};
-
-require.modules = {};
-require.tlns = {};
-
-window.define = function(id, deps, factory) {
-    if (arguments.length == 2) {
-        factory = deps;
-        if (typeof id != "string") {
-            deps = id;
-            id = require.id;
-        }
-    } else if (arguments.length == 1) {
-        factory = id;
-        id = require.id;
-    }
-
-    if (id.indexOf("text!") === 0) 
-        return;
-    
-    var req = function(deps, factory) {
-        return require(id, deps, factory);
-    };
-
-    require.modules[id] = {
-        factory: function() {
-            var module = {
-                exports: {}
-            };
-            var returnExports = factory(req, module.exports, module);
-            if (returnExports)
-                module.exports = returnExports;
-            return module;
-        }
-    };
-};
-
-window.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {
-    require.tlns = topLevelNamespaces;
-}
-
-window.initSender = function initSender() {
-
-    var EventEmitter = require("ace/lib/event_emitter").EventEmitter;
-    var oop = require("ace/lib/oop");
-    
-    var Sender = function() {};
-    
-    (function() {
-        
-        oop.implement(this, EventEmitter);
-                
-        this.callback = function(data, callbackId) {
-            postMessage({
-                type: "call",
-                id: callbackId,
-                data: data
-            });
-        };
-    
-        this.emit = function(name, data) {
-            postMessage({
-                type: "event",
-                name: name,
-                data: data
-            });
-        };
-        
-    }).call(Sender.prototype);
-    
-    return new Sender();
-}
-
-window.main = null;
-window.sender = null;
-
-window.onmessage = function(e) {
-    var msg = e.data;
-    if (msg.command) {
-        if (main[msg.command])
-            main[msg.command].apply(main, msg.args);
-        else
-            throw new Error("Unknown command:" + msg.command);
-    }
-    else if (msg.init) {        
-        initBaseUrls(msg.tlns);
-        require("ace/lib/es5-shim");
-        sender = initSender();
-        var clazz = require(msg.module)[msg.classname];
-        main = new clazz(sender);
-    } 
-    else if (msg.event && sender) {
-        sender._emit(msg.event, msg.data);
-    }
-};
-})(this);
-
-define('ace/lib/event_emitter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-var EventEmitter = {};
-var stopPropagation = function() { this.propagationStopped = true; };
-var preventDefault = function() { this.defaultPrevented = true; };
-
-EventEmitter._emit =
-EventEmitter._dispatchEvent = function(eventName, e) {
-    this._eventRegistry || (this._eventRegistry = {});
-    this._defaultHandlers || (this._defaultHandlers = {});
-
-    var listeners = this._eventRegistry[eventName] || [];
-    var defaultHandler = this._defaultHandlers[eventName];
-    if (!listeners.length && !defaultHandler)
-        return;
-
-    if (typeof e != "object" || !e)
-        e = {};
-
-    if (!e.type)
-        e.type = eventName;
-    if (!e.stopPropagation)
-        e.stopPropagation = stopPropagation;
-    if (!e.preventDefault)
-        e.preventDefault = preventDefault;
-
-    for (var i=0; i<listeners.length; i++) {
-        listeners[i](e, this);
-        if (e.propagationStopped)
-            break;
-    }
-    
-    if (defaultHandler && !e.defaultPrevented)
-        return defaultHandler(e, this);
-};
-
-
-EventEmitter._signal = function(eventName, e) {
-    var listeners = (this._eventRegistry || {})[eventName];
-    if (!listeners)
-        return;
-
-    for (var i=0; i<listeners.length; i++)
-        listeners[i](e, this);
-};
-
-EventEmitter.once = function(eventName, callback) {
-    var _self = this;
-    callback && this.addEventListener(eventName, function newCallback() {
-        _self.removeEventListener(eventName, newCallback);
-        callback.apply(null, arguments);
-    });
-};
-
-
-EventEmitter.setDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        handlers = this._defaultHandlers = {_disabled_: {}};
-    
-    if (handlers[eventName]) {
-        var old = handlers[eventName];
-        var disabled = handlers._disabled_[eventName];
-        if (!disabled)
-            handlers._disabled_[eventName] = disabled = [];
-        disabled.push(old);
-        var i = disabled.indexOf(callback);
-        if (i != -1) 
-            disabled.splice(i, 1);
-    }
-    handlers[eventName] = callback;
-};
-EventEmitter.removeDefaultHandler = function(eventName, callback) {
-    var handlers = this._defaultHandlers
-    if (!handlers)
-        return;
-    var disabled = handlers._disabled_[eventName];
-    
-    if (handlers[eventName] == callback) {
-        var old = handlers[eventName];
-        if (disabled)
-            this.setDefaultHandler(eventName, disabled.pop());
-    } else if (disabled) {
-        var i = disabled.indexOf(callback);
-        if (i != -1)
-            disabled.splice(i, 1);
-    }
-};
-
-EventEmitter.on =
-EventEmitter.addEventListener = function(eventName, callback, capturing) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        listeners = this._eventRegistry[eventName] = [];
-
-    if (listeners.indexOf(callback) == -1)
-        listeners[capturing ? "unshift" : "push"](callback);
-    return callback;
-};
-
-EventEmitter.off =
-EventEmitter.removeListener =
-EventEmitter.removeEventListener = function(eventName, callback) {
-    this._eventRegistry = this._eventRegistry || {};
-
-    var listeners = this._eventRegistry[eventName];
-    if (!listeners)
-        return;
-
-    var index = listeners.indexOf(callback);
-    if (index !== -1)
-        listeners.splice(index, 1);
-};
-
-EventEmitter.removeAllListeners = function(eventName) {
-    if (this._eventRegistry) this._eventRegistry[eventName] = [];
-};
-
-exports.EventEmitter = EventEmitter;
-
-});
-
-define('ace/lib/oop', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.inherits = (function() {
-    var tempCtor = function() {};
-    return function(ctor, superCtor) {
-        tempCtor.prototype = superCtor.prototype;
-        ctor.super_ = superCtor.prototype;
-        ctor.prototype = new tempCtor();
-        ctor.prototype.constructor = ctor;
-    };
-}());
-
-exports.mixin = function(obj, mixin) {
-    for (var key in mixin) {
-        obj[key] = mixin[key];
-    }
-    return obj;
-};
-
-exports.implement = function(proto, mixin) {
-    exports.mixin(proto, mixin);
-};
-
-});
-
-define('ace/lib/es5-shim', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-function Empty() {}
-
-if (!Function.prototype.bind) {
-    Function.prototype.bind = function bind(that) { // .length is 1
-        var target = this;
-        if (typeof target != "function") {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
-        }
-        var args = slice.call(arguments, 1); // for normal call
-        var bound = function () {
-
-            if (this instanceof bound) {
-
-                var result = target.apply(
-                    this,
-                    args.concat(slice.call(arguments))
-                );
-                if (Object(result) === result) {
-                    return result;
-                }
-                return this;
-
-            } else {
-                return target.apply(
-                    that,
-                    args.concat(slice.call(arguments))
-                );
-
-            }
-
-        };
-        if(target.prototype) {
-            Empty.prototype = target.prototype;
-            bound.prototype = new Empty();
-            Empty.prototype = null;
-        }
-        return bound;
-    };
-}
-var call = Function.prototype.call;
-var prototypeOfArray = Array.prototype;
-var prototypeOfObject = Object.prototype;
-var slice = prototypeOfArray.slice;
-var _toString = call.bind(prototypeOfObject.toString);
-var owns = call.bind(prototypeOfObject.hasOwnProperty);
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
-    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
-    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
-    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
-    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
-}
-if ([1,2].splice(0).length != 2) {
-    if(function() { // test IE < 9 to splice bug - see issue #138
-        function makeArray(l) {
-            var a = new Array(l+2);
-            a[0] = a[1] = 0;
-            return a;
-        }
-        var array = [], lengthBefore;
-        
-        array.splice.apply(array, makeArray(20));
-        array.splice.apply(array, makeArray(26));
-
-        lengthBefore = array.length; //46
-        array.splice(5, 0, "XXX"); // add one element
-
-        lengthBefore + 1 == array.length
-
-        if (lengthBefore + 1 == array.length) {
-            return true;// has right splice implementation without bugs
-        }
-    }()) {//IE 6/7
-        var array_splice = Array.prototype.splice;
-        Array.prototype.splice = function(start, deleteCount) {
-            if (!arguments.length) {
-                return [];
-            } else {
-                return array_splice.apply(this, [
-                    start === void 0 ? 0 : start,
-                    deleteCount === void 0 ? (this.length - start) : deleteCount
-                ].concat(slice.call(arguments, 2)))
-            }
-        };
-    } else {//IE8
-        Array.prototype.splice = function(pos, removeCount){
-            var length = this.length;
-            if (pos > 0) {
-                if (pos > length)
-                    pos = length;
-            } else if (pos == void 0) {
-                pos = 0;
-            } else if (pos < 0) {
-                pos = Math.max(length + pos, 0);
-            }
-
-            if (!(pos+removeCount < length))
-                removeCount = length - pos;
-
-            var removed = this.slice(pos, pos+removeCount);
-            var insert = slice.call(arguments, 2);
-            var add = insert.length;            
-            if (pos === length) {
-                if (add) {
-                    this.push.apply(this, insert);
-                }
-            } else {
-                var remove = Math.min(removeCount, length - pos);
-                var tailOldPos = pos + remove;
-                var tailNewPos = tailOldPos + add - remove;
-                var tailCount = length - tailOldPos;
-                var lengthAfterRemove = length - remove;
-
-                if (tailNewPos < tailOldPos) { // case A
-                    for (var i = 0; i < tailCount; ++i) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } else if (tailNewPos > tailOldPos) { // case B
-                    for (i = tailCount; i--; ) {
-                        this[tailNewPos+i] = this[tailOldPos+i];
-                    }
-                } // else, add == remove (nothing to do)
-
-                if (add && pos === lengthAfterRemove) {
-                    this.length = lengthAfterRemove; // truncate array
-                    this.push.apply(this, insert);
-                } else {
-                    this.length = lengthAfterRemove + add; // reserves space
-                    for (i = 0; i < add; ++i) {
-                        this[pos+i] = insert[i];
-                    }
-                }
-            }
-            return removed;
-        };
-    }
-}
-if (!Array.isArray) {
-    Array.isArray = function isArray(obj) {
-        return _toString(obj) == "[object Array]";
-    };
-}
-var boxedString = Object("a"),
-    splitString = boxedString[0] != "a" || !(0 in boxedString);
-
-if (!Array.prototype.forEach) {
-    Array.prototype.forEach = function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(); // TODO message
-        }
-
-        while (++i < length) {
-            if (i in self) {
-                fun.call(thisp, self[i], i, object);
-            }
-        }
-    };
-}
-if (!Array.prototype.map) {
-    Array.prototype.map = function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self)
-                result[i] = fun.call(thisp, self[i], i, object);
-        }
-        return result;
-    };
-}
-if (!Array.prototype.filter) {
-    Array.prototype.filter = function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                    object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self) {
-                value = self[i];
-                if (fun.call(thisp, value, i, object)) {
-                    result.push(value);
-                }
-            }
-        }
-        return result;
-    };
-}
-if (!Array.prototype.every) {
-    Array.prototype.every = function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
-                return false;
-            }
-        }
-        return true;
-    };
-}
-if (!Array.prototype.some) {
-    Array.prototype.some = function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-
-        for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
-                return true;
-            }
-        }
-        return false;
-    };
-}
-if (!Array.prototype.reduce) {
-    Array.prototype.reduce = function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduce of empty array with no initial value");
-        }
-
-        var i = 0;
-        var result;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i++];
-                    break;
-                }
-                if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        for (; i < length; i++) {
-            if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        }
-
-        return result;
-    };
-}
-if (!Array.prototype.reduceRight) {
-    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                object,
-            length = self.length >>> 0;
-        if (_toString(fun) != "[object Function]") {
-            throw new TypeError(fun + " is not a function");
-        }
-        if (!length && arguments.length == 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
-        }
-
-        var result, i = length - 1;
-        if (arguments.length >= 2) {
-            result = arguments[1];
-        } else {
-            do {
-                if (i in self) {
-                    result = self[i--];
-                    break;
-                }
-                if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
-                }
-            } while (true);
-        }
-
-        do {
-            if (i in this) {
-                result = fun.call(void 0, result, self[i], i, object);
-            }
-        } while (i--);
-
-        return result;
-    };
-}
-if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
-    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-
-        var i = 0;
-        if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
-        }
-        i = i >= 0 ? i : Math.max(0, length + i);
-        for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
-    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && _toString(this) == "[object String]" ?
-                this.split("") :
-                toObject(this),
-            length = self.length >>> 0;
-
-        if (!length) {
-            return -1;
-        }
-        var i = length - 1;
-        if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
-        }
-        i = i >= 0 ? i : length - Math.abs(i);
-        for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
-                return i;
-            }
-        }
-        return -1;
-    };
-}
-if (!Object.getPrototypeOf) {
-    Object.getPrototypeOf = function getPrototypeOf(object) {
-        return object.__proto__ || (
-            object.constructor ?
-            object.constructor.prototype :
-            prototypeOfObject
-        );
-    };
-}
-if (!Object.getOwnPropertyDescriptor) {
-    var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
-                         "non-object: ";
-    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT + object);
-        if (!owns(object, property))
-            return;
-
-        var descriptor, getter, setter;
-        descriptor =  { enumerable: true, configurable: true };
-        if (supportsAccessors) {
-            var prototype = object.__proto__;
-            object.__proto__ = prototypeOfObject;
-
-            var getter = lookupGetter(object, property);
-            var setter = lookupSetter(object, property);
-            object.__proto__ = prototype;
-
-            if (getter || setter) {
-                if (getter) descriptor.get = getter;
-                if (setter) descriptor.set = setter;
-                return descriptor;
-            }
-        }
-        descriptor.value = object[property];
-        return descriptor;
-    };
-}
-if (!Object.getOwnPropertyNames) {
-    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
-        return Object.keys(object);
-    };
-}
-if (!Object.create) {
-    var createEmpty;
-    if (Object.prototype.__proto__ === null) {
-        createEmpty = function () {
-            return { "__proto__": null };
-        };
-    } else {
-        createEmpty = function () {
-            var empty = {};
-            for (var i in empty)
-                empty[i] = null;
-            empty.constructor =
-            empty.hasOwnProperty =
-            empty.propertyIsEnumerable =
-            empty.isPrototypeOf =
-            empty.toLocaleString =
-            empty.toString =
-            empty.valueOf =
-            empty.__proto__ = null;
-            return empty;
-        }
-    }
-
-    Object.create = function create(prototype, properties) {
-        var object;
-        if (prototype === null) {
-            object = createEmpty();
-        } else {
-            if (typeof prototype != "object")
-                throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
-            var Type = function () {};
-            Type.prototype = prototype;
-            object = new Type();
-            object.__proto__ = prototype;
-        }
-        if (properties !== void 0)
-            Object.defineProperties(object, properties);
-        return object;
-    };
-}
-
-function doesDefinePropertyWork(object) {
-    try {
-        Object.defineProperty(object, "sentinel", {});
-        return "sentinel" in object;
-    } catch (exception) {
-    }
-}
-if (Object.defineProperty) {
-    var definePropertyWorksOnObject = doesDefinePropertyWork({});
-    var definePropertyWorksOnDom = typeof document == "undefined" ||
-        doesDefinePropertyWork(document.createElement("div"));
-    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
-        var definePropertyFallback = Object.defineProperty;
-    }
-}
-
-if (!Object.defineProperty || definePropertyFallback) {
-    var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
-    var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
-    var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
-                                      "on this javascript engine";
-
-    Object.defineProperty = function defineProperty(object, property, descriptor) {
-        if ((typeof object != "object" && typeof object != "function") || object === null)
-            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
-        if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
-            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
-        if (definePropertyFallback) {
-            try {
-                return definePropertyFallback.call(Object, object, property, descriptor);
-            } catch (exception) {
-            }
-        }
-        if (owns(descriptor, "value")) {
-
-            if (supportsAccessors && (lookupGetter(object, property) ||
-                                      lookupSetter(object, property)))
-            {
-                var prototype = object.__proto__;
-                object.__proto__ = prototypeOfObject;
-                delete object[property];
-                object[property] = descriptor.value;
-                object.__proto__ = prototype;
-            } else {
-                object[property] = descriptor.value;
-            }
-        } else {
-            if (!supportsAccessors)
-                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
-            if (owns(descriptor, "get"))
-                defineGetter(object, property, descriptor.get);
-            if (owns(descriptor, "set"))
-                defineSetter(object, property, descriptor.set);
-        }
-
-        return object;
-    };
-}
-if (!Object.defineProperties) {
-    Object.defineProperties = function defineProperties(object, properties) {
-        for (var property in properties) {
-            if (owns(properties, property))
-                Object.defineProperty(object, property, properties[property]);
-        }
-        return object;
-    };
-}
-if (!Object.seal) {
-    Object.seal = function seal(object) {
-        return object;
-    };
-}
-if (!Object.freeze) {
-    Object.freeze = function freeze(object) {
-        return object;
-    };
-}
-try {
-    Object.freeze(function () {});
-} catch (exception) {
-    Object.freeze = (function freeze(freezeObject) {
-        return function freeze(object) {
-            if (typeof object == "function") {
-                return object;
-            } else {
-                return freezeObject(object);
-            }
-        };
-    })(Object.freeze);
-}
-if (!Object.preventExtensions) {
-    Object.preventExtensions = function preventExtensions(object) {
-        return object;
-    };
-}
-if (!Object.isSealed) {
-    Object.isSealed = function isSealed(object) {
-        return false;
-    };
-}
-if (!Object.isFrozen) {
-    Object.isFrozen = function isFrozen(object) {
-        return false;
-    };
-}
-if (!Object.isExtensible) {
-    Object.isExtensible = function isExtensible(object) {
-        if (Object(object) === object) {
-            throw new TypeError(); // TODO message
-        }
-        var name = '';
-        while (owns(object, name)) {
-            name += '?';
-        }
-        object[name] = true;
-        var returnValue = owns(object, name);
-        delete object[name];
-        return returnValue;
-    };
-}
-if (!Object.keys) {
-    var hasDontEnumBug = true,
-        dontEnums = [
-            "toString",
-            "toLocaleString",
-            "valueOf",
-            "hasOwnProperty",
-            "isPrototypeOf",
-            "propertyIsEnumerable",
-            "constructor"
-        ],
-        dontEnumsLength = dontEnums.length;
-
-    for (var key in {"toString": null}) {
-        hasDontEnumBug = false;
-    }
-
-    Object.keys = function keys(object) {
-
-        if (
-            (typeof object != "object" && typeof object != "function") ||
-            object === null
-        ) {
-            throw new TypeError("Object.keys called on a non-object");
-        }
-
-        var keys = [];
-        for (var name in object) {
-            if (owns(object, name)) {
-                keys.push(name);
-            }
-        }
-
-        if (hasDontEnumBug) {
-            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
-                var dontEnum = dontEnums[i];
-                if (owns(object, dontEnum)) {
-                    keys.push(dontEnum);
-                }
-            }
-        }
-        return keys;
-    };
-
-}
-if (!Date.now) {
-    Date.now = function now() {
-        return new Date().getTime();
-    };
-}
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
-if (!String.prototype.trim || ws.trim()) {
-    ws = "[" + ws + "]";
-    var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
-        trimEndRegexp = new RegExp(ws + ws + "*$");
-    String.prototype.trim = function trim() {
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
-    };
-}
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
-    var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
-
-function toPrimitive(input) {
-    var val, valueOf, toString;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (typeof valueOf === "function") {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    toString = input.toString;
-    if (typeof toString === "function") {
-        val = toString.call(input);
-        if (isPrimitive(val)) {
-            return val;
-        }
-    }
-    throw new TypeError();
-}
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert "+o+" to object");
-    }
-    return Object(o);
-};
-
-});
- 
-define('ace/mode/xquery_worker', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/worker/mirror', 'ace/mode/xquery/JSONParseTreeHandler', 'ace/mode/xquery/XQueryParser', 'ace/mode/xquery/visitors/SemanticHighlighter'], function(require, exports, module) {
-
-    
-var oop = require("../lib/oop");
-var Mirror = require("../worker/mirror").Mirror;
-var JSONParseTreeHandler  = require("./xquery/JSONParseTreeHandler").JSONParseTreeHandler;
-var XQueryParser  = require("./xquery/XQueryParser").XQueryParser;
-var SemanticHighlighter = require("./xquery/visitors/SemanticHighlighter").SemanticHighlighter;
-
-var XQueryWorker = exports.XQueryWorker = function(sender) {
-    Mirror.call(this, sender);
-    this.setTimeout(200);
-};
-
-oop.inherits(XQueryWorker, Mirror);
-
-(function() {
-    
-  this.onUpdate = function() {
-    this.sender.emit("start");
-    var value = this.doc.getValue();    
-    var h = new JSONParseTreeHandler(value);
-    var parser = new XQueryParser(value, h);
-    try {
-      parser.parse_XQuery();
-      this.sender.emit("ok");
-      var ast = h.getParseTree();
-      var highlighter = new SemanticHighlighter(ast, value);
-      var tokens = highlighter.getTokens();
-      this.sender.emit("highlight", { tokens: tokens, lines: highlighter.lines });
-    } catch(e) {
-      if(e instanceof parser.ParseException) {
-        var prefix = value.substring(0, e.getBegin());
-        var line = prefix.split("\n").length;
-        var column = e.getBegin() - prefix.lastIndexOf("\n");
-        var message = parser.getErrorMessage(e);
-        this.sender.emit("error", {
-          row: line - 1,
-          column: column,
-          text: message,
-          type: "error"
-        });
-      } else {
-        throw e;
-      }
-    }
- };
-    
-}).call(XQueryWorker.prototype);
-
-});
-define('ace/worker/mirror', ['require', 'exports', 'module' , 'ace/document', 'ace/lib/lang'], function(require, exports, module) {
-
-
-var Document = require("../document").Document;
-var lang = require("../lib/lang");
-    
-var Mirror = exports.Mirror = function(sender) {
-    this.sender = sender;
-    var doc = this.doc = new Document("");
-    
-    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
-    
-    var _self = this;
-    sender.on("change", function(e) {
-        doc.applyDeltas(e.data);
-        deferredUpdate.schedule(_self.$timeout);
-    });
-};
-
-(function() {
-    
-    this.$timeout = 500;
-    
-    this.setTimeout = function(timeout) {
-        this.$timeout = timeout;
-    };
-    
-    this.setValue = function(value) {
-        this.doc.setValue(value);
-        this.deferredUpdate.schedule(this.$timeout);
-    };
-    
-    this.getValue = function(callbackId) {
-        this.sender.callback(this.doc.getValue(), callbackId);
-    };
-    
-    this.onUpdate = function() {
-    };
-    
-}).call(Mirror.prototype);
-
-});
-
-define('ace/document', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/range', 'ace/anchor'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-var Range = require("./range").Range;
-var Anchor = require("./anchor").Anchor;
-
-var Document = function(text) {
-    this.$lines = [];
-    if (text.length == 0) {
-        this.$lines = [""];
-    } else if (Array.isArray(text)) {
-        this._insertLines(0, text);
-    } else {
-        this.insert({row: 0, column:0}, text);
-    }
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-    this.setValue = function(text) {
-        var len = this.getLength();
-        this.remove(new Range(0, 0, len, this.getLine(len-1).length));
-        this.insert({row: 0, column:0}, text);
-    };
-    this.getValue = function() {
-        return this.getAllLines().join(this.getNewLineCharacter());
-    };
-    this.createAnchor = function(row, column) {
-        return new Anchor(this, row, column);
-    };
-    if ("aaa".split(/a/).length == 0)
-        this.$split = function(text) {
-            return text.replace(/\r\n|\r/g, "\n").split("\n");
-        }
-    else
-        this.$split = function(text) {
-            return text.split(/\r\n|\r|\n/);
-        };
-
-
-    this.$detectNewLine = function(text) {
-        var match = text.match(/^.*?(\r\n|\r|\n)/m);
-        this.$autoNewLine = match ? match[1] : "\n";
-    };
-    this.getNewLineCharacter = function() {
-        switch (this.$newLineMode) {
-          case "windows":
-            return "\r\n";
-          case "unix":
-            return "\n";
-          default:
-            return this.$autoNewLine;
-        }
-    };
-
-    this.$autoNewLine = "\n";
-    this.$newLineMode = "auto";
-    this.setNewLineMode = function(newLineMode) {
-        if (this.$newLineMode === newLineMode)
-            return;
-
-        this.$newLineMode = newLineMode;
-    };
-    this.getNewLineMode = function() {
-        return this.$newLineMode;
-    };
-    this.isNewLine = function(text) {
-        return (text == "\r\n" || text == "\r" || text == "\n");
-    };
-    this.getLine = function(row) {
-        return this.$lines[row] || "";
-    };
-    this.getLines = function(firstRow, lastRow) {
-        return this.$lines.slice(firstRow, lastRow + 1);
-    };
-    this.getAllLines = function() {
-        return this.getLines(0, this.getLength());
-    };
-    this.getLength = function() {
-        return this.$lines.length;
-    };
-    this.getTextRange = function(range) {
-        if (range.start.row == range.end.row) {
-            return this.$lines[range.start.row]
-                .substring(range.start.column, range.end.column);
-        }
-        var lines = this.getLines(range.start.row, range.end.row);
-        lines[0] = (lines[0] || "").substring(range.start.column);
-        var l = lines.length - 1;
-        if (range.end.row - range.start.row == l)
-            lines[l] = lines[l].substring(0, range.end.column);
-        return lines.join(this.getNewLineCharacter());
-    };
-
-    this.$clipPosition = function(position) {
-        var length = this.getLength();
-        if (position.row >= length) {
-            position.row = Math.max(0, length - 1);
-            position.column = this.getLine(length-1).length;
-        } else if (position.row < 0)
-            position.row = 0;
-        return position;
-    };
-    this.insert = function(position, text) {
-        if (!text || text.length === 0)
-            return position;
-
-        position = this.$clipPosition(position);
-        if (this.getLength() <= 1)
-            this.$detectNewLine(text);
-
-        var lines = this.$split(text);
-        var firstLine = lines.splice(0, 1)[0];
-        var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0];
-
-        position = this.insertInLine(position, firstLine);
-        if (lastLine !== null) {
-            position = this.insertNewLine(position); // terminate first line
-            position = this._insertLines(position.row, lines);
-            position = this.insertInLine(position, lastLine || "");
-        }
-        return position;
-    };
-    this.insertLines = function(row, lines) {
-        if (row >= this.getLength())
-            return this.insert({row: row, column: 0}, "\n" + lines.join("\n"));
-        return this._insertLines(Math.max(row, 0), lines);
-    };
-    this._insertLines = function(row, lines) {
-        if (lines.length == 0)
-            return {row: row, column: 0};
-        if (lines.length > 0xFFFF) {
-            var end = this._insertLines(row, lines.slice(0xFFFF));
-            lines = lines.slice(0, 0xFFFF);
-        }
-
-        var args = [row, 0];
-        args.push.apply(args, lines);
-        this.$lines.splice.apply(this.$lines, args);
-
-        var range = new Range(row, 0, row + lines.length, 0);
-        var delta = {
-            action: "insertLines",
-            range: range,
-            lines: lines
-        };
-        this._emit("change", { data: delta });
-        return end || range.end;
-    };
-    this.insertNewLine = function(position) {
-        position = this.$clipPosition(position);
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column);
-        this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length));
-
-        var end = {
-            row : position.row + 1,
-            column : 0
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.insertInLine = function(position, text) {
-        if (text.length == 0)
-            return position;
-
-        var line = this.$lines[position.row] || "";
-
-        this.$lines[position.row] = line.substring(0, position.column) + text
-                + line.substring(position.column);
-
-        var end = {
-            row : position.row,
-            column : position.column + text.length
-        };
-
-        var delta = {
-            action: "insertText",
-            range: Range.fromPoints(position, end),
-            text: text
-        };
-        this._emit("change", { data: delta });
-
-        return end;
-    };
-    this.remove = function(range) {
-        range.start = this.$clipPosition(range.start);
-        range.end = this.$clipPosition(range.end);
-
-        if (range.isEmpty())
-            return range.start;
-
-        var firstRow = range.start.row;
-        var lastRow = range.end.row;
-
-        if (range.isMultiLine()) {
-            var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1;
-            var lastFullRow = lastRow - 1;
-
-            if (range.end.column > 0)
-                this.removeInLine(lastRow, 0, range.end.column);
-
-            if (lastFullRow >= firstFullRow)
-                this._removeLines(firstFullRow, lastFullRow);
-
-            if (firstFullRow != firstRow) {
-                this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length);
-                this.removeNewLine(range.start.row);
-            }
-        }
-        else {
-            this.removeInLine(firstRow, range.start.column, range.end.column);
-        }
-        return range.start;
-    };
-    this.removeInLine = function(row, startColumn, endColumn) {
-        if (startColumn == endColumn)
-            return;
-
-        var range = new Range(row, startColumn, row, endColumn);
-        var line = this.getLine(row);
-        var removed = line.substring(startColumn, endColumn);
-        var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length);
-        this.$lines.splice(row, 1, newLine);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: removed
-        };
-        this._emit("change", { data: delta });
-        return range.start;
-    };
-    this.removeLines = function(firstRow, lastRow) {
-        if (firstRow < 0 || lastRow >= this.getLength())
-            return this.remove(new Range(firstRow, 0, lastRow + 1, 0));
-        return this._removeLines(firstRow, lastRow);
-    };
-
-    this._removeLines = function(firstRow, lastRow) {
-        var range = new Range(firstRow, 0, lastRow + 1, 0);
-        var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1);
-
-        var delta = {
-            action: "removeLines",
-            range: range,
-            nl: this.getNewLineCharacter(),
-            lines: removed
-        };
-        this._emit("change", { data: delta });
-        return removed;
-    };
-    this.removeNewLine = function(row) {
-        var firstLine = this.getLine(row);
-        var secondLine = this.getLine(row+1);
-
-        var range = new Range(row, firstLine.length, row+1, 0);
-        var line = firstLine + secondLine;
-
-        this.$lines.splice(row, 2, line);
-
-        var delta = {
-            action: "removeText",
-            range: range,
-            text: this.getNewLineCharacter()
-        };
-        this._emit("change", { data: delta });
-    };
-    this.replace = function(range, text) {
-        if (text.length == 0 && range.isEmpty())
-            return range.start;
-        if (text == this.getTextRange(range))
-            return range.end;
-
-        this.remove(range);
-        if (text) {
-            var end = this.insert(range.start, text);
-        }
-        else {
-            end = range.start;
-        }
-
-        return end;
-    };
-    this.applyDeltas = function(deltas) {
-        for (var i=0; i<deltas.length; i++) {
-            var delta = deltas[i];
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this.insertLines(range.start.row, delta.lines);
-            else if (delta.action == "insertText")
-                this.insert(range.start, delta.text);
-            else if (delta.action == "removeLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "removeText")
-                this.remove(range);
-        }
-    };
-    this.revertDeltas = function(deltas) {
-        for (var i=deltas.length-1; i>=0; i--) {
-            var delta = deltas[i];
-
-            var range = Range.fromPoints(delta.range.start, delta.range.end);
-
-            if (delta.action == "insertLines")
-                this._removeLines(range.start.row, range.end.row - 1);
-            else if (delta.action == "insertText")
-                this.remove(range);
-            else if (delta.action == "removeLines")
-                this._insertLines(range.start.row, delta.lines);
-            else if (delta.action == "removeText")
-                this.insert(range.start, delta.text);
-        }
-    };
-    this.indexToPosition = function(index, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        for (var i = startRow || 0, l = lines.length; i < l; i++) {
-            index -= lines[i].length + newlineLength;
-            if (index < 0)
-                return {row: i, column: index + lines[i].length + newlineLength};
-        }
-        return {row: l-1, column: lines[l-1].length};
-    };
-    this.positionToIndex = function(pos, startRow) {
-        var lines = this.$lines || this.getAllLines();
-        var newlineLength = this.getNewLineCharacter().length;
-        var index = 0;
-        var row = Math.min(pos.row, lines.length);
-        for (var i = startRow || 0; i < row; ++i)
-            index += lines[i].length + newlineLength;
-
-        return index + pos.column;
-    };
-
-}).call(Document.prototype);
-
-exports.Document = Document;
-});
-
-define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-var comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-var Range = function(startRow, startColumn, endRow, endColumn) {
-    this.start = {
-        row: startRow,
-        column: startColumn
-    };
-
-    this.end = {
-        row: endRow,
-        column: endColumn
-    };
-};
-
-(function() {
-    this.isEqual = function(range) {
-        return this.start.row === range.start.row &&
-            this.end.row === range.end.row &&
-            this.start.column === range.start.column &&
-            this.end.column === range.end.column;
-    };
-    this.toString = function() {
-        return ("Range: [" + this.start.row + "/" + this.start.column +
-            "] -> [" + this.end.row + "/" + this.end.column + "]");
-    };
-
-    this.contains = function(row, column) {
-        return this.compare(row, column) == 0;
-    };
-    this.compareRange = function(range) {
-        var cmp,
-            end = range.end,
-            start = range.start;
-
-        cmp = this.compare(end.row, end.column);
-        if (cmp == 1) {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == 1) {
-                return 2;
-            } else if (cmp == 0) {
-                return 1;
-            } else {
-                return 0;
-            }
-        } else if (cmp == -1) {
-            return -2;
-        } else {
-            cmp = this.compare(start.row, start.column);
-            if (cmp == -1) {
-                return -1;
-            } else if (cmp == 1) {
-                return 42;
-            } else {
-                return 0;
-            }
-        }
-    };
-    this.comparePoint = function(p) {
-        return this.compare(p.row, p.column);
-    };
-    this.containsRange = function(range) {
-        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
-    };
-    this.intersects = function(range) {
-        var cmp = this.compareRange(range);
-        return (cmp == -1 || cmp == 0 || cmp == 1);
-    };
-    this.isEnd = function(row, column) {
-        return this.end.row == row && this.end.column == column;
-    };
-    this.isStart = function(row, column) {
-        return this.start.row == row && this.start.column == column;
-    };
-    this.setStart = function(row, column) {
-        if (typeof row == "object") {
-            this.start.column = row.column;
-            this.start.row = row.row;
-        } else {
-            this.start.row = row;
-            this.start.column = column;
-        }
-    };
-    this.setEnd = function(row, column) {
-        if (typeof row == "object") {
-            this.end.column = row.column;
-            this.end.row = row.row;
-        } else {
-            this.end.row = row;
-            this.end.column = column;
-        }
-    };
-    this.inside = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column) || this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideStart = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isEnd(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.insideEnd = function(row, column) {
-        if (this.compare(row, column) == 0) {
-            if (this.isStart(row, column)) {
-                return false;
-            } else {
-                return true;
-            }
-        }
-        return false;
-    };
-    this.compare = function(row, column) {
-        if (!this.isMultiLine()) {
-            if (row === this.start.row) {
-                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
-            };
-        }
-
-        if (row < this.start.row)
-            return -1;
-
-        if (row > this.end.row)
-            return 1;
-
-        if (this.start.row === row)
-            return column >= this.start.column ? 0 : -1;
-
-        if (this.end.row === row)
-            return column <= this.end.column ? 0 : 1;
-
-        return 0;
-    };
-    this.compareStart = function(row, column) {
-        if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareEnd = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.compareInside = function(row, column) {
-        if (this.end.row == row && this.end.column == column) {
-            return 1;
-        } else if (this.start.row == row && this.start.column == column) {
-            return -1;
-        } else {
-            return this.compare(row, column);
-        }
-    };
-    this.clipRows = function(firstRow, lastRow) {
-        if (this.end.row > lastRow)
-            var end = {row: lastRow + 1, column: 0};
-        else if (this.end.row < firstRow)
-            var end = {row: firstRow, column: 0};
-
-        if (this.start.row > lastRow)
-            var start = {row: lastRow + 1, column: 0};
-        else if (this.start.row < firstRow)
-            var start = {row: firstRow, column: 0};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-    this.extend = function(row, column) {
-        var cmp = this.compare(row, column);
-
-        if (cmp == 0)
-            return this;
-        else if (cmp == -1)
-            var start = {row: row, column: column};
-        else
-            var end = {row: row, column: column};
-
-        return Range.fromPoints(start || this.start, end || this.end);
-    };
-
-    this.isEmpty = function() {
-        return (this.start.row === this.end.row && this.start.column === this.end.column);
-    };
-    this.isMultiLine = function() {
-        return (this.start.row !== this.end.row);
-    };
-    this.clone = function() {
-        return Range.fromPoints(this.start, this.end);
-    };
-    this.collapseRows = function() {
-        if (this.end.column == 0)
-            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)
-        else
-            return new Range(this.start.row, 0, this.end.row, 0)
-    };
-    this.toScreenRange = function(session) {
-        var screenPosStart = session.documentToScreenPosition(this.start);
-        var screenPosEnd = session.documentToScreenPosition(this.end);
-
-        return new Range(
-            screenPosStart.row, screenPosStart.column,
-            screenPosEnd.row, screenPosEnd.column
-        );
-    };
-    this.moveBy = function(row, column) {
-        this.start.row += row;
-        this.start.column += column;
-        this.end.row += row;
-        this.end.column += column;
-    };
-
-}).call(Range.prototype);
-Range.fromPoints = function(start, end) {
-    return new Range(start.row, start.column, end.row, end.column);
-};
-Range.comparePoints = comparePoints;
-
-Range.comparePoints = function(p1, p2) {
-    return p1.row - p2.row || p1.column - p2.column;
-};
-
-
-exports.Range = Range;
-});
-
-define('ace/anchor', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) {
-
-
-var oop = require("./lib/oop");
-var EventEmitter = require("./lib/event_emitter").EventEmitter;
-
-var Anchor = exports.Anchor = function(doc, row, column) {
-    this.document = doc;
-
-    if (typeof column == "undefined")
-        this.setPosition(row.row, row.column);
-    else
-        this.setPosition(row, column);
-
-    this.$onChange = this.onChange.bind(this);
-    doc.on("change", this.$onChange);
-};
-
-(function() {
-
-    oop.implement(this, EventEmitter);
-
-    this.getPosition = function() {
-        return this.$clipPositionToDocument(this.row, this.column);
-    };
-
-    this.getDocument = function() {
-        return this.document;
-    };
-
-    this.onChange = function(e) {
-        var delta = e.data;
-        var range = delta.range;
-
-        if (range.start.row == range.end.row && range.start.row != this.row)
-            return;
-
-        if (range.start.row > this.row)
-            return;
-
-        if (range.start.row == this.row && range.start.column > this.column)
-            return;
-
-        var row = this.row;
-        var column = this.column;
-        var start = range.start;
-        var end = range.end;
-
-        if (delta.action === "insertText") {
-            if (start.row === row && start.column <= column) {
-                if (start.row === end.row) {
-                    column += end.column - start.column;
-                } else {
-                    column -= start.column;
-                    row += end.row - start.row;
-                }
-            } else if (start.row !== end.row && start.row < row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "insertLines") {
-            if (start.row <= row) {
-                row += end.row - start.row;
-            }
-        } else if (delta.action === "removeText") {
-            if (start.row === row && start.column < column) {
-                if (end.column >= column)
-                    column = start.column;
-                else
-                    column = Math.max(0, column - (end.column - start.column));
-
-            } else if (start.row !== end.row && start.row < row) {
-                if (end.row === row)
-                    column = Math.max(0, column - end.column) + start.column;
-                row -= (end.row - start.row);
-            } else if (end.row === row) {
-                row -= end.row - start.row;
-                column = Math.max(0, column - end.column) + start.column;
-            }
-        } else if (delta.action == "removeLines") {
-            if (start.row <= row) {
-                if (end.row <= row)
-                    row -= end.row - start.row;
-                else {
-                    row = start.row;
-                    column = 0;
-                }
-            }
-        }
-
-        this.setPosition(row, column, true);
-    };
-
-    this.setPosition = function(row, column, noClip) {
-        var pos;
-        if (noClip) {
-            pos = {
-                row: row,
-                column: column
-            };
-        } else {
-            pos = this.$clipPositionToDocument(row, column);
-        }
-
-        if (this.row == pos.row && this.column == pos.column)
-            return;
-
-        var old = {
-            row: this.row,
-            column: this.column
-        };
-
-        this.row = pos.row;
-        this.column = pos.column;
-        this._emit("change", {
-            old: old,
-            value: pos
-        });
-    };
-
-    this.detach = function() {
-        this.document.removeEventListener("change", this.$onChange);
-    };
-    this.$clipPositionToDocument = function(row, column) {
-        var pos = {};
-
-        if (row >= this.document.getLength()) {
-            pos.row = Math.max(0, this.document.getLength() - 1);
-            pos.column = this.document.getLine(pos.row).length;
-        }
-        else if (row < 0) {
-            pos.row = 0;
-            pos.column = 0;
-        }
-        else {
-            pos.row = row;
-            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
-        }
-
-        if (column < 0)
-            pos.column = 0;
-
-        return pos;
-    };
-
-}).call(Anchor.prototype);
-
-});
-
-define('ace/lib/lang', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-
-exports.stringReverse = function(string) {
-    return string.split("").reverse().join("");
-};
-
-exports.stringRepeat = function (string, count) {
-    var result = '';
-    while (count > 0) {
-        if (count & 1)
-            result += string;
-
-        if (count >>= 1)
-            string += string;
-    }
-    return result;
-};
-
-var trimBeginRegexp = /^\s\s*/;
-var trimEndRegexp = /\s\s*$/;
-
-exports.stringTrimLeft = function (string) {
-    return string.replace(trimBeginRegexp, '');
-};
-
-exports.stringTrimRight = function (string) {
-    return string.replace(trimEndRegexp, '');
-};
-
-exports.copyObject = function(obj) {
-    var copy = {};
-    for (var key in obj) {
-        copy[key] = obj[key];
-    }
-    return copy;
-};
-
-exports.copyArray = function(array){
-    var copy = [];
-    for (var i=0, l=array.length; i<l; i++) {
-        if (array[i] && typeof array[i] == "object")
-            copy[i] = this.copyObject( array[i] );
-        else 
-            copy[i] = array[i];
-    }
-    return copy;
-};
-
-exports.deepCopy = function (obj) {
-    if (typeof obj != "object") {
-        return obj;
-    }
-    
-    var copy = obj.constructor();
-    for (var key in obj) {
-        if (typeof obj[key] == "object") {
-            copy[key] = this.deepCopy(obj[key]);
-        } else {
-            copy[key] = obj[key];
-        }
-    }
-    return copy;
-};
-
-exports.arrayToMap = function(arr) {
-    var map = {};
-    for (var i=0; i<arr.length; i++) {
-        map[arr[i]] = 1;
-    }
-    return map;
-
-};
-
-exports.createMap = function(props) {
-    var map = Object.create(null);
-    for (var i in props) {
-        map[i] = props[i];
-    }
-    return map;
-};
-exports.arrayRemove = function(array, value) {
-  for (var i = 0; i <= array.length; i++) {
-    if (value === array[i]) {
-      array.splice(i, 1);
-    }
-  }
-};
-
-exports.escapeRegExp = function(str) {
-    return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-};
-
-exports.escapeHTML = function(str) {
-    return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
-};
-
-exports.getMatchOffsets = function(string, regExp) {
-    var matches = [];
-
-    string.replace(regExp, function(str) {
-        matches.push({
-            offset: arguments[arguments.length-2],
-            length: str.length
-        });
-    });
-
-    return matches;
-};
-exports.deferredCall = function(fcn) {
-
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var deferred = function(timeout) {
-        deferred.cancel();
-        timer = setTimeout(callback, timeout || 0);
-        return deferred;
-    };
-
-    deferred.schedule = deferred;
-
-    deferred.call = function() {
-        this.cancel();
-        fcn();
-        return deferred;
-    };
-
-    deferred.cancel = function() {
-        clearTimeout(timer);
-        timer = null;
-        return deferred;
-    };
-
-    return deferred;
-};
-
-
-exports.delayedCall = function(fcn, defaultTimeout) {
-    var timer = null;
-    var callback = function() {
-        timer = null;
-        fcn();
-    };
-
-    var _self = function(timeout) {
-        timer && clearTimeout(timer);
-        timer = setTimeout(callback, timeout || defaultTimeout);
-    };
-
-    _self.delay = _self;
-    _self.schedule = function(timeout) {
-        if (timer == null)
-            timer = setTimeout(callback, timeout || 0);
-    };
-
-    _self.call = function() {
-        this.cancel();
-        fcn();
-    };
-
-    _self.cancel = function() {
-        timer && clearTimeout(timer);
-        timer = null;
-    };
-
-    _self.isPending = function() {
-        return timer;
-    };
-
-    return _self;
-};
-});
- 
-define('ace/mode/xquery/JSONParseTreeHandler', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-  var JSONParseTreeHandler = exports.JSONParseTreeHandler = function(code) {
-    var list = [
-        "OrExpr", "AndExpr", "ComparisonExpr", "StringConcatExpr", "RangeExpr"
-        , "UnionExpr", "IntersectExceptExpr", "InstanceofExpr", "TreatExpr", "CastableExpr"
-        , "CastExpr", "UnaryExpr", "ValueExpr", "FTContainsExpr", "SimpleMapExpr", "PathExpr", "RelativePathExpr"
-        , "PostfixExpr", "StepExpr"
-    ];
-    
-    var ast = null;
-    var ptr = null;
-    var remains = code;
-    var cursor = 0;
-    var lineCursor = 0;
-    var line = 0;
-    var col = 0;
-
-    function createNode(name){
-      return { name: name, children: [], getParent: null, pos: { sl: 0, sc: 0, el: 0, ec: 0 } };
-    }
-  
-    function pushNode(name, begin){
-      var node = createNode(name);
-      if(ast === null) {
-        ast = node;
-        ptr = node;
-      } else {
-        node.getParent = ptr;
-        ptr.children.push(node);
-        ptr = ptr.children[ptr.children.length - 1];
-      }
-    }
-    
-    function popNode(){
-     
-      if(ptr.children.length > 0) {
-        var s = ptr.children[0];
-        var e = null;
-        for(var i= ptr.children.length - 1; i >= 0;i--) {
-          e = ptr.children[i];
-          if(e.pos.el !== 0 || e.pos.ec !== 0) {
-            break;
-          }
-        }
-        ptr.pos.sl = s.pos.sl;
-        ptr.pos.sc = s.pos.sc;
-        ptr.pos.el = e.pos.el;
-        ptr.pos.ec = e.pos.ec;
-      }
-      if(ptr.name === "FunctionName") {
-        ptr.name = "EQName";  
-      }
-      if(ptr.name === "EQName" && ptr.value === undefined) {
-        ptr.value = ptr.children[0].value;
-        ptr.children.pop();
-      }
-      
-      if(ptr.getParent !== null) {
-        ptr = ptr.getParent;
-      } else {
-      }
-      if(ptr.children.length > 0) {
-        var lastChild = ptr.children[ptr.children.length - 1];
-        if(lastChild.children.length === 1 && list.indexOf(lastChild.name) !== -1) {
-          ptr.children[ptr.children.length - 1] = lastChild.children[0];
-        }
-      }
-    }
-    
-    this.closeParseTree = function() {
-      while(ptr.getParent !== null) {
-        popNode();
-      }
-      popNode();
-    };
-
-    this.peek = function() {
-      return ptr;    
-    };
-    
-    this.getParseTree = function() {
-      return ast;
-    };
- 
-    this.reset = function(input) {};
-
-    this.startNonterminal = function(name, begin) {
-      pushNode(name, begin);
-    };
-
-    this.endNonterminal = function(name, end) {
-      popNode();
-    };
-
-    this.terminal = function(name, begin, end) {
-      name = (name.substring(0, 1) === "'" && name.substring(name.length - 1) === "'") ? "TOKEN" : name;
-      pushNode(name, begin); 
-      setValue(ptr, begin, end);
-      popNode();
-    };
-
-    this.whitespace = function(begin, end) {
-      var name = "WS";
-      pushNode(name, begin);
-      setValue(ptr, begin, end);
-      popNode();
-    };
-
-    function setValue(node, begin, end) {
-      
-      var e = end - cursor;
-      ptr.value = remains.substring(0, e); 
-      remains = remains.substring(e);
-      cursor = end;
-      
-      var sl = line;
-      var sc = lineCursor;
-      var el = sl + ptr.value.split("\n").length - 1;
-      var lastIdx = ptr.value.lastIndexOf("\n");
-      var ec = lastIdx === -1 ? sc + ptr.value.length : ptr.value.substring(lastIdx + 1).length;
-      
-      line = el;
-      lineCursor = ec;
-
-      ptr.pos.sl = sl; 
-      ptr.pos.sc = sc; 
-      ptr.pos.el = el; 
-      ptr.pos.ec = ec; 
-    } 
-  };
-});
-
-                                                            define('ace/mode/xquery/XQueryParser', ['require', 'exports', 'module' ], function(require, exports, module) {
-                                                            var XQueryParser = exports.XQueryParser = function XQueryParser(string, parsingEventHandler)
-                                                            {
-                                                              init(string, parsingEventHandler);
-  var self = this;
-
-  this.ParseException = function(b, e, s, o, x)
-  {
-    var
-      begin = b,
-      end = e,
-      state = s,
-      offending = o,
-      expected = x;
-
-    this.getBegin = function() {return begin;};
-    this.getEnd = function() {return end;};
-    this.getState = function() {return state;};
-    this.getExpected = function() {return expected;};
-    this.getOffending = function() {return offending;};
-
-    this.getMessage = function()
-    {
-      return offending < 0 ? "lexical analysis failed" : "syntax error";
-    };
-  };
-
-  function init(string, parsingEventHandler)
-  {
-    eventHandler = parsingEventHandler;
-    input = string;
-    size = string.length;
-    reset(0, 0, 0);
-  }
-
-  this.getInput = function()
-  {
-    return input;
-  };
-
-  function reset(l, b, e)
-  {
-                 b0 = b; e0 = b;
-    l1 = l; b1 = b; e1 = e;
-    l2 = 0;
-    end = e;
-    ex = -1;
-    memo = {};
-    eventHandler.reset(input);
-  }
-
-  this.getOffendingToken = function(e)
-  {
-    var o = e.getOffending();
-    return o >= 0 ? XQueryParser.TOKEN[o] : null;
-  };
-
-  this.getExpectedTokenSet = function(e)
-  {
-    var expected;
-    if (e.getExpected() < 0)
-    {
-      expected = XQueryParser.getTokenSet(- e.getState());
-    }
-    else
-    {
-      expected = [XQueryParser.TOKEN[e.getExpected()]];
-    }
-    return expected;
-  };
-
-  this.getErrorMessage = function(e)
-  {
-    var tokenSet = this.getExpectedTokenSet(e);
-    var found = this.getOffendingToken(e);
-    var prefix = input.substring(0, e.getBegin());
-    var lines = prefix.split("\n");
-    var line = lines.length;
-    var column = lines[line - 1].length + 1;
-    var size = e.getEnd() - e.getBegin();
-    return e.getMessage()
-         + (found == null ? "" : ", found " + found)
-         + "\nwhile expecting "
-         + (tokenSet.length == 1 ? tokenSet[0] : ("[" + tokenSet.join(", ") + "]"))
-         + "\n"
-         + (size == 0 || found != null ? "" : "after successfully scanning " + size + " characters beginning ")
-         + "at line " + line + ", column " + column + ":\n..."
-         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))
-         + "...";
-  };
-
-  this.parse_XQuery = function()
-  {
-    eventHandler.startNonterminal("XQuery", e0);
-    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Module();
-    shift(25);                      // EOF
-    eventHandler.endNonterminal("XQuery", e0);
-  };
-
-  function parse_Module()
-  {
-    eventHandler.startNonterminal("Module", e0);
-    switch (l1)
-    {
-    case 274:                       // 'xquery'
-      lookahead2W(199);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 64274                 // 'xquery' 'encoding'
-     || lk == 134930)               // 'xquery' 'version'
-    {
-      parse_VersionDecl();
-    }
-    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    switch (l1)
-    {
-    case 182:                       // 'module'
-      lookahead2W(194);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 94390:                     // 'module' 'namespace'
-      whitespace();
-      parse_LibraryModule();
-      break;
-    default:
-      whitespace();
-      parse_MainModule();
-    }
-    eventHandler.endNonterminal("Module", e0);
-  }
-
-  function parse_VersionDecl()
-  {
-    eventHandler.startNonterminal("VersionDecl", e0);
-    shift(274);                     // 'xquery'
-    lookahead1W(116);               // S^WS | '(:' | 'encoding' | 'version'
-    switch (l1)
-    {
-    case 125:                       // 'encoding'
-      shift(125);                   // 'encoding'
-      lookahead1W(17);              // StringLiteral | S^WS | '(:'
-      shift(11);                    // StringLiteral
-      break;
-    default:
-      shift(263);                   // 'version'
-      lookahead1W(17);              // StringLiteral | S^WS | '(:'
-      shift(11);                    // StringLiteral
-      lookahead1W(109);             // S^WS | '(:' | ';' | 'encoding'
-      if (l1 == 125)                // 'encoding'
-      {
-        shift(125);                 // 'encoding'
-        lookahead1W(17);            // StringLiteral | S^WS | '(:'
-        shift(11);                  // StringLiteral
-      }
-    }
-    lookahead1W(28);                // S^WS | '(:' | ';'
-    whitespace();
-    parse_Separator();
-    eventHandler.endNonterminal("VersionDecl", e0);
-  }
-
-  function parse_LibraryModule()
-  {
-    eventHandler.startNonterminal("LibraryModule", e0);
-    parse_ModuleDecl();
-    lookahead1W(138);               // S^WS | EOF | '(:' | 'declare' | 'import'
-    whitespace();
-    parse_Prolog();
-    eventHandler.endNonterminal("LibraryModule", e0);
-  }
-
-  function parse_ModuleDecl()
-  {
-    eventHandler.startNonterminal("ModuleDecl", e0);
-    shift(182);                     // 'module'
-    lookahead1W(61);                // S^WS | '(:' | 'namespace'
-    shift(184);                     // 'namespace'
-    lookahead1W(247);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_NCName();
-    lookahead1W(29);                // S^WS | '(:' | '='
-    shift(60);                      // '='
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    lookahead1W(28);                // S^WS | '(:' | ';'
-    whitespace();
-    parse_Separator();
-    eventHandler.endNonterminal("ModuleDecl", e0);
-  }
-
-  function parse_Prolog()
-  {
-    eventHandler.startNonterminal("Prolog", e0);
-    for (;;)
-    {
-      lookahead1W(268);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 108:                     // 'declare'
-        lookahead2W(213);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      case 153:                     // 'import'
-        lookahead2W(201);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 42604               // 'declare' 'base-uri'
-       && lk != 43628               // 'declare' 'boundary-space'
-       && lk != 50284               // 'declare' 'construction'
-       && lk != 53356               // 'declare' 'copy-namespaces'
-       && lk != 54380               // 'declare' 'decimal-format'
-       && lk != 55916               // 'declare' 'default'
-       && lk != 72300               // 'declare' 'ft-option'
-       && lk != 93337               // 'import' 'module'
-       && lk != 94316               // 'declare' 'namespace'
-       && lk != 104044              // 'declare' 'ordering'
-       && lk != 113772              // 'declare' 'revalidation'
-       && lk != 115353)             // 'import' 'schema'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 108:                     // 'declare'
-        lookahead2W(178);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk == 55916)              // 'declare' 'default'
-      {
-        lk = memoized(0, e0);
-        if (lk == 0)
-        {
-          var b0A = b0; var e0A = e0; var l1A = l1;
-          var b1A = b1; var e1A = e1; var l2A = l2;
-          var b2A = b2; var e2A = e2;
-          try
-          {
-            try_DefaultNamespaceDecl();
-            lk = -1;
-          }
-          catch (p1A)
-          {
-            lk = -2;
-          }
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(0, e0, lk);
-        }
-      }
-      switch (lk)
-      {
-      case -1:
-        whitespace();
-        parse_DefaultNamespaceDecl();
-        break;
-      case 94316:                   // 'declare' 'namespace'
-        whitespace();
-        parse_NamespaceDecl();
-        break;
-      case 153:                     // 'import'
-        whitespace();
-        parse_Import();
-        break;
-      case 72300:                   // 'declare' 'ft-option'
-        whitespace();
-        parse_FTOptionDecl();
-        break;
-      default:
-        whitespace();
-        parse_Setter();
-      }
-      lookahead1W(28);              // S^WS | '(:' | ';'
-      whitespace();
-      parse_Separator();
-    }
-    for (;;)
-    {
-      lookahead1W(268);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 108:                     // 'declare'
-        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 16492               // 'declare' '%'
-       && lk != 48748               // 'declare' 'collection'
-       && lk != 51820               // 'declare' 'context'
-       && lk != 74348               // 'declare' 'function'
-       && lk != 79468               // 'declare' 'index'
-       && lk != 82540               // 'declare' 'integrity'
-       && lk != 101996              // 'declare' 'option'
-       && lk != 131692              // 'declare' 'updating'
-       && lk != 134252)             // 'declare' 'variable'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 108:                     // 'declare'
-        lookahead2W(175);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |
-        break;
-      default:
-        lk = l1;
-      }
-      switch (lk)
-      {
-      case 51820:                   // 'declare' 'context'
-        whitespace();
-        parse_ContextItemDecl();
-        break;
-      case 101996:                  // 'declare' 'option'
-        whitespace();
-        parse_OptionDecl();
-        break;
-      default:
-        whitespace();
-        parse_AnnotatedDecl();
-      }
-      lookahead1W(28);              // S^WS | '(:' | ';'
-      whitespace();
-      parse_Separator();
-    }
-    eventHandler.endNonterminal("Prolog", e0);
-  }
-
-  function parse_Separator()
-  {
-    eventHandler.startNonterminal("Separator", e0);
-    shift(53);                      // ';'
-    eventHandler.endNonterminal("Separator", e0);
-  }
-
-  function parse_Setter()
-  {
-    eventHandler.startNonterminal("Setter", e0);
-    switch (l1)
-    {
-    case 108:                       // 'declare'
-      lookahead2W(172);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 55916)                // 'declare' 'default'
-    {
-      lk = memoized(1, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_DefaultCollationDecl();
-          lk = -2;
-        }
-        catch (p2A)
-        {
-          try
-          {
-            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-            b2 = b2A; e2 = e2A; end = e2A; }}
-            try_EmptyOrderDecl();
-            lk = -6;
-          }
-          catch (p6A)
-          {
-            lk = -9;
-          }
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(1, e0, lk);
-      }
-    }
-    switch (lk)
-    {
-    case 43628:                     // 'declare' 'boundary-space'
-      parse_BoundarySpaceDecl();
-      break;
-    case -2:
-      parse_DefaultCollationDecl();
-      break;
-    case 42604:                     // 'declare' 'base-uri'
-      parse_BaseURIDecl();
-      break;
-    case 50284:                     // 'declare' 'construction'
-      parse_ConstructionDecl();
-      break;
-    case 104044:                    // 'declare' 'ordering'
-      parse_OrderingModeDecl();
-      break;
-    case -6:
-      parse_EmptyOrderDecl();
-      break;
-    case 113772:                    // 'declare' 'revalidation'
-      parse_RevalidationDecl();
-      break;
-    case 53356:                     // 'declare' 'copy-namespaces'
-      parse_CopyNamespacesDecl();
-      break;
-    default:
-      parse_DecimalFormatDecl();
-    }
-    eventHandler.endNonterminal("Setter", e0);
-  }
-
-  function parse_BoundarySpaceDecl()
-  {
-    eventHandler.startNonterminal("BoundarySpaceDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(33);                // S^WS | '(:' | 'boundary-space'
-    shift(85);                      // 'boundary-space'
-    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'
-    switch (l1)
-    {
-    case 214:                       // 'preserve'
-      shift(214);                   // 'preserve'
-      break;
-    default:
-      shift(241);                   // 'strip'
-    }
-    eventHandler.endNonterminal("BoundarySpaceDecl", e0);
-  }
-
-  function parse_DefaultCollationDecl()
-  {
-    eventHandler.startNonterminal("DefaultCollationDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(46);                // S^WS | '(:' | 'default'
-    shift(109);                     // 'default'
-    lookahead1W(38);                // S^WS | '(:' | 'collation'
-    shift(94);                      // 'collation'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    eventHandler.endNonterminal("DefaultCollationDecl", e0);
-  }
-
-  function try_DefaultCollationDecl()
-  {
-    shiftT(108);                    // 'declare'
-    lookahead1W(46);                // S^WS | '(:' | 'default'
-    shiftT(109);                    // 'default'
-    lookahead1W(38);                // S^WS | '(:' | 'collation'
-    shiftT(94);                     // 'collation'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shiftT(7);                      // URILiteral
-  }
-
-  function parse_BaseURIDecl()
-  {
-    eventHandler.startNonterminal("BaseURIDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(32);                // S^WS | '(:' | 'base-uri'
-    shift(83);                      // 'base-uri'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    eventHandler.endNonterminal("BaseURIDecl", e0);
-  }
-
-  function parse_ConstructionDecl()
-  {
-    eventHandler.startNonterminal("ConstructionDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(41);                // S^WS | '(:' | 'construction'
-    shift(98);                      // 'construction'
-    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'
-    switch (l1)
-    {
-    case 241:                       // 'strip'
-      shift(241);                   // 'strip'
-      break;
-    default:
-      shift(214);                   // 'preserve'
-    }
-    eventHandler.endNonterminal("ConstructionDecl", e0);
-  }
-
-  function parse_OrderingModeDecl()
-  {
-    eventHandler.startNonterminal("OrderingModeDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(68);                // S^WS | '(:' | 'ordering'
-    shift(203);                     // 'ordering'
-    lookahead1W(131);               // S^WS | '(:' | 'ordered' | 'unordered'
-    switch (l1)
-    {
-    case 202:                       // 'ordered'
-      shift(202);                   // 'ordered'
-      break;
-    default:
-      shift(256);                   // 'unordered'
-    }
-    eventHandler.endNonterminal("OrderingModeDecl", e0);
-  }
-
-  function parse_EmptyOrderDecl()
-  {
-    eventHandler.startNonterminal("EmptyOrderDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(46);                // S^WS | '(:' | 'default'
-    shift(109);                     // 'default'
-    lookahead1W(67);                // S^WS | '(:' | 'order'
-    shift(201);                     // 'order'
-    lookahead1W(49);                // S^WS | '(:' | 'empty'
-    shift(123);                     // 'empty'
-    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'
-    switch (l1)
-    {
-    case 147:                       // 'greatest'
-      shift(147);                   // 'greatest'
-      break;
-    default:
-      shift(173);                   // 'least'
-    }
-    eventHandler.endNonterminal("EmptyOrderDecl", e0);
-  }
-
-  function try_EmptyOrderDecl()
-  {
-    shiftT(108);                    // 'declare'
-    lookahead1W(46);                // S^WS | '(:' | 'default'
-    shiftT(109);                    // 'default'
-    lookahead1W(67);                // S^WS | '(:' | 'order'
-    shiftT(201);                    // 'order'
-    lookahead1W(49);                // S^WS | '(:' | 'empty'
-    shiftT(123);                    // 'empty'
-    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'
-    switch (l1)
-    {
-    case 147:                       // 'greatest'
-      shiftT(147);                  // 'greatest'
-      break;
-    default:
-      shiftT(173);                  // 'least'
-    }
-  }
-
-  function parse_CopyNamespacesDecl()
-  {
-    eventHandler.startNonterminal("CopyNamespacesDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(44);                // S^WS | '(:' | 'copy-namespaces'
-    shift(104);                     // 'copy-namespaces'
-    lookahead1W(128);               // S^WS | '(:' | 'no-preserve' | 'preserve'
-    whitespace();
-    parse_PreserveMode();
-    lookahead1W(25);                // S^WS | '(:' | ','
-    shift(41);                      // ','
-    lookahead1W(123);               // S^WS | '(:' | 'inherit' | 'no-inherit'
-    whitespace();
-    parse_InheritMode();
-    eventHandler.endNonterminal("CopyNamespacesDecl", e0);
-  }
-
-  function parse_PreserveMode()
-  {
-    eventHandler.startNonterminal("PreserveMode", e0);
-    switch (l1)
-    {
-    case 214:                       // 'preserve'
-      shift(214);                   // 'preserve'
-      break;
-    default:
-      shift(190);                   // 'no-preserve'
-    }
-    eventHandler.endNonterminal("PreserveMode", e0);
-  }
-
-  function parse_InheritMode()
-  {
-    eventHandler.startNonterminal("InheritMode", e0);
-    switch (l1)
-    {
-    case 157:                       // 'inherit'
-      shift(157);                   // 'inherit'
-      break;
-    default:
-      shift(189);                   // 'no-inherit'
-    }
-    eventHandler.endNonterminal("InheritMode", e0);
-  }
-
-  function parse_DecimalFormatDecl()
-  {
-    eventHandler.startNonterminal("DecimalFormatDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(114);               // S^WS | '(:' | 'decimal-format' | 'default'
-    switch (l1)
-    {
-    case 106:                       // 'decimal-format'
-      shift(106);                   // 'decimal-format'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_EQName();
-      break;
-    default:
-      shift(109);                   // 'default'
-      lookahead1W(45);              // S^WS | '(:' | 'decimal-format'
-      shift(106);                   // 'decimal-format'
-    }
-    for (;;)
-    {
-      lookahead1W(180);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |
-      if (l1 == 53)                 // ';'
-      {
-        break;
-      }
-      whitespace();
-      parse_DFPropertyName();
-      lookahead1W(29);              // S^WS | '(:' | '='
-      shift(60);                    // '='
-      lookahead1W(17);              // StringLiteral | S^WS | '(:'
-      shift(11);                    // StringLiteral
-    }
-    eventHandler.endNonterminal("DecimalFormatDecl", e0);
-  }
-
-  function parse_DFPropertyName()
-  {
-    eventHandler.startNonterminal("DFPropertyName", e0);
-    switch (l1)
-    {
-    case 107:                       // 'decimal-separator'
-      shift(107);                   // 'decimal-separator'
-      break;
-    case 149:                       // 'grouping-separator'
-      shift(149);                   // 'grouping-separator'
-      break;
-    case 156:                       // 'infinity'
-      shift(156);                   // 'infinity'
-      break;
-    case 179:                       // 'minus-sign'
-      shift(179);                   // 'minus-sign'
-      break;
-    case 67:                        // 'NaN'
-      shift(67);                    // 'NaN'
-      break;
-    case 209:                       // 'percent'
-      shift(209);                   // 'percent'
-      break;
-    case 208:                       // 'per-mille'
-      shift(208);                   // 'per-mille'
-      break;
-    case 275:                       // 'zero-digit'
-      shift(275);                   // 'zero-digit'
-      break;
-    case 116:                       // 'digit'
-      shift(116);                   // 'digit'
-      break;
-    default:
-      shift(207);                   // 'pattern-separator'
-    }
-    eventHandler.endNonterminal("DFPropertyName", e0);
-  }
-
-  function parse_Import()
-  {
-    eventHandler.startNonterminal("Import", e0);
-    switch (l1)
-    {
-    case 153:                       // 'import'
-      lookahead2W(126);             // S^WS | '(:' | 'module' | 'schema'
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 115353:                    // 'import' 'schema'
-      parse_SchemaImport();
-      break;
-    default:
-      parse_ModuleImport();
-    }
-    eventHandler.endNonterminal("Import", e0);
-  }
-
-  function parse_SchemaImport()
-  {
-    eventHandler.startNonterminal("SchemaImport", e0);
-    shift(153);                     // 'import'
-    lookahead1W(73);                // S^WS | '(:' | 'schema'
-    shift(225);                     // 'schema'
-    lookahead1W(137);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'
-    if (l1 != 7)                    // URILiteral
-    {
-      whitespace();
-      parse_SchemaPrefix();
-    }
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'
-    if (l1 == 81)                   // 'at'
-    {
-      shift(81);                    // 'at'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shift(7);                     // URILiteral
-      for (;;)
-      {
-        lookahead1W(103);           // S^WS | '(:' | ',' | ';'
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shift(41);                  // ','
-        lookahead1W(15);            // URILiteral | S^WS | '(:'
-        shift(7);                   // URILiteral
-      }
-    }
-    eventHandler.endNonterminal("SchemaImport", e0);
-  }
-
-  function parse_SchemaPrefix()
-  {
-    eventHandler.startNonterminal("SchemaPrefix", e0);
-    switch (l1)
-    {
-    case 184:                       // 'namespace'
-      shift(184);                   // 'namespace'
-      lookahead1W(247);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_NCName();
-      lookahead1W(29);              // S^WS | '(:' | '='
-      shift(60);                    // '='
-      break;
-    default:
-      shift(109);                   // 'default'
-      lookahead1W(47);              // S^WS | '(:' | 'element'
-      shift(121);                   // 'element'
-      lookahead1W(61);              // S^WS | '(:' | 'namespace'
-      shift(184);                   // 'namespace'
-    }
-    eventHandler.endNonterminal("SchemaPrefix", e0);
-  }
-
-  function parse_ModuleImport()
-  {
-    eventHandler.startNonterminal("ModuleImport", e0);
-    shift(153);                     // 'import'
-    lookahead1W(60);                // S^WS | '(:' | 'module'
-    shift(182);                     // 'module'
-    lookahead1W(90);                // URILiteral | S^WS | '(:' | 'namespace'
-    if (l1 == 184)                  // 'namespace'
-    {
-      shift(184);                   // 'namespace'
-      lookahead1W(247);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_NCName();
-      lookahead1W(29);              // S^WS | '(:' | '='
-      shift(60);                    // '='
-    }
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'
-    if (l1 == 81)                   // 'at'
-    {
-      shift(81);                    // 'at'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shift(7);                     // URILiteral
-      for (;;)
-      {
-        lookahead1W(103);           // S^WS | '(:' | ',' | ';'
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shift(41);                  // ','
-        lookahead1W(15);            // URILiteral | S^WS | '(:'
-        shift(7);                   // URILiteral
-      }
-    }
-    eventHandler.endNonterminal("ModuleImport", e0);
-  }
-
-  function parse_NamespaceDecl()
-  {
-    eventHandler.startNonterminal("NamespaceDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(61);                // S^WS | '(:' | 'namespace'
-    shift(184);                     // 'namespace'
-    lookahead1W(247);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_NCName();
-    lookahead1W(29);                // S^WS | '(:' | '='
-    shift(60);                      // '='
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    eventHandler.endNonterminal("NamespaceDecl", e0);
-  }
-
-  function parse_DefaultNamespaceDecl()
-  {
-    eventHandler.startNonterminal("DefaultNamespaceDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(46);                // S^WS | '(:' | 'default'
-    shift(109);                     // 'default'
-    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'
-    switch (l1)
-    {
-    case 121:                       // 'element'
-      shift(121);                   // 'element'
-      break;
-    default:
-      shift(145);                   // 'function'
-    }
-    lookahead1W(61);                // S^WS | '(:' | 'namespace'
-    shift(184);                     // 'namespace'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    eventHandler.endNonterminal("DefaultNamespaceDecl", e0);
-  }
-
-  function try_DefaultNamespaceDecl()
-  {
-    shiftT(108);                    // 'declare'
-    lookahead1W(46);                // S^WS | '(:' | 'default'
-    shiftT(109);                    // 'default'
-    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'
-    switch (l1)
-    {
-    case 121:                       // 'element'
-      shiftT(121);                  // 'element'
-      break;
-    default:
-      shiftT(145);                  // 'function'
-    }
-    lookahead1W(61);                // S^WS | '(:' | 'namespace'
-    shiftT(184);                    // 'namespace'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shiftT(7);                      // URILiteral
-  }
-
-  function parse_FTOptionDecl()
-  {
-    eventHandler.startNonterminal("FTOptionDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(52);                // S^WS | '(:' | 'ft-option'
-    shift(141);                     // 'ft-option'
-    lookahead1W(81);                // S^WS | '(:' | 'using'
-    whitespace();
-    parse_FTMatchOptions();
-    eventHandler.endNonterminal("FTOptionDecl", e0);
-  }
-
-  function parse_AnnotatedDecl()
-  {
-    eventHandler.startNonterminal("AnnotatedDecl", e0);
-    shift(108);                     // 'declare'
-    for (;;)
-    {
-      lookahead1W(170);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |
-      if (l1 != 32                  // '%'
-       && l1 != 257)                // 'updating'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 257:                     // 'updating'
-        whitespace();
-        parse_CompatibilityAnnotation();
-        break;
-      default:
-        whitespace();
-        parse_Annotation();
-      }
-    }
-    switch (l1)
-    {
-    case 262:                       // 'variable'
-      whitespace();
-      parse_VarDecl();
-      break;
-    case 145:                       // 'function'
-      whitespace();
-      parse_FunctionDecl();
-      break;
-    case 95:                        // 'collection'
-      whitespace();
-      parse_CollectionDecl();
-      break;
-    case 155:                       // 'index'
-      whitespace();
-      parse_IndexDecl();
-      break;
-    default:
-      whitespace();
-      parse_ICDecl();
-    }
-    eventHandler.endNonterminal("AnnotatedDecl", e0);
-  }
-
-  function parse_CompatibilityAnnotation()
-  {
-    eventHandler.startNonterminal("CompatibilityAnnotation", e0);
-    shift(257);                     // 'updating'
-    eventHandler.endNonterminal("CompatibilityAnnotation", e0);
-  }
-
-  function parse_Annotation()
-  {
-    eventHandler.startNonterminal("Annotation", e0);
-    shift(32);                      // '%'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |
-    if (l1 == 34)                   // '('
-    {
-      shift(34);                    // '('
-      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'
-      whitespace();
-      parse_Literal();
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shift(41);                  // ','
-        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'
-        whitespace();
-        parse_Literal();
-      }
-      shift(37);                    // ')'
-    }
-    eventHandler.endNonterminal("Annotation", e0);
-  }
-
-  function try_Annotation()
-  {
-    shiftT(32);                     // '%'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_EQName();
-    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |
-    if (l1 == 34)                   // '('
-    {
-      shiftT(34);                   // '('
-      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'
-      try_Literal();
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shiftT(41);                 // ','
-        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'
-        try_Literal();
-      }
-      shiftT(37);                   // ')'
-    }
-  }
-
-  function parse_VarDecl()
-  {
-    eventHandler.startNonterminal("VarDecl", e0);
-    shift(262);                     // 'variable'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_TypeDeclaration();
-    }
-    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'
-    switch (l1)
-    {
-    case 52:                        // ':='
-      shift(52);                    // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_VarValue();
-      break;
-    default:
-      shift(133);                   // 'external'
-      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'
-      if (l1 == 52)                 // ':='
-      {
-        shift(52);                  // ':='
-        lookahead1W(267);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        whitespace();
-        parse_VarDefaultValue();
-      }
-    }
-    eventHandler.endNonterminal("VarDecl", e0);
-  }
-
-  function parse_VarValue()
-  {
-    eventHandler.startNonterminal("VarValue", e0);
-    parse_ExprSingle();
-    eventHandler.endNonterminal("VarValue", e0);
-  }
-
-  function parse_VarDefaultValue()
-  {
-    eventHandler.startNonterminal("VarDefaultValue", e0);
-    parse_ExprSingle();
-    eventHandler.endNonterminal("VarDefaultValue", e0);
-  }
-
-  function parse_ContextItemDecl()
-  {
-    eventHandler.startNonterminal("ContextItemDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(43);                // S^WS | '(:' | 'context'
-    shift(101);                     // 'context'
-    lookahead1W(55);                // S^WS | '(:' | 'item'
-    shift(165);                     // 'item'
-    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'
-    if (l1 == 79)                   // 'as'
-    {
-      shift(79);                    // 'as'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_ItemType();
-    }
-    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'
-    switch (l1)
-    {
-    case 52:                        // ':='
-      shift(52);                    // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_VarValue();
-      break;
-    default:
-      shift(133);                   // 'external'
-      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'
-      if (l1 == 52)                 // ':='
-      {
-        shift(52);                  // ':='
-        lookahead1W(267);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        whitespace();
-        parse_VarDefaultValue();
-      }
-    }
-    eventHandler.endNonterminal("ContextItemDecl", e0);
-  }
-
-  function parse_ParamList()
-  {
-    eventHandler.startNonterminal("ParamList", e0);
-    parse_Param();
-    for (;;)
-    {
-      lookahead1W(101);             // S^WS | '(:' | ')' | ','
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      whitespace();
-      parse_Param();
-    }
-    eventHandler.endNonterminal("ParamList", e0);
-  }
-
-  function try_ParamList()
-  {
-    try_Param();
-    for (;;)
-    {
-      lookahead1W(101);             // S^WS | '(:' | ')' | ','
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      try_Param();
-    }
-  }
-
-  function parse_Param()
-  {
-    eventHandler.startNonterminal("Param", e0);
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_TypeDeclaration();
-    }
-    eventHandler.endNonterminal("Param", e0);
-  }
-
-  function try_Param()
-  {
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_EQName();
-    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'
-    if (l1 == 79)                   // 'as'
-    {
-      try_TypeDeclaration();
-    }
-  }
-
-  function parse_FunctionBody()
-  {
-    eventHandler.startNonterminal("FunctionBody", e0);
-    parse_EnclosedExpr();
-    eventHandler.endNonterminal("FunctionBody", e0);
-  }
-
-  function try_FunctionBody()
-  {
-    try_EnclosedExpr();
-  }
-
-  function parse_EnclosedExpr()
-  {
-    eventHandler.startNonterminal("EnclosedExpr", e0);
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("EnclosedExpr", e0);
-  }
-
-  function try_EnclosedExpr()
-  {
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_OptionDecl()
-  {
-    eventHandler.startNonterminal("OptionDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(66);                // S^WS | '(:' | 'option'
-    shift(199);                     // 'option'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(17);                // StringLiteral | S^WS | '(:'
-    shift(11);                      // StringLiteral
-    eventHandler.endNonterminal("OptionDecl", e0);
-  }
-
-  function parse_Expr()
-  {
-    eventHandler.startNonterminal("Expr", e0);
-    parse_ExprSingle();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_ExprSingle();
-    }
-    eventHandler.endNonterminal("Expr", e0);
-  }
-
-  function try_Expr()
-  {
-    try_ExprSingle();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_ExprSingle();
-    }
-  }
-
-  function parse_FLWORExpr()
-  {
-    eventHandler.startNonterminal("FLWORExpr", e0);
-    parse_InitialClause();
-    for (;;)
-    {
-      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |
-      if (l1 == 220)                // 'return'
-      {
-        break;
-      }
-      whitespace();
-      parse_IntermediateClause();
-    }
-    whitespace();
-    parse_ReturnClause();
-    eventHandler.endNonterminal("FLWORExpr", e0);
-  }
-
-  function try_FLWORExpr()
-  {
-    try_InitialClause();
-    for (;;)
-    {
-      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |
-      if (l1 == 220)                // 'return'
-      {
-        break;
-      }
-      try_IntermediateClause();
-    }
-    try_ReturnClause();
-  }
-
-  function parse_InitialClause()
-  {
-    eventHandler.startNonterminal("InitialClause", e0);
-    switch (l1)
-    {
-    case 137:                       // 'for'
-      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 16009:                     // 'for' '$'
-      parse_ForClause();
-      break;
-    case 174:                       // 'let'
-      parse_LetClause();
-      break;
-    default:
-      parse_WindowClause();
-    }
-    eventHandler.endNonterminal("InitialClause", e0);
-  }
-
-  function try_InitialClause()
-  {
-    switch (l1)
-    {
-    case 137:                       // 'for'
-      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 16009:                     // 'for' '$'
-      try_ForClause();
-      break;
-    case 174:                       // 'let'
-      try_LetClause();
-      break;
-    default:
-      try_WindowClause();
-    }
-  }
-
-  function parse_IntermediateClause()
-  {
-    eventHandler.startNonterminal("IntermediateClause", e0);
-    switch (l1)
-    {
-    case 137:                       // 'for'
-    case 174:                       // 'let'
-      parse_InitialClause();
-      break;
-    case 266:                       // 'where'
-      parse_WhereClause();
-      break;
-    case 148:                       // 'group'
-      parse_GroupByClause();
-      break;
-    case 105:                       // 'count'
-      parse_CountClause();
-      break;
-    default:
-      parse_OrderByClause();
-    }
-    eventHandler.endNonterminal("IntermediateClause", e0);
-  }
-
-  function try_IntermediateClause()
-  {
-    switch (l1)
-    {
-    case 137:                       // 'for'
-    case 174:                       // 'let'
-      try_InitialClause();
-      break;
-    case 266:                       // 'where'
-      try_WhereClause();
-      break;
-    case 148:                       // 'group'
-      try_GroupByClause();
-      break;
-    case 105:                       // 'count'
-      try_CountClause();
-      break;
-    default:
-      try_OrderByClause();
-    }
-  }
-
-  function parse_ForClause()
-  {
-    eventHandler.startNonterminal("ForClause", e0);
-    shift(137);                     // 'for'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    whitespace();
-    parse_ForBinding();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      whitespace();
-      parse_ForBinding();
-    }
-    eventHandler.endNonterminal("ForClause", e0);
-  }
-
-  function try_ForClause()
-  {
-    shiftT(137);                    // 'for'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    try_ForBinding();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      try_ForBinding();
-    }
-  }
-
-  function parse_ForBinding()
-  {
-    eventHandler.startNonterminal("ForBinding", e0);
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_TypeDeclaration();
-    }
-    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'
-    if (l1 == 72)                   // 'allowing'
-    {
-      whitespace();
-      parse_AllowingEmpty();
-    }
-    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'
-    if (l1 == 81)                   // 'at'
-    {
-      whitespace();
-      parse_PositionalVar();
-    }
-    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'
-    if (l1 == 228)                  // 'score'
-    {
-      whitespace();
-      parse_FTScoreVar();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shift(154);                     // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("ForBinding", e0);
-  }
-
-  function try_ForBinding()
-  {
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'
-    if (l1 == 79)                   // 'as'
-    {
-      try_TypeDeclaration();
-    }
-    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'
-    if (l1 == 72)                   // 'allowing'
-    {
-      try_AllowingEmpty();
-    }
-    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'
-    if (l1 == 81)                   // 'at'
-    {
-      try_PositionalVar();
-    }
-    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'
-    if (l1 == 228)                  // 'score'
-    {
-      try_FTScoreVar();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shiftT(154);                    // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_AllowingEmpty()
-  {
-    eventHandler.startNonterminal("AllowingEmpty", e0);
-    shift(72);                      // 'allowing'
-    lookahead1W(49);                // S^WS | '(:' | 'empty'
-    shift(123);                     // 'empty'
-    eventHandler.endNonterminal("AllowingEmpty", e0);
-  }
-
-  function try_AllowingEmpty()
-  {
-    shiftT(72);                     // 'allowing'
-    lookahead1W(49);                // S^WS | '(:' | 'empty'
-    shiftT(123);                    // 'empty'
-  }
-
-  function parse_PositionalVar()
-  {
-    eventHandler.startNonterminal("PositionalVar", e0);
-    shift(81);                      // 'at'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    eventHandler.endNonterminal("PositionalVar", e0);
-  }
-
-  function try_PositionalVar()
-  {
-    shiftT(81);                     // 'at'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-  }
-
-  function parse_FTScoreVar()
-  {
-    eventHandler.startNonterminal("FTScoreVar", e0);
-    shift(228);                     // 'score'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    eventHandler.endNonterminal("FTScoreVar", e0);
-  }
-
-  function try_FTScoreVar()
-  {
-    shiftT(228);                    // 'score'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-  }
-
-  function parse_LetClause()
-  {
-    eventHandler.startNonterminal("LetClause", e0);
-    shift(174);                     // 'let'
-    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'
-    whitespace();
-    parse_LetBinding();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'
-      whitespace();
-      parse_LetBinding();
-    }
-    eventHandler.endNonterminal("LetClause", e0);
-  }
-
-  function try_LetClause()
-  {
-    shiftT(174);                    // 'let'
-    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'
-    try_LetBinding();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'
-      try_LetBinding();
-    }
-  }
-
-  function parse_LetBinding()
-  {
-    eventHandler.startNonterminal("LetBinding", e0);
-    switch (l1)
-    {
-    case 31:                        // '$'
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'
-      if (l1 == 79)                 // 'as'
-      {
-        whitespace();
-        parse_TypeDeclaration();
-      }
-      break;
-    default:
-      parse_FTScoreVar();
-    }
-    lookahead1W(27);                // S^WS | '(:' | ':='
-    shift(52);                      // ':='
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("LetBinding", e0);
-  }
-
-  function try_LetBinding()
-  {
-    switch (l1)
-    {
-    case 31:                        // '$'
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'
-      if (l1 == 79)                 // 'as'
-      {
-        try_TypeDeclaration();
-      }
-      break;
-    default:
-      try_FTScoreVar();
-    }
-    lookahead1W(27);                // S^WS | '(:' | ':='
-    shiftT(52);                     // ':='
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_WindowClause()
-  {
-    eventHandler.startNonterminal("WindowClause", e0);
-    shift(137);                     // 'for'
-    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'
-    switch (l1)
-    {
-    case 251:                       // 'tumbling'
-      whitespace();
-      parse_TumblingWindowClause();
-      break;
-    default:
-      whitespace();
-      parse_SlidingWindowClause();
-    }
-    eventHandler.endNonterminal("WindowClause", e0);
-  }
-
-  function try_WindowClause()
-  {
-    shiftT(137);                    // 'for'
-    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'
-    switch (l1)
-    {
-    case 251:                       // 'tumbling'
-      try_TumblingWindowClause();
-      break;
-    default:
-      try_SlidingWindowClause();
-    }
-  }
-
-  function parse_TumblingWindowClause()
-  {
-    eventHandler.startNonterminal("TumblingWindowClause", e0);
-    shift(251);                     // 'tumbling'
-    lookahead1W(85);                // S^WS | '(:' | 'window'
-    shift(269);                     // 'window'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_TypeDeclaration();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shift(154);                     // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    whitespace();
-    parse_WindowStartCondition();
-    if (l1 == 126                   // 'end'
-     || l1 == 198)                  // 'only'
-    {
-      whitespace();
-      parse_WindowEndCondition();
-    }
-    eventHandler.endNonterminal("TumblingWindowClause", e0);
-  }
-
-  function try_TumblingWindowClause()
-  {
-    shiftT(251);                    // 'tumbling'
-    lookahead1W(85);                // S^WS | '(:' | 'window'
-    shiftT(269);                    // 'window'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'
-    if (l1 == 79)                   // 'as'
-    {
-      try_TypeDeclaration();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shiftT(154);                    // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    try_WindowStartCondition();
-    if (l1 == 126                   // 'end'
-     || l1 == 198)                  // 'only'
-    {
-      try_WindowEndCondition();
-    }
-  }
-
-  function parse_SlidingWindowClause()
-  {
-    eventHandler.startNonterminal("SlidingWindowClause", e0);
-    shift(234);                     // 'sliding'
-    lookahead1W(85);                // S^WS | '(:' | 'window'
-    shift(269);                     // 'window'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_TypeDeclaration();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shift(154);                     // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    whitespace();
-    parse_WindowStartCondition();
-    whitespace();
-    parse_WindowEndCondition();
-    eventHandler.endNonterminal("SlidingWindowClause", e0);
-  }
-
-  function try_SlidingWindowClause()
-  {
-    shiftT(234);                    // 'sliding'
-    lookahead1W(85);                // S^WS | '(:' | 'window'
-    shiftT(269);                    // 'window'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'
-    if (l1 == 79)                   // 'as'
-    {
-      try_TypeDeclaration();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shiftT(154);                    // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    try_WindowStartCondition();
-    try_WindowEndCondition();
-  }
-
-  function parse_WindowStartCondition()
-  {
-    eventHandler.startNonterminal("WindowStartCondition", e0);
-    shift(237);                     // 'start'
-    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'
-    whitespace();
-    parse_WindowVars();
-    lookahead1W(83);                // S^WS | '(:' | 'when'
-    shift(265);                     // 'when'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("WindowStartCondition", e0);
-  }
-
-  function try_WindowStartCondition()
-  {
-    shiftT(237);                    // 'start'
-    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'
-    try_WindowVars();
-    lookahead1W(83);                // S^WS | '(:' | 'when'
-    shiftT(265);                    // 'when'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_WindowEndCondition()
-  {
-    eventHandler.startNonterminal("WindowEndCondition", e0);
-    if (l1 == 198)                  // 'only'
-    {
-      shift(198);                   // 'only'
-    }
-    lookahead1W(50);                // S^WS | '(:' | 'end'
-    shift(126);                     // 'end'
-    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'
-    whitespace();
-    parse_WindowVars();
-    lookahead1W(83);                // S^WS | '(:' | 'when'
-    shift(265);                     // 'when'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("WindowEndCondition", e0);
-  }
-
-  function try_WindowEndCondition()
-  {
-    if (l1 == 198)                  // 'only'
-    {
-      shiftT(198);                  // 'only'
-    }
-    lookahead1W(50);                // S^WS | '(:' | 'end'
-    shiftT(126);                    // 'end'
-    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'
-    try_WindowVars();
-    lookahead1W(83);                // S^WS | '(:' | 'when'
-    shiftT(265);                    // 'when'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_WindowVars()
-  {
-    eventHandler.startNonterminal("WindowVars", e0);
-    if (l1 == 31)                   // '$'
-    {
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_CurrentItem();
-    }
-    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'
-    if (l1 == 81)                   // 'at'
-    {
-      whitespace();
-      parse_PositionalVar();
-    }
-    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'
-    if (l1 == 215)                  // 'previous'
-    {
-      shift(215);                   // 'previous'
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_PreviousItem();
-    }
-    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'
-    if (l1 == 187)                  // 'next'
-    {
-      shift(187);                   // 'next'
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_NextItem();
-    }
-    eventHandler.endNonterminal("WindowVars", e0);
-  }
-
-  function try_WindowVars()
-  {
-    if (l1 == 31)                   // '$'
-    {
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_CurrentItem();
-    }
-    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'
-    if (l1 == 81)                   // 'at'
-    {
-      try_PositionalVar();
-    }
-    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'
-    if (l1 == 215)                  // 'previous'
-    {
-      shiftT(215);                  // 'previous'
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_PreviousItem();
-    }
-    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'
-    if (l1 == 187)                  // 'next'
-    {
-      shiftT(187);                  // 'next'
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_NextItem();
-    }
-  }
-
-  function parse_CurrentItem()
-  {
-    eventHandler.startNonterminal("CurrentItem", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("CurrentItem", e0);
-  }
-
-  function try_CurrentItem()
-  {
-    try_EQName();
-  }
-
-  function parse_PreviousItem()
-  {
-    eventHandler.startNonterminal("PreviousItem", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("PreviousItem", e0);
-  }
-
-  function try_PreviousItem()
-  {
-    try_EQName();
-  }
-
-  function parse_NextItem()
-  {
-    eventHandler.startNonterminal("NextItem", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("NextItem", e0);
-  }
-
-  function try_NextItem()
-  {
-    try_EQName();
-  }
-
-  function parse_CountClause()
-  {
-    eventHandler.startNonterminal("CountClause", e0);
-    shift(105);                     // 'count'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    eventHandler.endNonterminal("CountClause", e0);
-  }
-
-  function try_CountClause()
-  {
-    shiftT(105);                    // 'count'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-  }
-
-  function parse_WhereClause()
-  {
-    eventHandler.startNonterminal("WhereClause", e0);
-    shift(266);                     // 'where'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("WhereClause", e0);
-  }
-
-  function try_WhereClause()
-  {
-    shiftT(266);                    // 'where'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_GroupByClause()
-  {
-    eventHandler.startNonterminal("GroupByClause", e0);
-    shift(148);                     // 'group'
-    lookahead1W(34);                // S^WS | '(:' | 'by'
-    shift(87);                      // 'by'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    whitespace();
-    parse_GroupingSpecList();
-    eventHandler.endNonterminal("GroupByClause", e0);
-  }
-
-  function try_GroupByClause()
-  {
-    shiftT(148);                    // 'group'
-    lookahead1W(34);                // S^WS | '(:' | 'by'
-    shiftT(87);                     // 'by'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    try_GroupingSpecList();
-  }
-
-  function parse_GroupingSpecList()
-  {
-    eventHandler.startNonterminal("GroupingSpecList", e0);
-    parse_GroupingSpec();
-    for (;;)
-    {
-      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      whitespace();
-      parse_GroupingSpec();
-    }
-    eventHandler.endNonterminal("GroupingSpecList", e0);
-  }
-
-  function try_GroupingSpecList()
-  {
-    try_GroupingSpec();
-    for (;;)
-    {
-      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      try_GroupingSpec();
-    }
-  }
-
-  function parse_GroupingSpec()
-  {
-    eventHandler.startNonterminal("GroupingSpec", e0);
-    parse_GroupingVariable();
-    lookahead1W(182);               // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |
-    if (l1 == 52                    // ':='
-     || l1 == 79)                   // 'as'
-    {
-      if (l1 == 79)                 // 'as'
-      {
-        whitespace();
-        parse_TypeDeclaration();
-      }
-      lookahead1W(27);              // S^WS | '(:' | ':='
-      shift(52);                    // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_ExprSingle();
-    }
-    if (l1 == 94)                   // 'collation'
-    {
-      shift(94);                    // 'collation'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shift(7);                     // URILiteral
-    }
-    eventHandler.endNonterminal("GroupingSpec", e0);
-  }
-
-  function try_GroupingSpec()
-  {
-    try_GroupingVariable();
-    lookahead1W(182);               // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |
-    if (l1 == 52                    // ':='
-     || l1 == 79)                   // 'as'
-    {
-      if (l1 == 79)                 // 'as'
-      {
-        try_TypeDeclaration();
-      }
-      lookahead1W(27);              // S^WS | '(:' | ':='
-      shiftT(52);                   // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_ExprSingle();
-    }
-    if (l1 == 94)                   // 'collation'
-    {
-      shiftT(94);                   // 'collation'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shiftT(7);                    // URILiteral
-    }
-  }
-
-  function parse_GroupingVariable()
-  {
-    eventHandler.startNonterminal("GroupingVariable", e0);
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    eventHandler.endNonterminal("GroupingVariable", e0);
-  }
-
-  function try_GroupingVariable()
-  {
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-  }
-
-  function parse_OrderByClause()
-  {
-    eventHandler.startNonterminal("OrderByClause", e0);
-    switch (l1)
-    {
-    case 201:                       // 'order'
-      shift(201);                   // 'order'
-      lookahead1W(34);              // S^WS | '(:' | 'by'
-      shift(87);                    // 'by'
-      break;
-    default:
-      shift(236);                   // 'stable'
-      lookahead1W(67);              // S^WS | '(:' | 'order'
-      shift(201);                   // 'order'
-      lookahead1W(34);              // S^WS | '(:' | 'by'
-      shift(87);                    // 'by'
-    }
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_OrderSpecList();
-    eventHandler.endNonterminal("OrderByClause", e0);
-  }
-
-  function try_OrderByClause()
-  {
-    switch (l1)
-    {
-    case 201:                       // 'order'
-      shiftT(201);                  // 'order'
-      lookahead1W(34);              // S^WS | '(:' | 'by'
-      shiftT(87);                   // 'by'
-      break;
-    default:
-      shiftT(236);                  // 'stable'
-      lookahead1W(67);              // S^WS | '(:' | 'order'
-      shiftT(201);                  // 'order'
-      lookahead1W(34);              // S^WS | '(:' | 'by'
-      shiftT(87);                   // 'by'
-    }
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_OrderSpecList();
-  }
-
-  function parse_OrderSpecList()
-  {
-    eventHandler.startNonterminal("OrderSpecList", e0);
-    parse_OrderSpec();
-    for (;;)
-    {
-      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_OrderSpec();
-    }
-    eventHandler.endNonterminal("OrderSpecList", e0);
-  }
-
-  function try_OrderSpecList()
-  {
-    try_OrderSpec();
-    for (;;)
-    {
-      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_OrderSpec();
-    }
-  }
-
-  function parse_OrderSpec()
-  {
-    eventHandler.startNonterminal("OrderSpec", e0);
-    parse_ExprSingle();
-    whitespace();
-    parse_OrderModifier();
-    eventHandler.endNonterminal("OrderSpec", e0);
-  }
-
-  function try_OrderSpec()
-  {
-    try_ExprSingle();
-    try_OrderModifier();
-  }
-
-  function parse_OrderModifier()
-  {
-    eventHandler.startNonterminal("OrderModifier", e0);
-    if (l1 == 80                    // 'ascending'
-     || l1 == 113)                  // 'descending'
-    {
-      switch (l1)
-      {
-      case 80:                      // 'ascending'
-        shift(80);                  // 'ascending'
-        break;
-      default:
-        shift(113);                 // 'descending'
-      }
-    }
-    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |
-    if (l1 == 123)                  // 'empty'
-    {
-      shift(123);                   // 'empty'
-      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'
-      switch (l1)
-      {
-      case 147:                     // 'greatest'
-        shift(147);                 // 'greatest'
-        break;
-      default:
-        shift(173);                 // 'least'
-      }
-    }
-    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |
-    if (l1 == 94)                   // 'collation'
-    {
-      shift(94);                    // 'collation'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shift(7);                     // URILiteral
-    }
-    eventHandler.endNonterminal("OrderModifier", e0);
-  }
-
-  function try_OrderModifier()
-  {
-    if (l1 == 80                    // 'ascending'
-     || l1 == 113)                  // 'descending'
-    {
-      switch (l1)
-      {
-      case 80:                      // 'ascending'
-        shiftT(80);                 // 'ascending'
-        break;
-      default:
-        shiftT(113);                // 'descending'
-      }
-    }
-    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |
-    if (l1 == 123)                  // 'empty'
-    {
-      shiftT(123);                  // 'empty'
-      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'
-      switch (l1)
-      {
-      case 147:                     // 'greatest'
-        shiftT(147);                // 'greatest'
-        break;
-      default:
-        shiftT(173);                // 'least'
-      }
-    }
-    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |
-    if (l1 == 94)                   // 'collation'
-    {
-      shiftT(94);                   // 'collation'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shiftT(7);                    // URILiteral
-    }
-  }
-
-  function parse_ReturnClause()
-  {
-    eventHandler.startNonterminal("ReturnClause", e0);
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("ReturnClause", e0);
-  }
-
-  function try_ReturnClause()
-  {
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_QuantifiedExpr()
-  {
-    eventHandler.startNonterminal("QuantifiedExpr", e0);
-    switch (l1)
-    {
-    case 235:                       // 'some'
-      shift(235);                   // 'some'
-      break;
-    default:
-      shift(129);                   // 'every'
-    }
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_TypeDeclaration();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shift(154);                     // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-      lookahead1W(110);             // S^WS | '(:' | 'as' | 'in'
-      if (l1 == 79)                 // 'as'
-      {
-        whitespace();
-        parse_TypeDeclaration();
-      }
-      lookahead1W(53);              // S^WS | '(:' | 'in'
-      shift(154);                   // 'in'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_ExprSingle();
-    }
-    shift(224);                     // 'satisfies'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("QuantifiedExpr", e0);
-  }
-
-  function try_QuantifiedExpr()
-  {
-    switch (l1)
-    {
-    case 235:                       // 'some'
-      shiftT(235);                  // 'some'
-      break;
-    default:
-      shiftT(129);                  // 'every'
-    }
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'
-    if (l1 == 79)                   // 'as'
-    {
-      try_TypeDeclaration();
-    }
-    lookahead1W(53);                // S^WS | '(:' | 'in'
-    shiftT(154);                    // 'in'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-      lookahead1W(110);             // S^WS | '(:' | 'as' | 'in'
-      if (l1 == 79)                 // 'as'
-      {
-        try_TypeDeclaration();
-      }
-      lookahead1W(53);              // S^WS | '(:' | 'in'
-      shiftT(154);                  // 'in'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_ExprSingle();
-    }
-    shiftT(224);                    // 'satisfies'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_SwitchExpr()
-  {
-    eventHandler.startNonterminal("SwitchExpr", e0);
-    shift(243);                     // 'switch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(37);                      // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      whitespace();
-      parse_SwitchCaseClause();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shift(109);                     // 'default'
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("SwitchExpr", e0);
-  }
-
-  function try_SwitchExpr()
-  {
-    shiftT(243);                    // 'switch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(37);                     // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      try_SwitchCaseClause();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shiftT(109);                    // 'default'
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_SwitchCaseClause()
-  {
-    eventHandler.startNonterminal("SwitchCaseClause", e0);
-    for (;;)
-    {
-      shift(88);                    // 'case'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_SwitchCaseOperand();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("SwitchCaseClause", e0);
-  }
-
-  function try_SwitchCaseClause()
-  {
-    for (;;)
-    {
-      shiftT(88);                   // 'case'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_SwitchCaseOperand();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_SwitchCaseOperand()
-  {
-    eventHandler.startNonterminal("SwitchCaseOperand", e0);
-    parse_ExprSingle();
-    eventHandler.endNonterminal("SwitchCaseOperand", e0);
-  }
-
-  function try_SwitchCaseOperand()
-  {
-    try_ExprSingle();
-  }
-
-  function parse_TypeswitchExpr()
-  {
-    eventHandler.startNonterminal("TypeswitchExpr", e0);
-    shift(253);                     // 'typeswitch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(37);                      // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      whitespace();
-      parse_CaseClause();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shift(109);                     // 'default'
-    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'
-    if (l1 == 31)                   // '$'
-    {
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-    }
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("TypeswitchExpr", e0);
-  }
-
-  function try_TypeswitchExpr()
-  {
-    shiftT(253);                    // 'typeswitch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(37);                     // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      try_CaseClause();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shiftT(109);                    // 'default'
-    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'
-    if (l1 == 31)                   // '$'
-    {
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-    }
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_CaseClause()
-  {
-    eventHandler.startNonterminal("CaseClause", e0);
-    shift(88);                      // 'case'
-    lookahead1W(260);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |
-    if (l1 == 31)                   // '$'
-    {
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shift(79);                    // 'as'
-    }
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_SequenceTypeUnion();
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("CaseClause", e0);
-  }
-
-  function try_CaseClause()
-  {
-    shiftT(88);                     // 'case'
-    lookahead1W(260);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |
-    if (l1 == 31)                   // '$'
-    {
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shiftT(79);                   // 'as'
-    }
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_SequenceTypeUnion();
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_SequenceTypeUnion()
-  {
-    eventHandler.startNonterminal("SequenceTypeUnion", e0);
-    parse_SequenceType();
-    for (;;)
-    {
-      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'
-      if (l1 != 279)                // '|'
-      {
-        break;
-      }
-      shift(279);                   // '|'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_SequenceType();
-    }
-    eventHandler.endNonterminal("SequenceTypeUnion", e0);
-  }
-
-  function try_SequenceTypeUnion()
-  {
-    try_SequenceType();
-    for (;;)
-    {
-      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'
-      if (l1 != 279)                // '|'
-      {
-        break;
-      }
-      shiftT(279);                  // '|'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_SequenceType();
-    }
-  }
-
-  function parse_IfExpr()
-  {
-    eventHandler.startNonterminal("IfExpr", e0);
-    shift(152);                     // 'if'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(37);                      // ')'
-    lookahead1W(77);                // S^WS | '(:' | 'then'
-    shift(245);                     // 'then'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    shift(122);                     // 'else'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("IfExpr", e0);
-  }
-
-  function try_IfExpr()
-  {
-    shiftT(152);                    // 'if'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(37);                     // ')'
-    lookahead1W(77);                // S^WS | '(:' | 'then'
-    shiftT(245);                    // 'then'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    shiftT(122);                    // 'else'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_TryCatchExpr()
-  {
-    eventHandler.startNonterminal("TryCatchExpr", e0);
-    parse_TryClause();
-    for (;;)
-    {
-      lookahead1W(36);              // S^WS | '(:' | 'catch'
-      whitespace();
-      parse_CatchClause();
-      lookahead1W(184);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |
-      if (l1 != 91)                 // 'catch'
-      {
-        break;
-      }
-    }
-    eventHandler.endNonterminal("TryCatchExpr", e0);
-  }
-
-  function try_TryCatchExpr()
-  {
-    try_TryClause();
-    for (;;)
-    {
-      lookahead1W(36);              // S^WS | '(:' | 'catch'
-      try_CatchClause();
-      lookahead1W(184);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |
-      if (l1 != 91)                 // 'catch'
-      {
-        break;
-      }
-    }
-  }
-
-  function parse_TryClause()
-  {
-    eventHandler.startNonterminal("TryClause", e0);
-    shift(250);                     // 'try'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_TryTargetExpr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("TryClause", e0);
-  }
-
-  function try_TryClause()
-  {
-    shiftT(250);                    // 'try'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_TryTargetExpr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_TryTargetExpr()
-  {
-    eventHandler.startNonterminal("TryTargetExpr", e0);
-    parse_Expr();
-    eventHandler.endNonterminal("TryTargetExpr", e0);
-  }
-
-  function try_TryTargetExpr()
-  {
-    try_Expr();
-  }
-
-  function parse_CatchClause()
-  {
-    eventHandler.startNonterminal("CatchClause", e0);
-    shift(91);                      // 'catch'
-    lookahead1W(255);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_CatchErrorList();
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("CatchClause", e0);
-  }
-
-  function try_CatchClause()
-  {
-    shiftT(91);                     // 'catch'
-    lookahead1W(255);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_CatchErrorList();
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_CatchErrorList()
-  {
-    eventHandler.startNonterminal("CatchErrorList", e0);
-    parse_NameTest();
-    for (;;)
-    {
-      lookahead1W(136);             // S^WS | '(:' | '{' | '|'
-      if (l1 != 279)                // '|'
-      {
-        break;
-      }
-      shift(279);                   // '|'
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_NameTest();
-    }
-    eventHandler.endNonterminal("CatchErrorList", e0);
-  }
-
-  function try_CatchErrorList()
-  {
-    try_NameTest();
-    for (;;)
-    {
-      lookahead1W(136);             // S^WS | '(:' | '{' | '|'
-      if (l1 != 279)                // '|'
-      {
-        break;
-      }
-      shiftT(279);                  // '|'
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_NameTest();
-    }
-  }
-
-  function parse_OrExpr()
-  {
-    eventHandler.startNonterminal("OrExpr", e0);
-    parse_AndExpr();
-    for (;;)
-    {
-      if (l1 != 200)                // 'or'
-      {
-        break;
-      }
-      shift(200);                   // 'or'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_AndExpr();
-    }
-    eventHandler.endNonterminal("OrExpr", e0);
-  }
-
-  function try_OrExpr()
-  {
-    try_AndExpr();
-    for (;;)
-    {
-      if (l1 != 200)                // 'or'
-      {
-        break;
-      }
-      shiftT(200);                  // 'or'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_AndExpr();
-    }
-  }
-
-  function parse_AndExpr()
-  {
-    eventHandler.startNonterminal("AndExpr", e0);
-    parse_ComparisonExpr();
-    for (;;)
-    {
-      if (l1 != 75)                 // 'and'
-      {
-        break;
-      }
-      shift(75);                    // 'and'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_ComparisonExpr();
-    }
-    eventHandler.endNonterminal("AndExpr", e0);
-  }
-
-  function try_AndExpr()
-  {
-    try_ComparisonExpr();
-    for (;;)
-    {
-      if (l1 != 75)                 // 'and'
-      {
-        break;
-      }
-      shiftT(75);                   // 'and'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_ComparisonExpr();
-    }
-  }
-
-  function parse_ComparisonExpr()
-  {
-    eventHandler.startNonterminal("ComparisonExpr", e0);
-    parse_FTContainsExpr();
-    if (l1 == 27                    // '!='
-     || l1 == 54                    // '<'
-     || l1 == 57                    // '<<'
-     || l1 == 58                    // '<='
-     || l1 == 60                    // '='
-     || l1 == 61                    // '>'
-     || l1 == 62                    // '>='
-     || l1 == 63                    // '>>'
-     || l1 == 128                   // 'eq'
-     || l1 == 146                   // 'ge'
-     || l1 == 150                   // 'gt'
-     || l1 == 164                   // 'is'
-     || l1 == 172                   // 'le'
-     || l1 == 178                   // 'lt'
-     || l1 == 186)                  // 'ne'
-    {
-      switch (l1)
-      {
-      case 128:                     // 'eq'
-      case 146:                     // 'ge'
-      case 150:                     // 'gt'
-      case 172:                     // 'le'
-      case 178:                     // 'lt'
-      case 186:                     // 'ne'
-        whitespace();
-        parse_ValueComp();
-        break;
-      case 57:                      // '<<'
-      case 63:                      // '>>'
-      case 164:                     // 'is'
-        whitespace();
-        parse_NodeComp();
-        break;
-      default:
-        whitespace();
-        parse_GeneralComp();
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_FTContainsExpr();
-    }
-    eventHandler.endNonterminal("ComparisonExpr", e0);
-  }
-
-  function try_ComparisonExpr()
-  {
-    try_FTContainsExpr();
-    if (l1 == 27                    // '!='
-     || l1 == 54                    // '<'
-     || l1 == 57                    // '<<'
-     || l1 == 58                    // '<='
-     || l1 == 60                    // '='
-     || l1 == 61                    // '>'
-     || l1 == 62                    // '>='
-     || l1 == 63                    // '>>'
-     || l1 == 128                   // 'eq'
-     || l1 == 146                   // 'ge'
-     || l1 == 150                   // 'gt'
-     || l1 == 164                   // 'is'
-     || l1 == 172                   // 'le'
-     || l1 == 178                   // 'lt'
-     || l1 == 186)                  // 'ne'
-    {
-      switch (l1)
-      {
-      case 128:                     // 'eq'
-      case 146:                     // 'ge'
-      case 150:                     // 'gt'
-      case 172:                     // 'le'
-      case 178:                     // 'lt'
-      case 186:                     // 'ne'
-        try_ValueComp();
-        break;
-      case 57:                      // '<<'
-      case 63:                      // '>>'
-      case 164:                     // 'is'
-        try_NodeComp();
-        break;
-      default:
-        try_GeneralComp();
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_FTContainsExpr();
-    }
-  }
-
-  function parse_FTContainsExpr()
-  {
-    eventHandler.startNonterminal("FTContainsExpr", e0);
-    parse_StringConcatExpr();
-    if (l1 == 99)                   // 'contains'
-    {
-      shift(99);                    // 'contains'
-      lookahead1W(76);              // S^WS | '(:' | 'text'
-      shift(244);                   // 'text'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      whitespace();
-      parse_FTSelection();
-      if (l1 == 271)                // 'without'
-      {
-        whitespace();
-        parse_FTIgnoreOption();
-      }
-    }
-    eventHandler.endNonterminal("FTContainsExpr", e0);
-  }
-
-  function try_FTContainsExpr()
-  {
-    try_StringConcatExpr();
-    if (l1 == 99)                   // 'contains'
-    {
-      shiftT(99);                   // 'contains'
-      lookahead1W(76);              // S^WS | '(:' | 'text'
-      shiftT(244);                  // 'text'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      try_FTSelection();
-      if (l1 == 271)                // 'without'
-      {
-        try_FTIgnoreOption();
-      }
-    }
-  }
-
-  function parse_StringConcatExpr()
-  {
-    eventHandler.startNonterminal("StringConcatExpr", e0);
-    parse_RangeExpr();
-    for (;;)
-    {
-      if (l1 != 280)                // '||'
-      {
-        break;
-      }
-      shift(280);                   // '||'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_RangeExpr();
-    }
-    eventHandler.endNonterminal("StringConcatExpr", e0);
-  }
-
-  function try_StringConcatExpr()
-  {
-    try_RangeExpr();
-    for (;;)
-    {
-      if (l1 != 280)                // '||'
-      {
-        break;
-      }
-      shiftT(280);                  // '||'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_RangeExpr();
-    }
-  }
-
-  function parse_RangeExpr()
-  {
-    eventHandler.startNonterminal("RangeExpr", e0);
-    parse_AdditiveExpr();
-    if (l1 == 248)                  // 'to'
-    {
-      shift(248);                   // 'to'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_AdditiveExpr();
-    }
-    eventHandler.endNonterminal("RangeExpr", e0);
-  }
-
-  function try_RangeExpr()
-  {
-    try_AdditiveExpr();
-    if (l1 == 248)                  // 'to'
-    {
-      shiftT(248);                  // 'to'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_AdditiveExpr();
-    }
-  }
-
-  function parse_AdditiveExpr()
-  {
-    eventHandler.startNonterminal("AdditiveExpr", e0);
-    parse_MultiplicativeExpr();
-    for (;;)
-    {
-      if (l1 != 40                  // '+'
-       && l1 != 42)                 // '-'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 40:                      // '+'
-        shift(40);                  // '+'
-        break;
-      default:
-        shift(42);                  // '-'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_MultiplicativeExpr();
-    }
-    eventHandler.endNonterminal("AdditiveExpr", e0);
-  }
-
-  function try_AdditiveExpr()
-  {
-    try_MultiplicativeExpr();
-    for (;;)
-    {
-      if (l1 != 40                  // '+'
-       && l1 != 42)                 // '-'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 40:                      // '+'
-        shiftT(40);                 // '+'
-        break;
-      default:
-        shiftT(42);                 // '-'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_MultiplicativeExpr();
-    }
-  }
-
-  function parse_MultiplicativeExpr()
-  {
-    eventHandler.startNonterminal("MultiplicativeExpr", e0);
-    parse_UnionExpr();
-    for (;;)
-    {
-      if (l1 != 38                  // '*'
-       && l1 != 118                 // 'div'
-       && l1 != 151                 // 'idiv'
-       && l1 != 180)                // 'mod'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 38:                      // '*'
-        shift(38);                  // '*'
-        break;
-      case 118:                     // 'div'
-        shift(118);                 // 'div'
-        break;
-      case 151:                     // 'idiv'
-        shift(151);                 // 'idiv'
-        break;
-      default:
-        shift(180);                 // 'mod'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_UnionExpr();
-    }
-    eventHandler.endNonterminal("MultiplicativeExpr", e0);
-  }
-
-  function try_MultiplicativeExpr()
-  {
-    try_UnionExpr();
-    for (;;)
-    {
-      if (l1 != 38                  // '*'
-       && l1 != 118                 // 'div'
-       && l1 != 151                 // 'idiv'
-       && l1 != 180)                // 'mod'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 38:                      // '*'
-        shiftT(38);                 // '*'
-        break;
-      case 118:                     // 'div'
-        shiftT(118);                // 'div'
-        break;
-      case 151:                     // 'idiv'
-        shiftT(151);                // 'idiv'
-        break;
-      default:
-        shiftT(180);                // 'mod'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_UnionExpr();
-    }
-  }
-
-  function parse_UnionExpr()
-  {
-    eventHandler.startNonterminal("UnionExpr", e0);
-    parse_IntersectExceptExpr();
-    for (;;)
-    {
-      if (l1 != 254                 // 'union'
-       && l1 != 279)                // '|'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 254:                     // 'union'
-        shift(254);                 // 'union'
-        break;
-      default:
-        shift(279);                 // '|'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_IntersectExceptExpr();
-    }
-    eventHandler.endNonterminal("UnionExpr", e0);
-  }
-
-  function try_UnionExpr()
-  {
-    try_IntersectExceptExpr();
-    for (;;)
-    {
-      if (l1 != 254                 // 'union'
-       && l1 != 279)                // '|'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 254:                     // 'union'
-        shiftT(254);                // 'union'
-        break;
-      default:
-        shiftT(279);                // '|'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_IntersectExceptExpr();
-    }
-  }
-
-  function parse_IntersectExceptExpr()
-  {
-    eventHandler.startNonterminal("IntersectExceptExpr", e0);
-    parse_InstanceofExpr();
-    for (;;)
-    {
-      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-      if (l1 != 131                 // 'except'
-       && l1 != 162)                // 'intersect'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 162:                     // 'intersect'
-        shift(162);                 // 'intersect'
-        break;
-      default:
-        shift(131);                 // 'except'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_InstanceofExpr();
-    }
-    eventHandler.endNonterminal("IntersectExceptExpr", e0);
-  }
-
-  function try_IntersectExceptExpr()
-  {
-    try_InstanceofExpr();
-    for (;;)
-    {
-      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-      if (l1 != 131                 // 'except'
-       && l1 != 162)                // 'intersect'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 162:                     // 'intersect'
-        shiftT(162);                // 'intersect'
-        break;
-      default:
-        shiftT(131);                // 'except'
-      }
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_InstanceofExpr();
-    }
-  }
-
-  function parse_InstanceofExpr()
-  {
-    eventHandler.startNonterminal("InstanceofExpr", e0);
-    parse_TreatExpr();
-    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 160)                  // 'instance'
-    {
-      shift(160);                   // 'instance'
-      lookahead1W(64);              // S^WS | '(:' | 'of'
-      shift(196);                   // 'of'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_SequenceType();
-    }
-    eventHandler.endNonterminal("InstanceofExpr", e0);
-  }
-
-  function try_InstanceofExpr()
-  {
-    try_TreatExpr();
-    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 160)                  // 'instance'
-    {
-      shiftT(160);                  // 'instance'
-      lookahead1W(64);              // S^WS | '(:' | 'of'
-      shiftT(196);                  // 'of'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_SequenceType();
-    }
-  }
-
-  function parse_TreatExpr()
-  {
-    eventHandler.startNonterminal("TreatExpr", e0);
-    parse_CastableExpr();
-    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 249)                  // 'treat'
-    {
-      shift(249);                   // 'treat'
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shift(79);                    // 'as'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_SequenceType();
-    }
-    eventHandler.endNonterminal("TreatExpr", e0);
-  }
-
-  function try_TreatExpr()
-  {
-    try_CastableExpr();
-    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 249)                  // 'treat'
-    {
-      shiftT(249);                  // 'treat'
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shiftT(79);                   // 'as'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_SequenceType();
-    }
-  }
-
-  function parse_CastableExpr()
-  {
-    eventHandler.startNonterminal("CastableExpr", e0);
-    parse_CastExpr();
-    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 90)                   // 'castable'
-    {
-      shift(90);                    // 'castable'
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shift(79);                    // 'as'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_SingleType();
-    }
-    eventHandler.endNonterminal("CastableExpr", e0);
-  }
-
-  function try_CastableExpr()
-  {
-    try_CastExpr();
-    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 90)                   // 'castable'
-    {
-      shiftT(90);                   // 'castable'
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shiftT(79);                   // 'as'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_SingleType();
-    }
-  }
-
-  function parse_CastExpr()
-  {
-    eventHandler.startNonterminal("CastExpr", e0);
-    parse_UnaryExpr();
-    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 89)                   // 'cast'
-    {
-      shift(89);                    // 'cast'
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shift(79);                    // 'as'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_SingleType();
-    }
-    eventHandler.endNonterminal("CastExpr", e0);
-  }
-
-  function try_CastExpr()
-  {
-    try_UnaryExpr();
-    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 89)                   // 'cast'
-    {
-      shiftT(89);                   // 'cast'
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shiftT(79);                   // 'as'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_SingleType();
-    }
-  }
-
-  function parse_UnaryExpr()
-  {
-    eventHandler.startNonterminal("UnaryExpr", e0);
-    for (;;)
-    {
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      if (l1 != 40                  // '+'
-       && l1 != 42)                 // '-'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 42:                      // '-'
-        shift(42);                  // '-'
-        break;
-      default:
-        shift(40);                  // '+'
-      }
-    }
-    whitespace();
-    parse_ValueExpr();
-    eventHandler.endNonterminal("UnaryExpr", e0);
-  }
-
-  function try_UnaryExpr()
-  {
-    for (;;)
-    {
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      if (l1 != 40                  // '+'
-       && l1 != 42)                 // '-'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 42:                      // '-'
-        shiftT(42);                 // '-'
-        break;
-      default:
-        shiftT(40);                 // '+'
-      }
-    }
-    try_ValueExpr();
-  }
-
-  function parse_ValueExpr()
-  {
-    eventHandler.startNonterminal("ValueExpr", e0);
-    switch (l1)
-    {
-    case 260:                       // 'validate'
-      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 87812:                     // 'validate' 'lax'
-    case 123140:                    // 'validate' 'strict'
-    case 129284:                    // 'validate' 'type'
-    case 141572:                    // 'validate' '{'
-      parse_ValidateExpr();
-      break;
-    case 35:                        // '(#'
-      parse_ExtensionExpr();
-      break;
-    default:
-      parse_SimpleMapExpr();
-    }
-    eventHandler.endNonterminal("ValueExpr", e0);
-  }
-
-  function try_ValueExpr()
-  {
-    switch (l1)
-    {
-    case 260:                       // 'validate'
-      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 87812:                     // 'validate' 'lax'
-    case 123140:                    // 'validate' 'strict'
-    case 129284:                    // 'validate' 'type'
-    case 141572:                    // 'validate' '{'
-      try_ValidateExpr();
-      break;
-    case 35:                        // '(#'
-      try_ExtensionExpr();
-      break;
-    default:
-      try_SimpleMapExpr();
-    }
-  }
-
-  function parse_SimpleMapExpr()
-  {
-    eventHandler.startNonterminal("SimpleMapExpr", e0);
-    parse_PathExpr();
-    for (;;)
-    {
-      if (l1 != 26)                 // '!'
-      {
-        break;
-      }
-      shift(26);                    // '!'
-      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_PathExpr();
-    }
-    eventHandler.endNonterminal("SimpleMapExpr", e0);
-  }
-
-  function try_SimpleMapExpr()
-  {
-    try_PathExpr();
-    for (;;)
-    {
-      if (l1 != 26)                 // '!'
-      {
-        break;
-      }
-      shiftT(26);                   // '!'
-      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_PathExpr();
-    }
-  }
-
-  function parse_GeneralComp()
-  {
-    eventHandler.startNonterminal("GeneralComp", e0);
-    switch (l1)
-    {
-    case 60:                        // '='
-      shift(60);                    // '='
-      break;
-    case 27:                        // '!='
-      shift(27);                    // '!='
-      break;
-    case 54:                        // '<'
-      shift(54);                    // '<'
-      break;
-    case 58:                        // '<='
-      shift(58);                    // '<='
-      break;
-    case 61:                        // '>'
-      shift(61);                    // '>'
-      break;
-    default:
-      shift(62);                    // '>='
-    }
-    eventHandler.endNonterminal("GeneralComp", e0);
-  }
-
-  function try_GeneralComp()
-  {
-    switch (l1)
-    {
-    case 60:                        // '='
-      shiftT(60);                   // '='
-      break;
-    case 27:                        // '!='
-      shiftT(27);                   // '!='
-      break;
-    case 54:                        // '<'
-      shiftT(54);                   // '<'
-      break;
-    case 58:                        // '<='
-      shiftT(58);                   // '<='
-      break;
-    case 61:                        // '>'
-      shiftT(61);                   // '>'
-      break;
-    default:
-      shiftT(62);                   // '>='
-    }
-  }
-
-  function parse_ValueComp()
-  {
-    eventHandler.startNonterminal("ValueComp", e0);
-    switch (l1)
-    {
-    case 128:                       // 'eq'
-      shift(128);                   // 'eq'
-      break;
-    case 186:                       // 'ne'
-      shift(186);                   // 'ne'
-      break;
-    case 178:                       // 'lt'
-      shift(178);                   // 'lt'
-      break;
-    case 172:                       // 'le'
-      shift(172);                   // 'le'
-      break;
-    case 150:                       // 'gt'
-      shift(150);                   // 'gt'
-      break;
-    default:
-      shift(146);                   // 'ge'
-    }
-    eventHandler.endNonterminal("ValueComp", e0);
-  }
-
-  function try_ValueComp()
-  {
-    switch (l1)
-    {
-    case 128:                       // 'eq'
-      shiftT(128);                  // 'eq'
-      break;
-    case 186:                       // 'ne'
-      shiftT(186);                  // 'ne'
-      break;
-    case 178:                       // 'lt'
-      shiftT(178);                  // 'lt'
-      break;
-    case 172:                       // 'le'
-      shiftT(172);                  // 'le'
-      break;
-    case 150:                       // 'gt'
-      shiftT(150);                  // 'gt'
-      break;
-    default:
-      shiftT(146);                  // 'ge'
-    }
-  }
-
-  function parse_NodeComp()
-  {
-    eventHandler.startNonterminal("NodeComp", e0);
-    switch (l1)
-    {
-    case 164:                       // 'is'
-      shift(164);                   // 'is'
-      break;
-    case 57:                        // '<<'
-      shift(57);                    // '<<'
-      break;
-    default:
-      shift(63);                    // '>>'
-    }
-    eventHandler.endNonterminal("NodeComp", e0);
-  }
-
-  function try_NodeComp()
-  {
-    switch (l1)
-    {
-    case 164:                       // 'is'
-      shiftT(164);                  // 'is'
-      break;
-    case 57:                        // '<<'
-      shiftT(57);                   // '<<'
-      break;
-    default:
-      shiftT(63);                   // '>>'
-    }
-  }
-
-  function parse_ValidateExpr()
-  {
-    eventHandler.startNonterminal("ValidateExpr", e0);
-    shift(260);                     // 'validate'
-    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'
-    if (l1 != 276)                  // '{'
-    {
-      switch (l1)
-      {
-      case 252:                     // 'type'
-        shift(252);                 // 'type'
-        lookahead1W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        whitespace();
-        parse_TypeName();
-        break;
-      default:
-        whitespace();
-        parse_ValidationMode();
-      }
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("ValidateExpr", e0);
-  }
-
-  function try_ValidateExpr()
-  {
-    shiftT(260);                    // 'validate'
-    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'
-    if (l1 != 276)                  // '{'
-    {
-      switch (l1)
-      {
-      case 252:                     // 'type'
-        shiftT(252);                // 'type'
-        lookahead1W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        try_TypeName();
-        break;
-      default:
-        try_ValidationMode();
-      }
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_ValidationMode()
-  {
-    eventHandler.startNonterminal("ValidationMode", e0);
-    switch (l1)
-    {
-    case 171:                       // 'lax'
-      shift(171);                   // 'lax'
-      break;
-    default:
-      shift(240);                   // 'strict'
-    }
-    eventHandler.endNonterminal("ValidationMode", e0);
-  }
-
-  function try_ValidationMode()
-  {
-    switch (l1)
-    {
-    case 171:                       // 'lax'
-      shiftT(171);                  // 'lax'
-      break;
-    default:
-      shiftT(240);                  // 'strict'
-    }
-  }
-
-  function parse_ExtensionExpr()
-  {
-    eventHandler.startNonterminal("ExtensionExpr", e0);
-    for (;;)
-    {
-      whitespace();
-      parse_Pragma();
-      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'
-      if (l1 != 35)                 // '(#'
-      {
-        break;
-      }
-    }
-    shift(276);                     // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 282)                  // '}'
-    {
-      whitespace();
-      parse_Expr();
-    }
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("ExtensionExpr", e0);
-  }
-
-  function try_ExtensionExpr()
-  {
-    for (;;)
-    {
-      try_Pragma();
-      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'
-      if (l1 != 35)                 // '(#'
-      {
-        break;
-      }
-    }
-    shiftT(276);                    // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 282)                  // '}'
-    {
-      try_Expr();
-    }
-    shiftT(282);                    // '}'
-  }
-
-  function parse_Pragma()
-  {
-    eventHandler.startNonterminal("Pragma", e0);
-    shift(35);                      // '(#'
-    lookahead1(250);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |
-    if (l1 == 21)                   // S
-    {
-      shift(21);                    // S
-    }
-    parse_EQName();
-    lookahead1(10);                 // S | '#)'
-    if (l1 == 21)                   // S
-    {
-      shift(21);                    // S
-      lookahead1(0);                // PragmaContents
-      shift(1);                     // PragmaContents
-    }
-    lookahead1(5);                  // '#)'
-    shift(30);                      // '#)'
-    eventHandler.endNonterminal("Pragma", e0);
-  }
-
-  function try_Pragma()
-  {
-    shiftT(35);                     // '(#'
-    lookahead1(250);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |
-    if (l1 == 21)                   // S
-    {
-      shiftT(21);                   // S
-    }
-    try_EQName();
-    lookahead1(10);                 // S | '#)'
-    if (l1 == 21)                   // S
-    {
-      shiftT(21);                   // S
-      lookahead1(0);                // PragmaContents
-      shiftT(1);                    // PragmaContents
-    }
-    lookahead1(5);                  // '#)'
-    shiftT(30);                     // '#)'
-  }
-
-  function parse_PathExpr()
-  {
-    eventHandler.startNonterminal("PathExpr", e0);
-    switch (l1)
-    {
-    case 46:                        // '/'
-      shift(46);                    // '/'
-      lookahead1W(283);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 25:                      // EOF
-      case 26:                      // '!'
-      case 27:                      // '!='
-      case 37:                      // ')'
-      case 38:                      // '*'
-      case 40:                      // '+'
-      case 41:                      // ','
-      case 42:                      // '-'
-      case 49:                      // ':'
-      case 53:                      // ';'
-      case 57:                      // '<<'
-      case 58:                      // '<='
-      case 60:                      // '='
-      case 61:                      // '>'
-      case 62:                      // '>='
-      case 63:                      // '>>'
-      case 69:                      // ']'
-      case 87:                      // 'by'
-      case 99:                      // 'contains'
-      case 205:                     // 'paragraphs'
-      case 232:                     // 'sentences'
-      case 247:                     // 'times'
-      case 273:                     // 'words'
-      case 279:                     // '|'
-      case 280:                     // '||'
-      case 281:                     // '|}'
-      case 282:                     // '}'
-        break;
-      default:
-        whitespace();
-        parse_RelativePathExpr();
-      }
-      break;
-    case 47:                        // '//'
-      shift(47);                    // '//'
-      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_RelativePathExpr();
-      break;
-    default:
-      parse_RelativePathExpr();
-    }
-    eventHandler.endNonterminal("PathExpr", e0);
-  }
-
-  function try_PathExpr()
-  {
-    switch (l1)
-    {
-    case 46:                        // '/'
-      shiftT(46);                   // '/'
-      lookahead1W(283);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 25:                      // EOF
-      case 26:                      // '!'
-      case 27:                      // '!='
-      case 37:                      // ')'
-      case 38:                      // '*'
-      case 40:                      // '+'
-      case 41:                      // ','
-      case 42:                      // '-'
-      case 49:                      // ':'
-      case 53:                      // ';'
-      case 57:                      // '<<'
-      case 58:                      // '<='
-      case 60:                      // '='
-      case 61:                      // '>'
-      case 62:                      // '>='
-      case 63:                      // '>>'
-      case 69:                      // ']'
-      case 87:                      // 'by'
-      case 99:                      // 'contains'
-      case 205:                     // 'paragraphs'
-      case 232:                     // 'sentences'
-      case 247:                     // 'times'
-      case 273:                     // 'words'
-      case 279:                     // '|'
-      case 280:                     // '||'
-      case 281:                     // '|}'
-      case 282:                     // '}'
-        break;
-      default:
-        try_RelativePathExpr();
-      }
-      break;
-    case 47:                        // '//'
-      shiftT(47);                   // '//'
-      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_RelativePathExpr();
-      break;
-    default:
-      try_RelativePathExpr();
-    }
-  }
-
-  function parse_RelativePathExpr()
-  {
-    eventHandler.startNonterminal("RelativePathExpr", e0);
-    parse_StepExpr();
-    for (;;)
-    {
-      switch (l1)
-      {
-      case 26:                      // '!'
-        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 25                  // EOF
-       && lk != 27                  // '!='
-       && lk != 37                  // ')'
-       && lk != 38                  // '*'
-       && lk != 40                  // '+'
-       && lk != 41                  // ','
-       && lk != 42                  // '-'
-       && lk != 46                  // '/'
-       && lk != 47                  // '//'
-       && lk != 49                  // ':'
-       && lk != 53                  // ';'
-       && lk != 54                  // '<'
-       && lk != 57                  // '<<'
-       && lk != 58                  // '<='
-       && lk != 60                  // '='
-       && lk != 61                  // '>'
-       && lk != 62                  // '>='
-       && lk != 63                  // '>>'
-       && lk != 69                  // ']'
-       && lk != 70                  // 'after'
-       && lk != 75                  // 'and'
-       && lk != 79                  // 'as'
-       && lk != 80                  // 'ascending'
-       && lk != 81                  // 'at'
-       && lk != 84                  // 'before'
-       && lk != 87                  // 'by'
-       && lk != 88                  // 'case'
-       && lk != 89                  // 'cast'
-       && lk != 90                  // 'castable'
-       && lk != 94                  // 'collation'
-       && lk != 99                  // 'contains'
-       && lk != 105                 // 'count'
-       && lk != 109                 // 'default'
-       && lk != 113                 // 'descending'
-       && lk != 118                 // 'div'
-       && lk != 122                 // 'else'
-       && lk != 123                 // 'empty'
-       && lk != 126                 // 'end'
-       && lk != 128                 // 'eq'
-       && lk != 131                 // 'except'
-       && lk != 137                 // 'for'
-       && lk != 146                 // 'ge'
-       && lk != 148                 // 'group'
-       && lk != 150                 // 'gt'
-       && lk != 151                 // 'idiv'
-       && lk != 160                 // 'instance'
-       && lk != 162                 // 'intersect'
-       && lk != 163                 // 'into'
-       && lk != 164                 // 'is'
-       && lk != 172                 // 'le'
-       && lk != 174                 // 'let'
-       && lk != 178                 // 'lt'
-       && lk != 180                 // 'mod'
-       && lk != 181                 // 'modify'
-       && lk != 186                 // 'ne'
-       && lk != 198                 // 'only'
-       && lk != 200                 // 'or'
-       && lk != 201                 // 'order'
-       && lk != 205                 // 'paragraphs'
-       && lk != 220                 // 'return'
-       && lk != 224                 // 'satisfies'
-       && lk != 232                 // 'sentences'
-       && lk != 236                 // 'stable'
-       && lk != 237                 // 'start'
-       && lk != 247                 // 'times'
-       && lk != 248                 // 'to'
-       && lk != 249                 // 'treat'
-       && lk != 254                 // 'union'
-       && lk != 266                 // 'where'
-       && lk != 270                 // 'with'
-       && lk != 273                 // 'words'
-       && lk != 279                 // '|'
-       && lk != 280                 // '||'
-       && lk != 281                 // '|}'
-       && lk != 282                 // '}'
-       && lk != 23578               // '!' '/'
-       && lk != 24090)              // '!' '//'
-      {
-        lk = memoized(2, e0);
-        if (lk == 0)
-        {
-          var b0A = b0; var e0A = e0; var l1A = l1;
-          var b1A = b1; var e1A = e1; var l2A = l2;
-          var b2A = b2; var e2A = e2;
-          try
-          {
-            switch (l1)
-            {
-            case 46:                // '/'
-              shiftT(46);           // '/'
-              break;
-            case 47:                // '//'
-              shiftT(47);           // '//'
-              break;
-            default:
-              shiftT(26);           // '!'
-            }
-            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-            try_StepExpr();
-            lk = -1;
-          }
-          catch (p1A)
-          {
-            lk = -2;
-          }
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(2, e0, lk);
-        }
-      }
-      if (lk != -1
-       && lk != 46                  // '/'
-       && lk != 47)                 // '//'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 46:                      // '/'
-        shift(46);                  // '/'
-        break;
-      case 47:                      // '//'
-        shift(47);                  // '//'
-        break;
-      default:
-        shift(26);                  // '!'
-      }
-      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_StepExpr();
-    }
-    eventHandler.endNonterminal("RelativePathExpr", e0);
-  }
-
-  function try_RelativePathExpr()
-  {
-    try_StepExpr();
-    for (;;)
-    {
-      switch (l1)
-      {
-      case 26:                      // '!'
-        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 25                  // EOF
-       && lk != 27                  // '!='
-       && lk != 37                  // ')'
-       && lk != 38                  // '*'
-       && lk != 40                  // '+'
-       && lk != 41                  // ','
-       && lk != 42                  // '-'
-       && lk != 46                  // '/'
-       && lk != 47                  // '//'
-       && lk != 49                  // ':'
-       && lk != 53                  // ';'
-       && lk != 54                  // '<'
-       && lk != 57                  // '<<'
-       && lk != 58                  // '<='
-       && lk != 60                  // '='
-       && lk != 61                  // '>'
-       && lk != 62                  // '>='
-       && lk != 63                  // '>>'
-       && lk != 69                  // ']'
-       && lk != 70                  // 'after'
-       && lk != 75                  // 'and'
-       && lk != 79                  // 'as'
-       && lk != 80                  // 'ascending'
-       && lk != 81                  // 'at'
-       && lk != 84                  // 'before'
-       && lk != 87                  // 'by'
-       && lk != 88                  // 'case'
-       && lk != 89                  // 'cast'
-       && lk != 90                  // 'castable'
-       && lk != 94                  // 'collation'
-       && lk != 99                  // 'contains'
-       && lk != 105                 // 'count'
-       && lk != 109                 // 'default'
-       && lk != 113                 // 'descending'
-       && lk != 118                 // 'div'
-       && lk != 122                 // 'else'
-       && lk != 123                 // 'empty'
-       && lk != 126                 // 'end'
-       && lk != 128                 // 'eq'
-       && lk != 131                 // 'except'
-       && lk != 137                 // 'for'
-       && lk != 146                 // 'ge'
-       && lk != 148                 // 'group'
-       && lk != 150                 // 'gt'
-       && lk != 151                 // 'idiv'
-       && lk != 160                 // 'instance'
-       && lk != 162                 // 'intersect'
-       && lk != 163                 // 'into'
-       && lk != 164                 // 'is'
-       && lk != 172                 // 'le'
-       && lk != 174                 // 'let'
-       && lk != 178                 // 'lt'
-       && lk != 180                 // 'mod'
-       && lk != 181                 // 'modify'
-       && lk != 186                 // 'ne'
-       && lk != 198                 // 'only'
-       && lk != 200                 // 'or'
-       && lk != 201                 // 'order'
-       && lk != 205                 // 'paragraphs'
-       && lk != 220                 // 'return'
-       && lk != 224                 // 'satisfies'
-       && lk != 232                 // 'sentences'
-       && lk != 236                 // 'stable'
-       && lk != 237                 // 'start'
-       && lk != 247                 // 'times'
-       && lk != 248                 // 'to'
-       && lk != 249                 // 'treat'
-       && lk != 254                 // 'union'
-       && lk != 266                 // 'where'
-       && lk != 270                 // 'with'
-       && lk != 273                 // 'words'
-       && lk != 279                 // '|'
-       && lk != 280                 // '||'
-       && lk != 281                 // '|}'
-       && lk != 282                 // '}'
-       && lk != 23578               // '!' '/'
-       && lk != 24090)              // '!' '//'
-      {
-        lk = memoized(2, e0);
-        if (lk == 0)
-        {
-          var b0A = b0; var e0A = e0; var l1A = l1;
-          var b1A = b1; var e1A = e1; var l2A = l2;
-          var b2A = b2; var e2A = e2;
-          try
-          {
-            switch (l1)
-            {
-            case 46:                // '/'
-              shiftT(46);           // '/'
-              break;
-            case 47:                // '//'
-              shiftT(47);           // '//'
-              break;
-            default:
-              shiftT(26);           // '!'
-            }
-            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-            try_StepExpr();
-            memoize(2, e0A, -1);
-            continue;
-          }
-          catch (p1A)
-          {
-            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-            b2 = b2A; e2 = e2A; end = e2A; }}
-            memoize(2, e0A, -2);
-            break;
-          }
-        }
-      }
-      if (lk != -1
-       && lk != 46                  // '/'
-       && lk != 47)                 // '//'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 46:                      // '/'
-        shiftT(46);                 // '/'
-        break;
-      case 47:                      // '//'
-        shiftT(47);                 // '//'
-        break;
-      default:
-        shiftT(26);                 // '!'
-      }
-      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_StepExpr();
-    }
-  }
-
-  function parse_StepExpr()
-  {
-    eventHandler.startNonterminal("StepExpr", e0);
-    switch (l1)
-    {
-    case 82:                        // 'attribute'
-      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |
-      break;
-    case 121:                       // 'element'
-      lookahead2W(280);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |
-      break;
-    case 184:                       // 'namespace'
-    case 216:                       // 'processing-instruction'
-      lookahead2W(279);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |
-      break;
-    case 96:                        // 'comment'
-    case 119:                       // 'document'
-    case 202:                       // 'ordered'
-    case 244:                       // 'text'
-    case 256:                       // 'unordered'
-      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 124:                       // 'empty-sequence'
-    case 152:                       // 'if'
-    case 165:                       // 'item'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    case 73:                        // 'ancestor'
-    case 74:                        // 'ancestor-or-self'
-    case 93:                        // 'child'
-    case 111:                       // 'descendant'
-    case 112:                       // 'descendant-or-self'
-    case 135:                       // 'following'
-    case 136:                       // 'following-sibling'
-    case 206:                       // 'parent'
-    case 212:                       // 'preceding'
-    case 213:                       // 'preceding-sibling'
-    case 229:                       // 'self'
-      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 6:                         // EQName^Token
-    case 70:                        // 'after'
-    case 72:                        // 'allowing'
-    case 75:                        // 'and'
-    case 78:                        // 'array'
-    case 79:                        // 'as'
-    case 80:                        // 'ascending'
-    case 81:                        // 'at'
-    case 83:                        // 'base-uri'
-    case 84:                        // 'before'
-    case 85:                        // 'boundary-space'
-    case 86:                        // 'break'
-    case 88:                        // 'case'
-    case 89:                        // 'cast'
-    case 90:                        // 'castable'
-    case 91:                        // 'catch'
-    case 94:                        // 'collation'
-    case 97:                        // 'constraint'
-    case 98:                        // 'construction'
-    case 101:                       // 'context'
-    case 102:                       // 'continue'
-    case 103:                       // 'copy'
-    case 104:                       // 'copy-namespaces'
-    case 105:                       // 'count'
-    case 106:                       // 'decimal-format'
-    case 108:                       // 'declare'
-    case 109:                       // 'default'
-    case 110:                       // 'delete'
-    case 113:                       // 'descending'
-    case 118:                       // 'div'
-    case 120:                       // 'document-node'
-    case 122:                       // 'else'
-    case 123:                       // 'empty'
-    case 125:                       // 'encoding'
-    case 126:                       // 'end'
-    case 128:                       // 'eq'
-    case 129:                       // 'every'
-    case 131:                       // 'except'
-    case 132:                       // 'exit'
-    case 133:                       // 'external'
-    case 134:                       // 'first'
-    case 137:                       // 'for'
-    case 141:                       // 'ft-option'
-    case 145:                       // 'function'
-    case 146:                       // 'ge'
-    case 148:                       // 'group'
-    case 150:                       // 'gt'
-    case 151:                       // 'idiv'
-    case 153:                       // 'import'
-    case 154:                       // 'in'
-    case 155:                       // 'index'
-    case 159:                       // 'insert'
-    case 160:                       // 'instance'
-    case 161:                       // 'integrity'
-    case 162:                       // 'intersect'
-    case 163:                       // 'into'
-    case 164:                       // 'is'
-    case 167:                       // 'json-item'
-    case 170:                       // 'last'
-    case 171:                       // 'lax'
-    case 172:                       // 'le'
-    case 174:                       // 'let'
-    case 176:                       // 'loop'
-    case 178:                       // 'lt'
-    case 180:                       // 'mod'
-    case 181:                       // 'modify'
-    case 182:                       // 'module'
-    case 185:                       // 'namespace-node'
-    case 186:                       // 'ne'
-    case 191:                       // 'node'
-    case 192:                       // 'nodes'
-    case 194:                       // 'object'
-    case 198:                       // 'only'
-    case 199:                       // 'option'
-    case 200:                       // 'or'
-    case 201:                       // 'order'
-    case 203:                       // 'ordering'
-    case 218:                       // 'rename'
-    case 219:                       // 'replace'
-    case 220:                       // 'return'
-    case 221:                       // 'returning'
-    case 222:                       // 'revalidation'
-    case 224:                       // 'satisfies'
-    case 225:                       // 'schema'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 228:                       // 'score'
-    case 234:                       // 'sliding'
-    case 235:                       // 'some'
-    case 236:                       // 'stable'
-    case 237:                       // 'start'
-    case 240:                       // 'strict'
-    case 248:                       // 'to'
-    case 249:                       // 'treat'
-    case 250:                       // 'try'
-    case 251:                       // 'tumbling'
-    case 252:                       // 'type'
-    case 254:                       // 'union'
-    case 257:                       // 'updating'
-    case 260:                       // 'validate'
-    case 261:                       // 'value'
-    case 262:                       // 'variable'
-    case 263:                       // 'version'
-    case 266:                       // 'where'
-    case 267:                       // 'while'
-    case 270:                       // 'with'
-    case 274:                       // 'xquery'
-      lookahead2W(242);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 17486                 // 'array' '('
-     || lk == 17575                 // 'json-item' '('
-     || lk == 17602                 // 'object' '('
-     || lk == 35922                 // 'attribute' 'after'
-     || lk == 35961                 // 'element' 'after'
-     || lk == 36024                 // 'namespace' 'after'
-     || lk == 36056                 // 'processing-instruction' 'after'
-     || lk == 38482                 // 'attribute' 'and'
-     || lk == 38521                 // 'element' 'and'
-     || lk == 38584                 // 'namespace' 'and'
-     || lk == 38616                 // 'processing-instruction' 'and'
-     || lk == 40530                 // 'attribute' 'as'
-     || lk == 40569                 // 'element' 'as'
-     || lk == 40632                 // 'namespace' 'as'
-     || lk == 40664                 // 'processing-instruction' 'as'
-     || lk == 41042                 // 'attribute' 'ascending'
-     || lk == 41081                 // 'element' 'ascending'
-     || lk == 41144                 // 'namespace' 'ascending'
-     || lk == 41176                 // 'processing-instruction' 'ascending'
-     || lk == 41554                 // 'attribute' 'at'
-     || lk == 41593                 // 'element' 'at'
-     || lk == 41656                 // 'namespace' 'at'
-     || lk == 41688                 // 'processing-instruction' 'at'
-     || lk == 43090                 // 'attribute' 'before'
-     || lk == 43129                 // 'element' 'before'
-     || lk == 43192                 // 'namespace' 'before'
-     || lk == 43224                 // 'processing-instruction' 'before'
-     || lk == 45138                 // 'attribute' 'case'
-     || lk == 45177                 // 'element' 'case'
-     || lk == 45240                 // 'namespace' 'case'
-     || lk == 45272                 // 'processing-instruction' 'case'
-     || lk == 45650                 // 'attribute' 'cast'
-     || lk == 45689                 // 'element' 'cast'
-     || lk == 45752                 // 'namespace' 'cast'
-     || lk == 45784                 // 'processing-instruction' 'cast'
-     || lk == 46162                 // 'attribute' 'castable'
-     || lk == 46201                 // 'element' 'castable'
-     || lk == 46264                 // 'namespace' 'castable'
-     || lk == 46296                 // 'processing-instruction' 'castable'
-     || lk == 48210                 // 'attribute' 'collation'
-     || lk == 48249                 // 'element' 'collation'
-     || lk == 48312                 // 'namespace' 'collation'
-     || lk == 48344                 // 'processing-instruction' 'collation'
-     || lk == 53842                 // 'attribute' 'count'
-     || lk == 53881                 // 'element' 'count'
-     || lk == 53944                 // 'namespace' 'count'
-     || lk == 53976                 // 'processing-instruction' 'count'
-     || lk == 55890                 // 'attribute' 'default'
-     || lk == 55929                 // 'element' 'default'
-     || lk == 55992                 // 'namespace' 'default'
-     || lk == 56024                 // 'processing-instruction' 'default'
-     || lk == 57938                 // 'attribute' 'descending'
-     || lk == 57977                 // 'element' 'descending'
-     || lk == 58040                 // 'namespace' 'descending'
-     || lk == 58072                 // 'processing-instruction' 'descending'
-     || lk == 60498                 // 'attribute' 'div'
-     || lk == 60537                 // 'element' 'div'
-     || lk == 60600                 // 'namespace' 'div'
-     || lk == 60632                 // 'processing-instruction' 'div'
-     || lk == 62546                 // 'attribute' 'else'
-     || lk == 62585                 // 'element' 'else'
-     || lk == 62648                 // 'namespace' 'else'
-     || lk == 62680                 // 'processing-instruction' 'else'
-     || lk == 63058                 // 'attribute' 'empty'
-     || lk == 63097                 // 'element' 'empty'
-     || lk == 63160                 // 'namespace' 'empty'
-     || lk == 63192                 // 'processing-instruction' 'empty'
-     || lk == 64594                 // 'attribute' 'end'
-     || lk == 64633                 // 'element' 'end'
-     || lk == 64696                 // 'namespace' 'end'
-     || lk == 64728                 // 'processing-instruction' 'end'
-     || lk == 65618                 // 'attribute' 'eq'
-     || lk == 65657                 // 'element' 'eq'
-     || lk == 65720                 // 'namespace' 'eq'
-     || lk == 65752                 // 'processing-instruction' 'eq'
-     || lk == 67154                 // 'attribute' 'except'
-     || lk == 67193                 // 'element' 'except'
-     || lk == 67256                 // 'namespace' 'except'
-     || lk == 67288                 // 'processing-instruction' 'except'
-     || lk == 70226                 // 'attribute' 'for'
-     || lk == 70265                 // 'element' 'for'
-     || lk == 70328                 // 'namespace' 'for'
-     || lk == 70360                 // 'processing-instruction' 'for'
-     || lk == 74834                 // 'attribute' 'ge'
-     || lk == 74873                 // 'element' 'ge'
-     || lk == 74936                 // 'namespace' 'ge'
-     || lk == 74968                 // 'processing-instruction' 'ge'
-     || lk == 75858                 // 'attribute' 'group'
-     || lk == 75897                 // 'element' 'group'
-     || lk == 75960                 // 'namespace' 'group'
-     || lk == 75992                 // 'processing-instruction' 'group'
-     || lk == 76882                 // 'attribute' 'gt'
-     || lk == 76921                 // 'element' 'gt'
-     || lk == 76984                 // 'namespace' 'gt'
-     || lk == 77016                 // 'processing-instruction' 'gt'
-     || lk == 77394                 // 'attribute' 'idiv'
-     || lk == 77433                 // 'element' 'idiv'
-     || lk == 77496                 // 'namespace' 'idiv'
-     || lk == 77528                 // 'processing-instruction' 'idiv'
-     || lk == 82002                 // 'attribute' 'instance'
-     || lk == 82041                 // 'element' 'instance'
-     || lk == 82104                 // 'namespace' 'instance'
-     || lk == 82136                 // 'processing-instruction' 'instance'
-     || lk == 83026                 // 'attribute' 'intersect'
-     || lk == 83065                 // 'element' 'intersect'
-     || lk == 83128                 // 'namespace' 'intersect'
-     || lk == 83160                 // 'processing-instruction' 'intersect'
-     || lk == 83538                 // 'attribute' 'into'
-     || lk == 83577                 // 'element' 'into'
-     || lk == 83640                 // 'namespace' 'into'
-     || lk == 83672                 // 'processing-instruction' 'into'
-     || lk == 84050                 // 'attribute' 'is'
-     || lk == 84089                 // 'element' 'is'
-     || lk == 84152                 // 'namespace' 'is'
-     || lk == 84184                 // 'processing-instruction' 'is'
-     || lk == 88146                 // 'attribute' 'le'
-     || lk == 88185                 // 'element' 'le'
-     || lk == 88248                 // 'namespace' 'le'
-     || lk == 88280                 // 'processing-instruction' 'le'
-     || lk == 89170                 // 'attribute' 'let'
-     || lk == 89209                 // 'element' 'let'
-     || lk == 89272                 // 'namespace' 'let'
-     || lk == 89304                 // 'processing-instruction' 'let'
-     || lk == 91218                 // 'attribute' 'lt'
-     || lk == 91257                 // 'element' 'lt'
-     || lk == 91320                 // 'namespace' 'lt'
-     || lk == 91352                 // 'processing-instruction' 'lt'
-     || lk == 92242                 // 'attribute' 'mod'
-     || lk == 92281                 // 'element' 'mod'
-     || lk == 92344                 // 'namespace' 'mod'
-     || lk == 92376                 // 'processing-instruction' 'mod'
-     || lk == 92754                 // 'attribute' 'modify'
-     || lk == 92793                 // 'element' 'modify'
-     || lk == 92856                 // 'namespace' 'modify'
-     || lk == 92888                 // 'processing-instruction' 'modify'
-     || lk == 95314                 // 'attribute' 'ne'
-     || lk == 95353                 // 'element' 'ne'
-     || lk == 95416                 // 'namespace' 'ne'
-     || lk == 95448                 // 'processing-instruction' 'ne'
-     || lk == 101458                // 'attribute' 'only'
-     || lk == 101497                // 'element' 'only'
-     || lk == 101560                // 'namespace' 'only'
-     || lk == 101592                // 'processing-instruction' 'only'
-     || lk == 102482                // 'attribute' 'or'
-     || lk == 102521                // 'element' 'or'
-     || lk == 102584                // 'namespace' 'or'
-     || lk == 102616                // 'processing-instruction' 'or'
-     || lk == 102994                // 'attribute' 'order'
-     || lk == 103033                // 'element' 'order'
-     || lk == 103096                // 'namespace' 'order'
-     || lk == 103128                // 'processing-instruction' 'order'
-     || lk == 112722                // 'attribute' 'return'
-     || lk == 112761                // 'element' 'return'
-     || lk == 112824                // 'namespace' 'return'
-     || lk == 112856                // 'processing-instruction' 'return'
-     || lk == 114770                // 'attribute' 'satisfies'
-     || lk == 114809                // 'element' 'satisfies'
-     || lk == 114872                // 'namespace' 'satisfies'
-     || lk == 114904                // 'processing-instruction' 'satisfies'
-     || lk == 120914                // 'attribute' 'stable'
-     || lk == 120953                // 'element' 'stable'
-     || lk == 121016                // 'namespace' 'stable'
-     || lk == 121048                // 'processing-instruction' 'stable'
-     || lk == 121426                // 'attribute' 'start'
-     || lk == 121465                // 'element' 'start'
-     || lk == 121528                // 'namespace' 'start'
-     || lk == 121560                // 'processing-instruction' 'start'
-     || lk == 127058                // 'attribute' 'to'
-     || lk == 127097                // 'element' 'to'
-     || lk == 127160                // 'namespace' 'to'
-     || lk == 127192                // 'processing-instruction' 'to'
-     || lk == 127570                // 'attribute' 'treat'
-     || lk == 127609                // 'element' 'treat'
-     || lk == 127672                // 'namespace' 'treat'
-     || lk == 127704                // 'processing-instruction' 'treat'
-     || lk == 130130                // 'attribute' 'union'
-     || lk == 130169                // 'element' 'union'
-     || lk == 130232                // 'namespace' 'union'
-     || lk == 130264                // 'processing-instruction' 'union'
-     || lk == 136274                // 'attribute' 'where'
-     || lk == 136313                // 'element' 'where'
-     || lk == 136376                // 'namespace' 'where'
-     || lk == 136408                // 'processing-instruction' 'where'
-     || lk == 138322                // 'attribute' 'with'
-     || lk == 138361                // 'element' 'with'
-     || lk == 138424                // 'namespace' 'with'
-     || lk == 138456)               // 'processing-instruction' 'with'
-    {
-      lk = memoized(3, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_PostfixExpr();
-          lk = -1;
-        }
-        catch (p1A)
-        {
-          lk = -2;
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(3, e0, lk);
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-    case 8:                         // IntegerLiteral
-    case 9:                         // DecimalLiteral
-    case 10:                        // DoubleLiteral
-    case 11:                        // StringLiteral
-    case 31:                        // '$'
-    case 32:                        // '%'
-    case 34:                        // '('
-    case 44:                        // '.'
-    case 54:                        // '<'
-    case 55:                        // '<!--'
-    case 59:                        // '<?'
-    case 68:                        // '['
-    case 276:                       // '{'
-    case 278:                       // '{|'
-    case 3154:                      // 'attribute' EQName^Token
-    case 3193:                      // 'element' EQName^Token
-    case 9912:                      // 'namespace' NCName^Token
-    case 9944:                      // 'processing-instruction' NCName^Token
-    case 14854:                     // EQName^Token '#'
-    case 14918:                     // 'after' '#'
-    case 14920:                     // 'allowing' '#'
-    case 14921:                     // 'ancestor' '#'
-    case 14922:                     // 'ancestor-or-self' '#'
-    case 14923:                     // 'and' '#'
-    case 14926:                     // 'array' '#'
-    case 14927:                     // 'as' '#'
-    case 14928:                     // 'ascending' '#'
-    case 14929:                     // 'at' '#'
-    case 14930:                     // 'attribute' '#'
-    case 14931:                     // 'base-uri' '#'
-    case 14932:                     // 'before' '#'
-    case 14933:                     // 'boundary-space' '#'
-    case 14934:                     // 'break' '#'
-    case 14936:                     // 'case' '#'
-    case 14937:                     // 'cast' '#'
-    case 14938:                     // 'castable' '#'
-    case 14939:                     // 'catch' '#'
-    case 14941:                     // 'child' '#'
-    case 14942:                     // 'collation' '#'
-    case 14944:                     // 'comment' '#'
-    case 14945:                     // 'constraint' '#'
-    case 14946:                     // 'construction' '#'
-    case 14949:                     // 'context' '#'
-    case 14950:                     // 'continue' '#'
-    case 14951:                     // 'copy' '#'
-    case 14952:                     // 'copy-namespaces' '#'
-    case 14953:                     // 'count' '#'
-    case 14954:                     // 'decimal-format' '#'
-    case 14956:                     // 'declare' '#'
-    case 14957:                     // 'default' '#'
-    case 14958:                     // 'delete' '#'
-    case 14959:                     // 'descendant' '#'
-    case 14960:                     // 'descendant-or-self' '#'
-    case 14961:                     // 'descending' '#'
-    case 14966:                     // 'div' '#'
-    case 14967:                     // 'document' '#'
-    case 14968:                     // 'document-node' '#'
-    case 14969:                     // 'element' '#'
-    case 14970:                     // 'else' '#'
-    case 14971:                     // 'empty' '#'
-    case 14972:                     // 'empty-sequence' '#'
-    case 14973:                     // 'encoding' '#'
-    case 14974:                     // 'end' '#'
-    case 14976:                     // 'eq' '#'
-    case 14977:                     // 'every' '#'
-    case 14979:                     // 'except' '#'
-    case 14980:                     // 'exit' '#'
-    case 14981:                     // 'external' '#'
-    case 14982:                     // 'first' '#'
-    case 14983:                     // 'following' '#'
-    case 14984:                     // 'following-sibling' '#'
-    case 14985:                     // 'for' '#'
-    case 14989:                     // 'ft-option' '#'
-    case 14993:                     // 'function' '#'
-    case 14994:                     // 'ge' '#'
-    case 14996:                     // 'group' '#'
-    case 14998:                     // 'gt' '#'
-    case 14999:                     // 'idiv' '#'
-    case 15000:                     // 'if' '#'
-    case 15001:                     // 'import' '#'
-    case 15002:                     // 'in' '#'
-    case 15003:                     // 'index' '#'
-    case 15007:                     // 'insert' '#'
-    case 15008:                     // 'instance' '#'
-    case 15009:                     // 'integrity' '#'
-    case 15010:                     // 'intersect' '#'
-    case 15011:                     // 'into' '#'
-    case 15012:                     // 'is' '#'
-    case 15013:                     // 'item' '#'
-    case 15015:                     // 'json-item' '#'
-    case 15018:                     // 'last' '#'
-    case 15019:                     // 'lax' '#'
-    case 15020:                     // 'le' '#'
-    case 15022:                     // 'let' '#'
-    case 15024:                     // 'loop' '#'
-    case 15026:                     // 'lt' '#'
-    case 15028:                     // 'mod' '#'
-    case 15029:                     // 'modify' '#'
-    case 15030:                     // 'module' '#'
-    case 15032:                     // 'namespace' '#'
-    case 15033:                     // 'namespace-node' '#'
-    case 15034:                     // 'ne' '#'
-    case 15039:                     // 'node' '#'
-    case 15040:                     // 'nodes' '#'
-    case 15042:                     // 'object' '#'
-    case 15046:                     // 'only' '#'
-    case 15047:                     // 'option' '#'
-    case 15048:                     // 'or' '#'
-    case 15049:                     // 'order' '#'
-    case 15050:                     // 'ordered' '#'
-    case 15051:                     // 'ordering' '#'
-    case 15054:                     // 'parent' '#'
-    case 15060:                     // 'preceding' '#'
-    case 15061:                     // 'preceding-sibling' '#'
-    case 15064:                     // 'processing-instruction' '#'
-    case 15066:                     // 'rename' '#'
-    case 15067:                     // 'replace' '#'
-    case 15068:                     // 'return' '#'
-    case 15069:                     // 'returning' '#'
-    case 15070:                     // 'revalidation' '#'
-    case 15072:                     // 'satisfies' '#'
-    case 15073:                     // 'schema' '#'
-    case 15074:                     // 'schema-attribute' '#'
-    case 15075:                     // 'schema-element' '#'
-    case 15076:                     // 'score' '#'
-    case 15077:                     // 'self' '#'
-    case 15082:                     // 'sliding' '#'
-    case 15083:                     // 'some' '#'
-    case 15084:                     // 'stable' '#'
-    case 15085:                     // 'start' '#'
-    case 15088:                     // 'strict' '#'
-    case 15091:                     // 'switch' '#'
-    case 15092:                     // 'text' '#'
-    case 15096:                     // 'to' '#'
-    case 15097:                     // 'treat' '#'
-    case 15098:                     // 'try' '#'
-    case 15099:                     // 'tumbling' '#'
-    case 15100:                     // 'type' '#'
-    case 15101:                     // 'typeswitch' '#'
-    case 15102:                     // 'union' '#'
-    case 15104:                     // 'unordered' '#'
-    case 15105:                     // 'updating' '#'
-    case 15108:                     // 'validate' '#'
-    case 15109:                     // 'value' '#'
-    case 15110:                     // 'variable' '#'
-    case 15111:                     // 'version' '#'
-    case 15114:                     // 'where' '#'
-    case 15115:                     // 'while' '#'
-    case 15118:                     // 'with' '#'
-    case 15122:                     // 'xquery' '#'
-    case 17414:                     // EQName^Token '('
-    case 17478:                     // 'after' '('
-    case 17480:                     // 'allowing' '('
-    case 17481:                     // 'ancestor' '('
-    case 17482:                     // 'ancestor-or-self' '('
-    case 17483:                     // 'and' '('
-    case 17487:                     // 'as' '('
-    case 17488:                     // 'ascending' '('
-    case 17489:                     // 'at' '('
-    case 17491:                     // 'base-uri' '('
-    case 17492:                     // 'before' '('
-    case 17493:                     // 'boundary-space' '('
-    case 17494:                     // 'break' '('
-    case 17496:                     // 'case' '('
-    case 17497:                     // 'cast' '('
-    case 17498:                     // 'castable' '('
-    case 17499:                     // 'catch' '('
-    case 17501:                     // 'child' '('
-    case 17502:                     // 'collation' '('
-    case 17505:                     // 'constraint' '('
-    case 17506:                     // 'construction' '('
-    case 17509:                     // 'context' '('
-    case 17510:                     // 'continue' '('
-    case 17511:                     // 'copy' '('
-    case 17512:                     // 'copy-namespaces' '('
-    case 17513:                     // 'count' '('
-    case 17514:                     // 'decimal-format' '('
-    case 17516:                     // 'declare' '('
-    case 17517:                     // 'default' '('
-    case 17518:                     // 'delete' '('
-    case 17519:                     // 'descendant' '('
-    case 17520:                     // 'descendant-or-self' '('
-    case 17521:                     // 'descending' '('
-    case 17526:                     // 'div' '('
-    case 17527:                     // 'document' '('
-    case 17530:                     // 'else' '('
-    case 17531:                     // 'empty' '('
-    case 17533:                     // 'encoding' '('
-    case 17534:                     // 'end' '('
-    case 17536:                     // 'eq' '('
-    case 17537:                     // 'every' '('
-    case 17539:                     // 'except' '('
-    case 17540:                     // 'exit' '('
-    case 17541:                     // 'external' '('
-    case 17542:                     // 'first' '('
-    case 17543:                     // 'following' '('
-    case 17544:                     // 'following-sibling' '('
-    case 17545:                     // 'for' '('
-    case 17549:                     // 'ft-option' '('
-    case 17553:                     // 'function' '('
-    case 17554:                     // 'ge' '('
-    case 17556:                     // 'group' '('
-    case 17558:                     // 'gt' '('
-    case 17559:                     // 'idiv' '('
-    case 17561:                     // 'import' '('
-    case 17562:                     // 'in' '('
-    case 17563:                     // 'index' '('
-    case 17567:                     // 'insert' '('
-    case 17568:                     // 'instance' '('
-    case 17569:                     // 'integrity' '('
-    case 17570:                     // 'intersect' '('
-    case 17571:                     // 'into' '('
-    case 17572:                     // 'is' '('
-    case 17578:                     // 'last' '('
-    case 17579:                     // 'lax' '('
-    case 17580:                     // 'le' '('
-    case 17582:                     // 'let' '('
-    case 17584:                     // 'loop' '('
-    case 17586:                     // 'lt' '('
-    case 17588:                     // 'mod' '('
-    case 17589:                     // 'modify' '('
-    case 17590:                     // 'module' '('
-    case 17592:                     // 'namespace' '('
-    case 17594:                     // 'ne' '('
-    case 17600:                     // 'nodes' '('
-    case 17606:                     // 'only' '('
-    case 17607:                     // 'option' '('
-    case 17608:                     // 'or' '('
-    case 17609:                     // 'order' '('
-    case 17610:                     // 'ordered' '('
-    case 17611:                     // 'ordering' '('
-    case 17614:                     // 'parent' '('
-    case 17620:                     // 'preceding' '('
-    case 17621:                     // 'preceding-sibling' '('
-    case 17626:                     // 'rename' '('
-    case 17627:                     // 'replace' '('
-    case 17628:                     // 'return' '('
-    case 17629:                     // 'returning' '('
-    case 17630:                     // 'revalidation' '('
-    case 17632:                     // 'satisfies' '('
-    case 17633:                     // 'schema' '('
-    case 17636:                     // 'score' '('
-    case 17637:                     // 'self' '('
-    case 17642:                     // 'sliding' '('
-    case 17643:                     // 'some' '('
-    case 17644:                     // 'stable' '('
-    case 17645:                     // 'start' '('
-    case 17648:                     // 'strict' '('
-    case 17656:                     // 'to' '('
-    case 17657:                     // 'treat' '('
-    case 17658:                     // 'try' '('
-    case 17659:                     // 'tumbling' '('
-    case 17660:                     // 'type' '('
-    case 17662:                     // 'union' '('
-    case 17664:                     // 'unordered' '('
-    case 17665:                     // 'updating' '('
-    case 17668:                     // 'validate' '('
-    case 17669:                     // 'value' '('
-    case 17670:                     // 'variable' '('
-    case 17671:                     // 'version' '('
-    case 17674:                     // 'where' '('
-    case 17675:                     // 'while' '('
-    case 17678:                     // 'with' '('
-    case 17682:                     // 'xquery' '('
-    case 36946:                     // 'attribute' 'allowing'
-    case 36985:                     // 'element' 'allowing'
-    case 37048:                     // 'namespace' 'allowing'
-    case 37080:                     // 'processing-instruction' 'allowing'
-    case 37458:                     // 'attribute' 'ancestor'
-    case 37497:                     // 'element' 'ancestor'
-    case 37560:                     // 'namespace' 'ancestor'
-    case 37592:                     // 'processing-instruction' 'ancestor'
-    case 37970:                     // 'attribute' 'ancestor-or-self'
-    case 38009:                     // 'element' 'ancestor-or-self'
-    case 38072:                     // 'namespace' 'ancestor-or-self'
-    case 38104:                     // 'processing-instruction' 'ancestor-or-self'
-    case 40018:                     // 'attribute' 'array'
-    case 40057:                     // 'element' 'array'
-    case 42066:                     // 'attribute' 'attribute'
-    case 42105:                     // 'element' 'attribute'
-    case 42168:                     // 'namespace' 'attribute'
-    case 42200:                     // 'processing-instruction' 'attribute'
-    case 42578:                     // 'attribute' 'base-uri'
-    case 42617:                     // 'element' 'base-uri'
-    case 42680:                     // 'namespace' 'base-uri'
-    case 42712:                     // 'processing-instruction' 'base-uri'
-    case 43602:                     // 'attribute' 'boundary-space'
-    case 43641:                     // 'element' 'boundary-space'
-    case 43704:                     // 'namespace' 'boundary-space'
-    case 43736:                     // 'processing-instruction' 'boundary-space'
-    case 44114:                     // 'attribute' 'break'
-    case 44153:                     // 'element' 'break'
-    case 44216:                     // 'namespace' 'break'
-    case 44248:                     // 'processing-instruction' 'break'
-    case 46674:                     // 'attribute' 'catch'
-    case 46713:                     // 'element' 'catch'
-    case 46776:                     // 'namespace' 'catch'
-    case 46808:                     // 'processing-instruction' 'catch'
-    case 47698:                     // 'attribute' 'child'
-    case 47737:                     // 'element' 'child'
-    case 47800:                     // 'namespace' 'child'
-    case 47832:                     // 'processing-instruction' 'child'
-    case 49234:                     // 'attribute' 'comment'
-    case 49273:                     // 'element' 'comment'
-    case 49336:                     // 'namespace' 'comment'
-    case 49368:                     // 'processing-instruction' 'comment'
-    case 49746:                     // 'attribute' 'constraint'
-    case 49785:                     // 'element' 'constraint'
-    case 49848:                     // 'namespace' 'constraint'
-    case 49880:                     // 'processing-instruction' 'constraint'
-    case 50258:                     // 'attribute' 'construction'
-    case 50297:                     // 'element' 'construction'
-    case 50360:                     // 'namespace' 'construction'
-    case 50392:                     // 'processing-instruction' 'construction'
-    case 51794:                     // 'attribute' 'context'
-    case 51833:                     // 'element' 'context'
-    case 51896:                     // 'namespace' 'context'
-    case 51928:                     // 'processing-instruction' 'context'
-    case 52306:                     // 'attribute' 'continue'
-    case 52345:                     // 'element' 'continue'
-    case 52408:                     // 'namespace' 'continue'
-    case 52440:                     // 'processing-instruction' 'continue'
-    case 52818:                     // 'attribute' 'copy'
-    case 52857:                     // 'element' 'copy'
-    case 52920:                     // 'namespace' 'copy'
-    case 52952:                     // 'processing-instruction' 'copy'
-    case 53330:                     // 'attribute' 'copy-namespaces'
-    case 53369:                     // 'element' 'copy-namespaces'
-    case 53432:                     // 'namespace' 'copy-namespaces'
-    case 53464:                     // 'processing-instruction' 'copy-namespaces'
-    case 54354:                     // 'attribute' 'decimal-format'
-    case 54393:                     // 'element' 'decimal-format'
-    case 54456:                     // 'namespace' 'decimal-format'
-    case 54488:                     // 'processing-instruction' 'decimal-format'
-    case 55378:                     // 'attribute' 'declare'
-    case 55417:                     // 'element' 'declare'
-    case 55480:                     // 'namespace' 'declare'
-    case 55512:                     // 'processing-instruction' 'declare'
-    case 56402:                     // 'attribute' 'delete'
-    case 56441:                     // 'element' 'delete'
-    case 56504:                     // 'namespace' 'delete'
-    case 56536:                     // 'processing-instruction' 'delete'
-    case 56914:                     // 'attribute' 'descendant'
-    case 56953:                     // 'element' 'descendant'
-    case 57016:                     // 'namespace' 'descendant'
-    case 57048:                     // 'processing-instruction' 'descendant'
-    case 57426:                     // 'attribute' 'descendant-or-self'
-    case 57465:                     // 'element' 'descendant-or-self'
-    case 57528:                     // 'namespace' 'descendant-or-self'
-    case 57560:                     // 'processing-instruction' 'descendant-or-self'
-    case 61010:                     // 'attribute' 'document'
-    case 61049:                     // 'element' 'document'
-    case 61112:                     // 'namespace' 'document'
-    case 61144:                     // 'processing-instruction' 'document'
-    case 61522:                     // 'attribute' 'document-node'
-    case 61561:                     // 'element' 'document-node'
-    case 61624:                     // 'namespace' 'document-node'
-    case 61656:                     // 'processing-instruction' 'document-node'
-    case 62034:                     // 'attribute' 'element'
-    case 62073:                     // 'element' 'element'
-    case 62136:                     // 'namespace' 'element'
-    case 62168:                     // 'processing-instruction' 'element'
-    case 63570:                     // 'attribute' 'empty-sequence'
-    case 63609:                     // 'element' 'empty-sequence'
-    case 63672:                     // 'namespace' 'empty-sequence'
-    case 63704:                     // 'processing-instruction' 'empty-sequence'
-    case 64082:                     // 'attribute' 'encoding'
-    case 64121:                     // 'element' 'encoding'
-    case 64184:                     // 'namespace' 'encoding'
-    case 64216:                     // 'processing-instruction' 'encoding'
-    case 66130:                     // 'attribute' 'every'
-    case 66169:                     // 'element' 'every'
-    case 66232:                     // 'namespace' 'every'
-    case 66264:                     // 'processing-instruction' 'every'
-    case 67666:                     // 'attribute' 'exit'
-    case 67705:                     // 'element' 'exit'
-    case 67768:                     // 'namespace' 'exit'
-    case 67800:                     // 'processing-instruction' 'exit'
-    case 68178:                     // 'attribute' 'external'
-    case 68217:                     // 'element' 'external'
-    case 68280:                     // 'namespace' 'external'
-    case 68312:                     // 'processing-instruction' 'external'
-    case 68690:                     // 'attribute' 'first'
-    case 68729:                     // 'element' 'first'
-    case 68792:                     // 'namespace' 'first'
-    case 68824:                     // 'processing-instruction' 'first'
-    case 69202:                     // 'attribute' 'following'
-    case 69241:                     // 'element' 'following'
-    case 69304:                     // 'namespace' 'following'
-    case 69336:                     // 'processing-instruction' 'following'
-    case 69714:                     // 'attribute' 'following-sibling'
-    case 69753:                     // 'element' 'following-sibling'
-    case 69816:                     // 'namespace' 'following-sibling'
-    case 69848:                     // 'processing-instruction' 'following-sibling'
-    case 72274:                     // 'attribute' 'ft-option'
-    case 72313:                     // 'element' 'ft-option'
-    case 72376:                     // 'namespace' 'ft-option'
-    case 72408:                     // 'processing-instruction' 'ft-option'
-    case 74322:                     // 'attribute' 'function'
-    case 74361:                     // 'element' 'function'
-    case 74424:                     // 'namespace' 'function'
-    case 74456:                     // 'processing-instruction' 'function'
-    case 77906:                     // 'attribute' 'if'
-    case 77945:                     // 'element' 'if'
-    case 78008:                     // 'namespace' 'if'
-    case 78040:                     // 'processing-instruction' 'if'
-    case 78418:                     // 'attribute' 'import'
-    case 78457:                     // 'element' 'import'
-    case 78520:                     // 'namespace' 'import'
-    case 78552:                     // 'processing-instruction' 'import'
-    case 78930:                     // 'attribute' 'in'
-    case 78969:                     // 'element' 'in'
-    case 79032:                     // 'namespace' 'in'
-    case 79064:                     // 'processing-instruction' 'in'
-    case 79442:                     // 'attribute' 'index'
-    case 79481:                     // 'element' 'index'
-    case 79544:                     // 'namespace' 'index'
-    case 79576:                     // 'processing-instruction' 'index'
-    case 81490:                     // 'attribute' 'insert'
-    case 81529:                     // 'element' 'insert'
-    case 81592:                     // 'namespace' 'insert'
-    case 81624:                     // 'processing-instruction' 'insert'
-    case 82514:                     // 'attribute' 'integrity'
-    case 82553:                     // 'element' 'integrity'
-    case 82616:                     // 'namespace' 'integrity'
-    case 82648:                     // 'processing-instruction' 'integrity'
-    case 84562:                     // 'attribute' 'item'
-    case 84601:                     // 'element' 'item'
-    case 84664:                     // 'namespace' 'item'
-    case 84696:                     // 'processing-instruction' 'item'
-    case 85586:                     // 'attribute' 'json-item'
-    case 85625:                     // 'element' 'json-item'
-    case 87122:                     // 'attribute' 'last'
-    case 87161:                     // 'element' 'last'
-    case 87224:                     // 'namespace' 'last'
-    case 87256:                     // 'processing-instruction' 'last'
-    case 87634:                     // 'attribute' 'lax'
-    case 87673:                     // 'element' 'lax'
-    case 87736:                     // 'namespace' 'lax'
-    case 87768:                     // 'processing-instruction' 'lax'
-    case 90194:                     // 'attribute' 'loop'
-    case 90233:                     // 'element' 'loop'
-    case 90296:                     // 'namespace' 'loop'
-    case 90328:                     // 'processing-instruction' 'loop'
-    case 93266:                     // 'attribute' 'module'
-    case 93305:                     // 'element' 'module'
-    case 93368:                     // 'namespace' 'module'
-    case 93400:                     // 'processing-instruction' 'module'
-    case 94290:                     // 'attribute' 'namespace'
-    case 94329:                     // 'element' 'namespace'
-    case 94392:                     // 'namespace' 'namespace'
-    case 94424:                     // 'processing-instruction' 'namespace'
-    case 94802:                     // 'attribute' 'namespace-node'
-    case 94841:                     // 'element' 'namespace-node'
-    case 94904:                     // 'namespace' 'namespace-node'
-    case 94936:                     // 'processing-instruction' 'namespace-node'
-    case 97874:                     // 'attribute' 'node'
-    case 97913:                     // 'element' 'node'
-    case 97976:                     // 'namespace' 'node'
-    case 98008:                     // 'processing-instruction' 'node'
-    case 98386:                     // 'attribute' 'nodes'
-    case 98425:                     // 'element' 'nodes'
-    case 98488:                     // 'namespace' 'nodes'
-    case 98520:                     // 'processing-instruction' 'nodes'
-    case 99410:                     // 'attribute' 'object'
-    case 99449:                     // 'element' 'object'
-    case 101970:                    // 'attribute' 'option'
-    case 102009:                    // 'element' 'option'
-    case 102072:                    // 'namespace' 'option'
-    case 102104:                    // 'processing-instruction' 'option'
-    case 103506:                    // 'attribute' 'ordered'
-    case 103545:                    // 'element' 'ordered'
-    case 103608:                    // 'namespace' 'ordered'
-    case 103640:                    // 'processing-instruction' 'ordered'
-    case 104018:                    // 'attribute' 'ordering'
-    case 104057:                    // 'element' 'ordering'
-    case 104120:                    // 'namespace' 'ordering'
-    case 104152:                    // 'processing-instruction' 'ordering'
-    case 105554:                    // 'attribute' 'parent'
-    case 105593:                    // 'element' 'parent'
-    case 105656:                    // 'namespace' 'parent'
-    case 105688:                    // 'processing-instruction' 'parent'
-    case 108626:                    // 'attribute' 'preceding'
-    case 108665:                    // 'element' 'preceding'
-    case 108728:                    // 'namespace' 'preceding'
-    case 108760:                    // 'processing-instruction' 'preceding'
-    case 109138:                    // 'attribute' 'preceding-sibling'
-    case 109177:                    // 'element' 'preceding-sibling'
-    case 109240:                    // 'namespace' 'preceding-sibling'
-    case 109272:                    // 'processing-instruction' 'preceding-sibling'
-    case 110674:                    // 'attribute' 'processing-instruction'
-    case 110713:                    // 'element' 'processing-instruction'
-    case 110776:                    // 'namespace' 'processing-instruction'
-    case 110808:                    // 'processing-instruction' 'processing-instruction'
-    case 111698:                    // 'attribute' 'rename'
-    case 111737:                    // 'element' 'rename'
-    case 111800:                    // 'namespace' 'rename'
-    case 111832:                    // 'processing-instruction' 'rename'
-    case 112210:                    // 'attribute' 'replace'
-    case 112249:                    // 'element' 'replace'
-    case 112312:                    // 'namespace' 'replace'
-    case 112344:                    // 'processing-instruction' 'replace'
-    case 113234:                    // 'attribute' 'returning'
-    case 113273:                    // 'element' 'returning'
-    case 113336:                    // 'namespace' 'returning'
-    case 113368:                    // 'processing-instruction' 'returning'
-    case 113746:                    // 'attribute' 'revalidation'
-    case 113785:                    // 'element' 'revalidation'
-    case 113848:                    // 'namespace' 'revalidation'
-    case 113880:                    // 'processing-instruction' 'revalidation'
-    case 115282:                    // 'attribute' 'schema'
-    case 115321:                    // 'element' 'schema'
-    case 115384:                    // 'namespace' 'schema'
-    case 115416:                    // 'processing-instruction' 'schema'
-    case 115794:                    // 'attribute' 'schema-attribute'
-    case 115833:                    // 'element' 'schema-attribute'
-    case 115896:                    // 'namespace' 'schema-attribute'
-    case 115928:                    // 'processing-instruction' 'schema-attribute'
-    case 116306:                    // 'attribute' 'schema-element'
-    case 116345:                    // 'element' 'schema-element'
-    case 116408:                    // 'namespace' 'schema-element'
-    case 116440:                    // 'processing-instruction' 'schema-element'
-    case 116818:                    // 'attribute' 'score'
-    case 116857:                    // 'element' 'score'
-    case 116920:                    // 'namespace' 'score'
-    case 116952:                    // 'processing-instruction' 'score'
-    case 117330:                    // 'attribute' 'self'
-    case 117369:                    // 'element' 'self'
-    case 117432:                    // 'namespace' 'self'
-    case 117464:                    // 'processing-instruction' 'self'
-    case 119890:                    // 'attribute' 'sliding'
-    case 119929:                    // 'element' 'sliding'
-    case 119992:                    // 'namespace' 'sliding'
-    case 120024:                    // 'processing-instruction' 'sliding'
-    case 120402:                    // 'attribute' 'some'
-    case 120441:                    // 'element' 'some'
-    case 120504:                    // 'namespace' 'some'
-    case 120536:                    // 'processing-instruction' 'some'
-    case 122962:                    // 'attribute' 'strict'
-    case 123001:                    // 'element' 'strict'
-    case 123064:                    // 'namespace' 'strict'
-    case 123096:                    // 'processing-instruction' 'strict'
-    case 124498:                    // 'attribute' 'switch'
-    case 124537:                    // 'element' 'switch'
-    case 124600:                    // 'namespace' 'switch'
-    case 124632:                    // 'processing-instruction' 'switch'
-    case 125010:                    // 'attribute' 'text'
-    case 125049:                    // 'element' 'text'
-    case 125112:                    // 'namespace' 'text'
-    case 125144:                    // 'processing-instruction' 'text'
-    case 128082:                    // 'attribute' 'try'
-    case 128121:                    // 'element' 'try'
-    case 128184:                    // 'namespace' 'try'
-    case 128216:                    // 'processing-instruction' 'try'
-    case 128594:                    // 'attribute' 'tumbling'
-    case 128633:                    // 'element' 'tumbling'
-    case 128696:                    // 'namespace' 'tumbling'
-    case 128728:                    // 'processing-instruction' 'tumbling'
-    case 129106:                    // 'attribute' 'type'
-    case 129145:                    // 'element' 'type'
-    case 129208:                    // 'namespace' 'type'
-    case 129240:                    // 'processing-instruction' 'type'
-    case 129618:                    // 'attribute' 'typeswitch'
-    case 129657:                    // 'element' 'typeswitch'
-    case 129720:                    // 'namespace' 'typeswitch'
-    case 129752:                    // 'processing-instruction' 'typeswitch'
-    case 131154:                    // 'attribute' 'unordered'
-    case 131193:                    // 'element' 'unordered'
-    case 131256:                    // 'namespace' 'unordered'
-    case 131288:                    // 'processing-instruction' 'unordered'
-    case 131666:                    // 'attribute' 'updating'
-    case 131705:                    // 'element' 'updating'
-    case 131768:                    // 'namespace' 'updating'
-    case 131800:                    // 'processing-instruction' 'updating'
-    case 133202:                    // 'attribute' 'validate'
-    case 133241:                    // 'element' 'validate'
-    case 133304:                    // 'namespace' 'validate'
-    case 133336:                    // 'processing-instruction' 'validate'
-    case 133714:                    // 'attribute' 'value'
-    case 133753:                    // 'element' 'value'
-    case 133816:                    // 'namespace' 'value'
-    case 133848:                    // 'processing-instruction' 'value'
-    case 134226:                    // 'attribute' 'variable'
-    case 134265:                    // 'element' 'variable'
-    case 134328:                    // 'namespace' 'variable'
-    case 134360:                    // 'processing-instruction' 'variable'
-    case 134738:                    // 'attribute' 'version'
-    case 134777:                    // 'element' 'version'
-    case 134840:                    // 'namespace' 'version'
-    case 134872:                    // 'processing-instruction' 'version'
-    case 136786:                    // 'attribute' 'while'
-    case 136825:                    // 'element' 'while'
-    case 136888:                    // 'namespace' 'while'
-    case 136920:                    // 'processing-instruction' 'while'
-    case 140370:                    // 'attribute' 'xquery'
-    case 140409:                    // 'element' 'xquery'
-    case 140472:                    // 'namespace' 'xquery'
-    case 140504:                    // 'processing-instruction' 'xquery'
-    case 141394:                    // 'attribute' '{'
-    case 141408:                    // 'comment' '{'
-    case 141431:                    // 'document' '{'
-    case 141433:                    // 'element' '{'
-    case 141496:                    // 'namespace' '{'
-    case 141514:                    // 'ordered' '{'
-    case 141528:                    // 'processing-instruction' '{'
-    case 141556:                    // 'text' '{'
-    case 141568:                    // 'unordered' '{'
-      parse_PostfixExpr();
-      break;
-    default:
-      parse_AxisStep();
-    }
-    eventHandler.endNonterminal("StepExpr", e0);
-  }
-
-  function try_StepExpr()
-  {
-    switch (l1)
-    {
-    case 82:                        // 'attribute'
-      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |
-      break;
-    case 121:                       // 'element'
-      lookahead2W(280);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |
-      break;
-    case 184:                       // 'namespace'
-    case 216:                       // 'processing-instruction'
-      lookahead2W(279);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |
-      break;
-    case 96:                        // 'comment'
-    case 119:                       // 'document'
-    case 202:                       // 'ordered'
-    case 244:                       // 'text'
-    case 256:                       // 'unordered'
-      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 124:                       // 'empty-sequence'
-    case 152:                       // 'if'
-    case 165:                       // 'item'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    case 73:                        // 'ancestor'
-    case 74:                        // 'ancestor-or-self'
-    case 93:                        // 'child'
-    case 111:                       // 'descendant'
-    case 112:                       // 'descendant-or-self'
-    case 135:                       // 'following'
-    case 136:                       // 'following-sibling'
-    case 206:                       // 'parent'
-    case 212:                       // 'preceding'
-    case 213:                       // 'preceding-sibling'
-    case 229:                       // 'self'
-      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 6:                         // EQName^Token
-    case 70:                        // 'after'
-    case 72:                        // 'allowing'
-    case 75:                        // 'and'
-    case 78:                        // 'array'
-    case 79:                        // 'as'
-    case 80:                        // 'ascending'
-    case 81:                        // 'at'
-    case 83:                        // 'base-uri'
-    case 84:                        // 'before'
-    case 85:                        // 'boundary-space'
-    case 86:                        // 'break'
-    case 88:                        // 'case'
-    case 89:                        // 'cast'
-    case 90:                        // 'castable'
-    case 91:                        // 'catch'
-    case 94:                        // 'collation'
-    case 97:                        // 'constraint'
-    case 98:                        // 'construction'
-    case 101:                       // 'context'
-    case 102:                       // 'continue'
-    case 103:                       // 'copy'
-    case 104:                       // 'copy-namespaces'
-    case 105:                       // 'count'
-    case 106:                       // 'decimal-format'
-    case 108:                       // 'declare'
-    case 109:                       // 'default'
-    case 110:                       // 'delete'
-    case 113:                       // 'descending'
-    case 118:                       // 'div'
-    case 120:                       // 'document-node'
-    case 122:                       // 'else'
-    case 123:                       // 'empty'
-    case 125:                       // 'encoding'
-    case 126:                       // 'end'
-    case 128:                       // 'eq'
-    case 129:                       // 'every'
-    case 131:                       // 'except'
-    case 132:                       // 'exit'
-    case 133:                       // 'external'
-    case 134:                       // 'first'
-    case 137:                       // 'for'
-    case 141:                       // 'ft-option'
-    case 145:                       // 'function'
-    case 146:                       // 'ge'
-    case 148:                       // 'group'
-    case 150:                       // 'gt'
-    case 151:                       // 'idiv'
-    case 153:                       // 'import'
-    case 154:                       // 'in'
-    case 155:                       // 'index'
-    case 159:                       // 'insert'
-    case 160:                       // 'instance'
-    case 161:                       // 'integrity'
-    case 162:                       // 'intersect'
-    case 163:                       // 'into'
-    case 164:                       // 'is'
-    case 167:                       // 'json-item'
-    case 170:                       // 'last'
-    case 171:                       // 'lax'
-    case 172:                       // 'le'
-    case 174:                       // 'let'
-    case 176:                       // 'loop'
-    case 178:                       // 'lt'
-    case 180:                       // 'mod'
-    case 181:                       // 'modify'
-    case 182:                       // 'module'
-    case 185:                       // 'namespace-node'
-    case 186:                       // 'ne'
-    case 191:                       // 'node'
-    case 192:                       // 'nodes'
-    case 194:                       // 'object'
-    case 198:                       // 'only'
-    case 199:                       // 'option'
-    case 200:                       // 'or'
-    case 201:                       // 'order'
-    case 203:                       // 'ordering'
-    case 218:                       // 'rename'
-    case 219:                       // 'replace'
-    case 220:                       // 'return'
-    case 221:                       // 'returning'
-    case 222:                       // 'revalidation'
-    case 224:                       // 'satisfies'
-    case 225:                       // 'schema'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 228:                       // 'score'
-    case 234:                       // 'sliding'
-    case 235:                       // 'some'
-    case 236:                       // 'stable'
-    case 237:                       // 'start'
-    case 240:                       // 'strict'
-    case 248:                       // 'to'
-    case 249:                       // 'treat'
-    case 250:                       // 'try'
-    case 251:                       // 'tumbling'
-    case 252:                       // 'type'
-    case 254:                       // 'union'
-    case 257:                       // 'updating'
-    case 260:                       // 'validate'
-    case 261:                       // 'value'
-    case 262:                       // 'variable'
-    case 263:                       // 'version'
-    case 266:                       // 'where'
-    case 267:                       // 'while'
-    case 270:                       // 'with'
-    case 274:                       // 'xquery'
-      lookahead2W(242);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 17486                 // 'array' '('
-     || lk == 17575                 // 'json-item' '('
-     || lk == 17602                 // 'object' '('
-     || lk == 35922                 // 'attribute' 'after'
-     || lk == 35961                 // 'element' 'after'
-     || lk == 36024                 // 'namespace' 'after'
-     || lk == 36056                 // 'processing-instruction' 'after'
-     || lk == 38482                 // 'attribute' 'and'
-     || lk == 38521                 // 'element' 'and'
-     || lk == 38584                 // 'namespace' 'and'
-     || lk == 38616                 // 'processing-instruction' 'and'
-     || lk == 40530                 // 'attribute' 'as'
-     || lk == 40569                 // 'element' 'as'
-     || lk == 40632                 // 'namespace' 'as'
-     || lk == 40664                 // 'processing-instruction' 'as'
-     || lk == 41042                 // 'attribute' 'ascending'
-     || lk == 41081                 // 'element' 'ascending'
-     || lk == 41144                 // 'namespace' 'ascending'
-     || lk == 41176                 // 'processing-instruction' 'ascending'
-     || lk == 41554                 // 'attribute' 'at'
-     || lk == 41593                 // 'element' 'at'
-     || lk == 41656                 // 'namespace' 'at'
-     || lk == 41688                 // 'processing-instruction' 'at'
-     || lk == 43090                 // 'attribute' 'before'
-     || lk == 43129                 // 'element' 'before'
-     || lk == 43192                 // 'namespace' 'before'
-     || lk == 43224                 // 'processing-instruction' 'before'
-     || lk == 45138                 // 'attribute' 'case'
-     || lk == 45177                 // 'element' 'case'
-     || lk == 45240                 // 'namespace' 'case'
-     || lk == 45272                 // 'processing-instruction' 'case'
-     || lk == 45650                 // 'attribute' 'cast'
-     || lk == 45689                 // 'element' 'cast'
-     || lk == 45752                 // 'namespace' 'cast'
-     || lk == 45784                 // 'processing-instruction' 'cast'
-     || lk == 46162                 // 'attribute' 'castable'
-     || lk == 46201                 // 'element' 'castable'
-     || lk == 46264                 // 'namespace' 'castable'
-     || lk == 46296                 // 'processing-instruction' 'castable'
-     || lk == 48210                 // 'attribute' 'collation'
-     || lk == 48249                 // 'element' 'collation'
-     || lk == 48312                 // 'namespace' 'collation'
-     || lk == 48344                 // 'processing-instruction' 'collation'
-     || lk == 53842                 // 'attribute' 'count'
-     || lk == 53881                 // 'element' 'count'
-     || lk == 53944                 // 'namespace' 'count'
-     || lk == 53976                 // 'processing-instruction' 'count'
-     || lk == 55890                 // 'attribute' 'default'
-     || lk == 55929                 // 'element' 'default'
-     || lk == 55992                 // 'namespace' 'default'
-     || lk == 56024                 // 'processing-instruction' 'default'
-     || lk == 57938                 // 'attribute' 'descending'
-     || lk == 57977                 // 'element' 'descending'
-     || lk == 58040                 // 'namespace' 'descending'
-     || lk == 58072                 // 'processing-instruction' 'descending'
-     || lk == 60498                 // 'attribute' 'div'
-     || lk == 60537                 // 'element' 'div'
-     || lk == 60600                 // 'namespace' 'div'
-     || lk == 60632                 // 'processing-instruction' 'div'
-     || lk == 62546                 // 'attribute' 'else'
-     || lk == 62585                 // 'element' 'else'
-     || lk == 62648                 // 'namespace' 'else'
-     || lk == 62680                 // 'processing-instruction' 'else'
-     || lk == 63058                 // 'attribute' 'empty'
-     || lk == 63097                 // 'element' 'empty'
-     || lk == 63160                 // 'namespace' 'empty'
-     || lk == 63192                 // 'processing-instruction' 'empty'
-     || lk == 64594                 // 'attribute' 'end'
-     || lk == 64633                 // 'element' 'end'
-     || lk == 64696                 // 'namespace' 'end'
-     || lk == 64728                 // 'processing-instruction' 'end'
-     || lk == 65618                 // 'attribute' 'eq'
-     || lk == 65657                 // 'element' 'eq'
-     || lk == 65720                 // 'namespace' 'eq'
-     || lk == 65752                 // 'processing-instruction' 'eq'
-     || lk == 67154                 // 'attribute' 'except'
-     || lk == 67193                 // 'element' 'except'
-     || lk == 67256                 // 'namespace' 'except'
-     || lk == 67288                 // 'processing-instruction' 'except'
-     || lk == 70226                 // 'attribute' 'for'
-     || lk == 70265                 // 'element' 'for'
-     || lk == 70328                 // 'namespace' 'for'
-     || lk == 70360                 // 'processing-instruction' 'for'
-     || lk == 74834                 // 'attribute' 'ge'
-     || lk == 74873                 // 'element' 'ge'
-     || lk == 74936                 // 'namespace' 'ge'
-     || lk == 74968                 // 'processing-instruction' 'ge'
-     || lk == 75858                 // 'attribute' 'group'
-     || lk == 75897                 // 'element' 'group'
-     || lk == 75960                 // 'namespace' 'group'
-     || lk == 75992                 // 'processing-instruction' 'group'
-     || lk == 76882                 // 'attribute' 'gt'
-     || lk == 76921                 // 'element' 'gt'
-     || lk == 76984                 // 'namespace' 'gt'
-     || lk == 77016                 // 'processing-instruction' 'gt'
-     || lk == 77394                 // 'attribute' 'idiv'
-     || lk == 77433                 // 'element' 'idiv'
-     || lk == 77496                 // 'namespace' 'idiv'
-     || lk == 77528                 // 'processing-instruction' 'idiv'
-     || lk == 82002                 // 'attribute' 'instance'
-     || lk == 82041                 // 'element' 'instance'
-     || lk == 82104                 // 'namespace' 'instance'
-     || lk == 82136                 // 'processing-instruction' 'instance'
-     || lk == 83026                 // 'attribute' 'intersect'
-     || lk == 83065                 // 'element' 'intersect'
-     || lk == 83128                 // 'namespace' 'intersect'
-     || lk == 83160                 // 'processing-instruction' 'intersect'
-     || lk == 83538                 // 'attribute' 'into'
-     || lk == 83577                 // 'element' 'into'
-     || lk == 83640                 // 'namespace' 'into'
-     || lk == 83672                 // 'processing-instruction' 'into'
-     || lk == 84050                 // 'attribute' 'is'
-     || lk == 84089                 // 'element' 'is'
-     || lk == 84152                 // 'namespace' 'is'
-     || lk == 84184                 // 'processing-instruction' 'is'
-     || lk == 88146                 // 'attribute' 'le'
-     || lk == 88185                 // 'element' 'le'
-     || lk == 88248                 // 'namespace' 'le'
-     || lk == 88280                 // 'processing-instruction' 'le'
-     || lk == 89170                 // 'attribute' 'let'
-     || lk == 89209                 // 'element' 'let'
-     || lk == 89272                 // 'namespace' 'let'
-     || lk == 89304                 // 'processing-instruction' 'let'
-     || lk == 91218                 // 'attribute' 'lt'
-     || lk == 91257                 // 'element' 'lt'
-     || lk == 91320                 // 'namespace' 'lt'
-     || lk == 91352                 // 'processing-instruction' 'lt'
-     || lk == 92242                 // 'attribute' 'mod'
-     || lk == 92281                 // 'element' 'mod'
-     || lk == 92344                 // 'namespace' 'mod'
-     || lk == 92376                 // 'processing-instruction' 'mod'
-     || lk == 92754                 // 'attribute' 'modify'
-     || lk == 92793                 // 'element' 'modify'
-     || lk == 92856                 // 'namespace' 'modify'
-     || lk == 92888                 // 'processing-instruction' 'modify'
-     || lk == 95314                 // 'attribute' 'ne'
-     || lk == 95353                 // 'element' 'ne'
-     || lk == 95416                 // 'namespace' 'ne'
-     || lk == 95448                 // 'processing-instruction' 'ne'
-     || lk == 101458                // 'attribute' 'only'
-     || lk == 101497                // 'element' 'only'
-     || lk == 101560                // 'namespace' 'only'
-     || lk == 101592                // 'processing-instruction' 'only'
-     || lk == 102482                // 'attribute' 'or'
-     || lk == 102521                // 'element' 'or'
-     || lk == 102584                // 'namespace' 'or'
-     || lk == 102616                // 'processing-instruction' 'or'
-     || lk == 102994                // 'attribute' 'order'
-     || lk == 103033                // 'element' 'order'
-     || lk == 103096                // 'namespace' 'order'
-     || lk == 103128                // 'processing-instruction' 'order'
-     || lk == 112722                // 'attribute' 'return'
-     || lk == 112761                // 'element' 'return'
-     || lk == 112824                // 'namespace' 'return'
-     || lk == 112856                // 'processing-instruction' 'return'
-     || lk == 114770                // 'attribute' 'satisfies'
-     || lk == 114809                // 'element' 'satisfies'
-     || lk == 114872                // 'namespace' 'satisfies'
-     || lk == 114904                // 'processing-instruction' 'satisfies'
-     || lk == 120914                // 'attribute' 'stable'
-     || lk == 120953                // 'element' 'stable'
-     || lk == 121016                // 'namespace' 'stable'
-     || lk == 121048                // 'processing-instruction' 'stable'
-     || lk == 121426                // 'attribute' 'start'
-     || lk == 121465                // 'element' 'start'
-     || lk == 121528                // 'namespace' 'start'
-     || lk == 121560                // 'processing-instruction' 'start'
-     || lk == 127058                // 'attribute' 'to'
-     || lk == 127097                // 'element' 'to'
-     || lk == 127160                // 'namespace' 'to'
-     || lk == 127192                // 'processing-instruction' 'to'
-     || lk == 127570                // 'attribute' 'treat'
-     || lk == 127609                // 'element' 'treat'
-     || lk == 127672                // 'namespace' 'treat'
-     || lk == 127704                // 'processing-instruction' 'treat'
-     || lk == 130130                // 'attribute' 'union'
-     || lk == 130169                // 'element' 'union'
-     || lk == 130232                // 'namespace' 'union'
-     || lk == 130264                // 'processing-instruction' 'union'
-     || lk == 136274                // 'attribute' 'where'
-     || lk == 136313                // 'element' 'where'
-     || lk == 136376                // 'namespace' 'where'
-     || lk == 136408                // 'processing-instruction' 'where'
-     || lk == 138322                // 'attribute' 'with'
-     || lk == 138361                // 'element' 'with'
-     || lk == 138424                // 'namespace' 'with'
-     || lk == 138456)               // 'processing-instruction' 'with'
-    {
-      lk = memoized(3, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_PostfixExpr();
-          memoize(3, e0A, -1);
-          lk = -3;
-        }
-        catch (p1A)
-        {
-          lk = -2;
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(3, e0A, -2);
-        }
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-    case 8:                         // IntegerLiteral
-    case 9:                         // DecimalLiteral
-    case 10:                        // DoubleLiteral
-    case 11:                        // StringLiteral
-    case 31:                        // '$'
-    case 32:                        // '%'
-    case 34:                        // '('
-    case 44:                        // '.'
-    case 54:                        // '<'
-    case 55:                        // '<!--'
-    case 59:                        // '<?'
-    case 68:                        // '['
-    case 276:                       // '{'
-    case 278:                       // '{|'
-    case 3154:                      // 'attribute' EQName^Token
-    case 3193:                      // 'element' EQName^Token
-    case 9912:                      // 'namespace' NCName^Token
-    case 9944:                      // 'processing-instruction' NCName^Token
-    case 14854:                     // EQName^Token '#'
-    case 14918:                     // 'after' '#'
-    case 14920:                     // 'allowing' '#'
-    case 14921:                     // 'ancestor' '#'
-    case 14922:                     // 'ancestor-or-self' '#'
-    case 14923:                     // 'and' '#'
-    case 14926:                     // 'array' '#'
-    case 14927:                     // 'as' '#'
-    case 14928:                     // 'ascending' '#'
-    case 14929:                     // 'at' '#'
-    case 14930:                     // 'attribute' '#'
-    case 14931:                     // 'base-uri' '#'
-    case 14932:                     // 'before' '#'
-    case 14933:                     // 'boundary-space' '#'
-    case 14934:                     // 'break' '#'
-    case 14936:                     // 'case' '#'
-    case 14937:                     // 'cast' '#'
-    case 14938:                     // 'castable' '#'
-    case 14939:                     // 'catch' '#'
-    case 14941:                     // 'child' '#'
-    case 14942:                     // 'collation' '#'
-    case 14944:                     // 'comment' '#'
-    case 14945:                     // 'constraint' '#'
-    case 14946:                     // 'construction' '#'
-    case 14949:                     // 'context' '#'
-    case 14950:                     // 'continue' '#'
-    case 14951:                     // 'copy' '#'
-    case 14952:                     // 'copy-namespaces' '#'
-    case 14953:                     // 'count' '#'
-    case 14954:                     // 'decimal-format' '#'
-    case 14956:                     // 'declare' '#'
-    case 14957:                     // 'default' '#'
-    case 14958:                     // 'delete' '#'
-    case 14959:                     // 'descendant' '#'
-    case 14960:                     // 'descendant-or-self' '#'
-    case 14961:                     // 'descending' '#'
-    case 14966:                     // 'div' '#'
-    case 14967:                     // 'document' '#'
-    case 14968:                     // 'document-node' '#'
-    case 14969:                     // 'element' '#'
-    case 14970:                     // 'else' '#'
-    case 14971:                     // 'empty' '#'
-    case 14972:                     // 'empty-sequence' '#'
-    case 14973:                     // 'encoding' '#'
-    case 14974:                     // 'end' '#'
-    case 14976:                     // 'eq' '#'
-    case 14977:                     // 'every' '#'
-    case 14979:                     // 'except' '#'
-    case 14980:                     // 'exit' '#'
-    case 14981:                     // 'external' '#'
-    case 14982:                     // 'first' '#'
-    case 14983:                     // 'following' '#'
-    case 14984:                     // 'following-sibling' '#'
-    case 14985:                     // 'for' '#'
-    case 14989:                     // 'ft-option' '#'
-    case 14993:                     // 'function' '#'
-    case 14994:                     // 'ge' '#'
-    case 14996:                     // 'group' '#'
-    case 14998:                     // 'gt' '#'
-    case 14999:                     // 'idiv' '#'
-    case 15000:                     // 'if' '#'
-    case 15001:                     // 'import' '#'
-    case 15002:                     // 'in' '#'
-    case 15003:                     // 'index' '#'
-    case 15007:                     // 'insert' '#'
-    case 15008:                     // 'instance' '#'
-    case 15009:                     // 'integrity' '#'
-    case 15010:                     // 'intersect' '#'
-    case 15011:                     // 'into' '#'
-    case 15012:                     // 'is' '#'
-    case 15013:                     // 'item' '#'
-    case 15015:                     // 'json-item' '#'
-    case 15018:                     // 'last' '#'
-    case 15019:                     // 'lax' '#'
-    case 15020:                     // 'le' '#'
-    case 15022:                     // 'let' '#'
-    case 15024:                     // 'loop' '#'
-    case 15026:                     // 'lt' '#'
-    case 15028:                     // 'mod' '#'
-    case 15029:                     // 'modify' '#'
-    case 15030:                     // 'module' '#'
-    case 15032:                     // 'namespace' '#'
-    case 15033:                     // 'namespace-node' '#'
-    case 15034:                     // 'ne' '#'
-    case 15039:                     // 'node' '#'
-    case 15040:                     // 'nodes' '#'
-    case 15042:                     // 'object' '#'
-    case 15046:                     // 'only' '#'
-    case 15047:                     // 'option' '#'
-    case 15048:                     // 'or' '#'
-    case 15049:                     // 'order' '#'
-    case 15050:                     // 'ordered' '#'
-    case 15051:                     // 'ordering' '#'
-    case 15054:                     // 'parent' '#'
-    case 15060:                     // 'preceding' '#'
-    case 15061:                     // 'preceding-sibling' '#'
-    case 15064:                     // 'processing-instruction' '#'
-    case 15066:                     // 'rename' '#'
-    case 15067:                     // 'replace' '#'
-    case 15068:                     // 'return' '#'
-    case 15069:                     // 'returning' '#'
-    case 15070:                     // 'revalidation' '#'
-    case 15072:                     // 'satisfies' '#'
-    case 15073:                     // 'schema' '#'
-    case 15074:                     // 'schema-attribute' '#'
-    case 15075:                     // 'schema-element' '#'
-    case 15076:                     // 'score' '#'
-    case 15077:                     // 'self' '#'
-    case 15082:                     // 'sliding' '#'
-    case 15083:                     // 'some' '#'
-    case 15084:                     // 'stable' '#'
-    case 15085:                     // 'start' '#'
-    case 15088:                     // 'strict' '#'
-    case 15091:                     // 'switch' '#'
-    case 15092:                     // 'text' '#'
-    case 15096:                     // 'to' '#'
-    case 15097:                     // 'treat' '#'
-    case 15098:                     // 'try' '#'
-    case 15099:                     // 'tumbling' '#'
-    case 15100:                     // 'type' '#'
-    case 15101:                     // 'typeswitch' '#'
-    case 15102:                     // 'union' '#'
-    case 15104:                     // 'unordered' '#'
-    case 15105:                     // 'updating' '#'
-    case 15108:                     // 'validate' '#'
-    case 15109:                     // 'value' '#'
-    case 15110:                     // 'variable' '#'
-    case 15111:                     // 'version' '#'
-    case 15114:                     // 'where' '#'
-    case 15115:                     // 'while' '#'
-    case 15118:                     // 'with' '#'
-    case 15122:                     // 'xquery' '#'
-    case 17414:                     // EQName^Token '('
-    case 17478:                     // 'after' '('
-    case 17480:                     // 'allowing' '('
-    case 17481:                     // 'ancestor' '('
-    case 17482:                     // 'ancestor-or-self' '('
-    case 17483:                     // 'and' '('
-    case 17487:                     // 'as' '('
-    case 17488:                     // 'ascending' '('
-    case 17489:                     // 'at' '('
-    case 17491:                     // 'base-uri' '('
-    case 17492:                     // 'before' '('
-    case 17493:                     // 'boundary-space' '('
-    case 17494:                     // 'break' '('
-    case 17496:                     // 'case' '('
-    case 17497:                     // 'cast' '('
-    case 17498:                     // 'castable' '('
-    case 17499:                     // 'catch' '('
-    case 17501:                     // 'child' '('
-    case 17502:                     // 'collation' '('
-    case 17505:                     // 'constraint' '('
-    case 17506:                     // 'construction' '('
-    case 17509:                     // 'context' '('
-    case 17510:                     // 'continue' '('
-    case 17511:                     // 'copy' '('
-    case 17512:                     // 'copy-namespaces' '('
-    case 17513:                     // 'count' '('
-    case 17514:                     // 'decimal-format' '('
-    case 17516:                     // 'declare' '('
-    case 17517:                     // 'default' '('
-    case 17518:                     // 'delete' '('
-    case 17519:                     // 'descendant' '('
-    case 17520:                     // 'descendant-or-self' '('
-    case 17521:                     // 'descending' '('
-    case 17526:                     // 'div' '('
-    case 17527:                     // 'document' '('
-    case 17530:                     // 'else' '('
-    case 17531:                     // 'empty' '('
-    case 17533:                     // 'encoding' '('
-    case 17534:                     // 'end' '('
-    case 17536:                     // 'eq' '('
-    case 17537:                     // 'every' '('
-    case 17539:                     // 'except' '('
-    case 17540:                     // 'exit' '('
-    case 17541:                     // 'external' '('
-    case 17542:                     // 'first' '('
-    case 17543:                     // 'following' '('
-    case 17544:                     // 'following-sibling' '('
-    case 17545:                     // 'for' '('
-    case 17549:                     // 'ft-option' '('
-    case 17553:                     // 'function' '('
-    case 17554:                     // 'ge' '('
-    case 17556:                     // 'group' '('
-    case 17558:                     // 'gt' '('
-    case 17559:                     // 'idiv' '('
-    case 17561:                     // 'import' '('
-    case 17562:                     // 'in' '('
-    case 17563:                     // 'index' '('
-    case 17567:                     // 'insert' '('
-    case 17568:                     // 'instance' '('
-    case 17569:                     // 'integrity' '('
-    case 17570:                     // 'intersect' '('
-    case 17571:                     // 'into' '('
-    case 17572:                     // 'is' '('
-    case 17578:                     // 'last' '('
-    case 17579:                     // 'lax' '('
-    case 17580:                     // 'le' '('
-    case 17582:                     // 'let' '('
-    case 17584:                     // 'loop' '('
-    case 17586:                     // 'lt' '('
-    case 17588:                     // 'mod' '('
-    case 17589:                     // 'modify' '('
-    case 17590:                     // 'module' '('
-    case 17592:                     // 'namespace' '('
-    case 17594:                     // 'ne' '('
-    case 17600:                     // 'nodes' '('
-    case 17606:                     // 'only' '('
-    case 17607:                     // 'option' '('
-    case 17608:                     // 'or' '('
-    case 17609:                     // 'order' '('
-    case 17610:                     // 'ordered' '('
-    case 17611:                     // 'ordering' '('
-    case 17614:                     // 'parent' '('
-    case 17620:                     // 'preceding' '('
-    case 17621:                     // 'preceding-sibling' '('
-    case 17626:                     // 'rename' '('
-    case 17627:                     // 'replace' '('
-    case 17628:                     // 'return' '('
-    case 17629:                     // 'returning' '('
-    case 17630:                     // 'revalidation' '('
-    case 17632:                     // 'satisfies' '('
-    case 17633:                     // 'schema' '('
-    case 17636:                     // 'score' '('
-    case 17637:                     // 'self' '('
-    case 17642:                     // 'sliding' '('
-    case 17643:                     // 'some' '('
-    case 17644:                     // 'stable' '('
-    case 17645:                     // 'start' '('
-    case 17648:                     // 'strict' '('
-    case 17656:                     // 'to' '('
-    case 17657:                     // 'treat' '('
-    case 17658:                     // 'try' '('
-    case 17659:                     // 'tumbling' '('
-    case 17660:                     // 'type' '('
-    case 17662:                     // 'union' '('
-    case 17664:                     // 'unordered' '('
-    case 17665:                     // 'updating' '('
-    case 17668:                     // 'validate' '('
-    case 17669:                     // 'value' '('
-    case 17670:                     // 'variable' '('
-    case 17671:                     // 'version' '('
-    case 17674:                     // 'where' '('
-    case 17675:                     // 'while' '('
-    case 17678:                     // 'with' '('
-    case 17682:                     // 'xquery' '('
-    case 36946:                     // 'attribute' 'allowing'
-    case 36985:                     // 'element' 'allowing'
-    case 37048:                     // 'namespace' 'allowing'
-    case 37080:                     // 'processing-instruction' 'allowing'
-    case 37458:                     // 'attribute' 'ancestor'
-    case 37497:                     // 'element' 'ancestor'
-    case 37560:                     // 'namespace' 'ancestor'
-    case 37592:                     // 'processing-instruction' 'ancestor'
-    case 37970:                     // 'attribute' 'ancestor-or-self'
-    case 38009:                     // 'element' 'ancestor-or-self'
-    case 38072:                     // 'namespace' 'ancestor-or-self'
-    case 38104:                     // 'processing-instruction' 'ancestor-or-self'
-    case 40018:                     // 'attribute' 'array'
-    case 40057:                     // 'element' 'array'
-    case 42066:                     // 'attribute' 'attribute'
-    case 42105:                     // 'element' 'attribute'
-    case 42168:                     // 'namespace' 'attribute'
-    case 42200:                     // 'processing-instruction' 'attribute'
-    case 42578:                     // 'attribute' 'base-uri'
-    case 42617:                     // 'element' 'base-uri'
-    case 42680:                     // 'namespace' 'base-uri'
-    case 42712:                     // 'processing-instruction' 'base-uri'
-    case 43602:                     // 'attribute' 'boundary-space'
-    case 43641:                     // 'element' 'boundary-space'
-    case 43704:                     // 'namespace' 'boundary-space'
-    case 43736:                     // 'processing-instruction' 'boundary-space'
-    case 44114:                     // 'attribute' 'break'
-    case 44153:                     // 'element' 'break'
-    case 44216:                     // 'namespace' 'break'
-    case 44248:                     // 'processing-instruction' 'break'
-    case 46674:                     // 'attribute' 'catch'
-    case 46713:                     // 'element' 'catch'
-    case 46776:                     // 'namespace' 'catch'
-    case 46808:                     // 'processing-instruction' 'catch'
-    case 47698:                     // 'attribute' 'child'
-    case 47737:                     // 'element' 'child'
-    case 47800:                     // 'namespace' 'child'
-    case 47832:                     // 'processing-instruction' 'child'
-    case 49234:                     // 'attribute' 'comment'
-    case 49273:                     // 'element' 'comment'
-    case 49336:                     // 'namespace' 'comment'
-    case 49368:                     // 'processing-instruction' 'comment'
-    case 49746:                     // 'attribute' 'constraint'
-    case 49785:                     // 'element' 'constraint'
-    case 49848:                     // 'namespace' 'constraint'
-    case 49880:                     // 'processing-instruction' 'constraint'
-    case 50258:                     // 'attribute' 'construction'
-    case 50297:                     // 'element' 'construction'
-    case 50360:                     // 'namespace' 'construction'
-    case 50392:                     // 'processing-instruction' 'construction'
-    case 51794:                     // 'attribute' 'context'
-    case 51833:                     // 'element' 'context'
-    case 51896:                     // 'namespace' 'context'
-    case 51928:                     // 'processing-instruction' 'context'
-    case 52306:                     // 'attribute' 'continue'
-    case 52345:                     // 'element' 'continue'
-    case 52408:                     // 'namespace' 'continue'
-    case 52440:                     // 'processing-instruction' 'continue'
-    case 52818:                     // 'attribute' 'copy'
-    case 52857:                     // 'element' 'copy'
-    case 52920:                     // 'namespace' 'copy'
-    case 52952:                     // 'processing-instruction' 'copy'
-    case 53330:                     // 'attribute' 'copy-namespaces'
-    case 53369:                     // 'element' 'copy-namespaces'
-    case 53432:                     // 'namespace' 'copy-namespaces'
-    case 53464:                     // 'processing-instruction' 'copy-namespaces'
-    case 54354:                     // 'attribute' 'decimal-format'
-    case 54393:                     // 'element' 'decimal-format'
-    case 54456:                     // 'namespace' 'decimal-format'
-    case 54488:                     // 'processing-instruction' 'decimal-format'
-    case 55378:                     // 'attribute' 'declare'
-    case 55417:                     // 'element' 'declare'
-    case 55480:                     // 'namespace' 'declare'
-    case 55512:                     // 'processing-instruction' 'declare'
-    case 56402:                     // 'attribute' 'delete'
-    case 56441:                     // 'element' 'delete'
-    case 56504:                     // 'namespace' 'delete'
-    case 56536:                     // 'processing-instruction' 'delete'
-    case 56914:                     // 'attribute' 'descendant'
-    case 56953:                     // 'element' 'descendant'
-    case 57016:                     // 'namespace' 'descendant'
-    case 57048:                     // 'processing-instruction' 'descendant'
-    case 57426:                     // 'attribute' 'descendant-or-self'
-    case 57465:                     // 'element' 'descendant-or-self'
-    case 57528:                     // 'namespace' 'descendant-or-self'
-    case 57560:                     // 'processing-instruction' 'descendant-or-self'
-    case 61010:                     // 'attribute' 'document'
-    case 61049:                     // 'element' 'document'
-    case 61112:                     // 'namespace' 'document'
-    case 61144:                     // 'processing-instruction' 'document'
-    case 61522:                     // 'attribute' 'document-node'
-    case 61561:                     // 'element' 'document-node'
-    case 61624:                     // 'namespace' 'document-node'
-    case 61656:                     // 'processing-instruction' 'document-node'
-    case 62034:                     // 'attribute' 'element'
-    case 62073:                     // 'element' 'element'
-    case 62136:                     // 'namespace' 'element'
-    case 62168:                     // 'processing-instruction' 'element'
-    case 63570:                     // 'attribute' 'empty-sequence'
-    case 63609:                     // 'element' 'empty-sequence'
-    case 63672:                     // 'namespace' 'empty-sequence'
-    case 63704:                     // 'processing-instruction' 'empty-sequence'
-    case 64082:                     // 'attribute' 'encoding'
-    case 64121:                     // 'element' 'encoding'
-    case 64184:                     // 'namespace' 'encoding'
-    case 64216:                     // 'processing-instruction' 'encoding'
-    case 66130:                     // 'attribute' 'every'
-    case 66169:                     // 'element' 'every'
-    case 66232:                     // 'namespace' 'every'
-    case 66264:                     // 'processing-instruction' 'every'
-    case 67666:                     // 'attribute' 'exit'
-    case 67705:                     // 'element' 'exit'
-    case 67768:                     // 'namespace' 'exit'
-    case 67800:                     // 'processing-instruction' 'exit'
-    case 68178:                     // 'attribute' 'external'
-    case 68217:                     // 'element' 'external'
-    case 68280:                     // 'namespace' 'external'
-    case 68312:                     // 'processing-instruction' 'external'
-    case 68690:                     // 'attribute' 'first'
-    case 68729:                     // 'element' 'first'
-    case 68792:                     // 'namespace' 'first'
-    case 68824:                     // 'processing-instruction' 'first'
-    case 69202:                     // 'attribute' 'following'
-    case 69241:                     // 'element' 'following'
-    case 69304:                     // 'namespace' 'following'
-    case 69336:                     // 'processing-instruction' 'following'
-    case 69714:                     // 'attribute' 'following-sibling'
-    case 69753:                     // 'element' 'following-sibling'
-    case 69816:                     // 'namespace' 'following-sibling'
-    case 69848:                     // 'processing-instruction' 'following-sibling'
-    case 72274:                     // 'attribute' 'ft-option'
-    case 72313:                     // 'element' 'ft-option'
-    case 72376:                     // 'namespace' 'ft-option'
-    case 72408:                     // 'processing-instruction' 'ft-option'
-    case 74322:                     // 'attribute' 'function'
-    case 74361:                     // 'element' 'function'
-    case 74424:                     // 'namespace' 'function'
-    case 74456:                     // 'processing-instruction' 'function'
-    case 77906:                     // 'attribute' 'if'
-    case 77945:                     // 'element' 'if'
-    case 78008:                     // 'namespace' 'if'
-    case 78040:                     // 'processing-instruction' 'if'
-    case 78418:                     // 'attribute' 'import'
-    case 78457:                     // 'element' 'import'
-    case 78520:                     // 'namespace' 'import'
-    case 78552:                     // 'processing-instruction' 'import'
-    case 78930:                     // 'attribute' 'in'
-    case 78969:                     // 'element' 'in'
-    case 79032:                     // 'namespace' 'in'
-    case 79064:                     // 'processing-instruction' 'in'
-    case 79442:                     // 'attribute' 'index'
-    case 79481:                     // 'element' 'index'
-    case 79544:                     // 'namespace' 'index'
-    case 79576:                     // 'processing-instruction' 'index'
-    case 81490:                     // 'attribute' 'insert'
-    case 81529:                     // 'element' 'insert'
-    case 81592:                     // 'namespace' 'insert'
-    case 81624:                     // 'processing-instruction' 'insert'
-    case 82514:                     // 'attribute' 'integrity'
-    case 82553:                     // 'element' 'integrity'
-    case 82616:                     // 'namespace' 'integrity'
-    case 82648:                     // 'processing-instruction' 'integrity'
-    case 84562:                     // 'attribute' 'item'
-    case 84601:                     // 'element' 'item'
-    case 84664:                     // 'namespace' 'item'
-    case 84696:                     // 'processing-instruction' 'item'
-    case 85586:                     // 'attribute' 'json-item'
-    case 85625:                     // 'element' 'json-item'
-    case 87122:                     // 'attribute' 'last'
-    case 87161:                     // 'element' 'last'
-    case 87224:                     // 'namespace' 'last'
-    case 87256:                     // 'processing-instruction' 'last'
-    case 87634:                     // 'attribute' 'lax'
-    case 87673:                     // 'element' 'lax'
-    case 87736:                     // 'namespace' 'lax'
-    case 87768:                     // 'processing-instruction' 'lax'
-    case 90194:                     // 'attribute' 'loop'
-    case 90233:                     // 'element' 'loop'
-    case 90296:                     // 'namespace' 'loop'
-    case 90328:                     // 'processing-instruction' 'loop'
-    case 93266:                     // 'attribute' 'module'
-    case 93305:                     // 'element' 'module'
-    case 93368:                     // 'namespace' 'module'
-    case 93400:                     // 'processing-instruction' 'module'
-    case 94290:                     // 'attribute' 'namespace'
-    case 94329:                     // 'element' 'namespace'
-    case 94392:                     // 'namespace' 'namespace'
-    case 94424:                     // 'processing-instruction' 'namespace'
-    case 94802:                     // 'attribute' 'namespace-node'
-    case 94841:                     // 'element' 'namespace-node'
-    case 94904:                     // 'namespace' 'namespace-node'
-    case 94936:                     // 'processing-instruction' 'namespace-node'
-    case 97874:                     // 'attribute' 'node'
-    case 97913:                     // 'element' 'node'
-    case 97976:                     // 'namespace' 'node'
-    case 98008:                     // 'processing-instruction' 'node'
-    case 98386:                     // 'attribute' 'nodes'
-    case 98425:                     // 'element' 'nodes'
-    case 98488:                     // 'namespace' 'nodes'
-    case 98520:                     // 'processing-instruction' 'nodes'
-    case 99410:                     // 'attribute' 'object'
-    case 99449:                     // 'element' 'object'
-    case 101970:                    // 'attribute' 'option'
-    case 102009:                    // 'element' 'option'
-    case 102072:                    // 'namespace' 'option'
-    case 102104:                    // 'processing-instruction' 'option'
-    case 103506:                    // 'attribute' 'ordered'
-    case 103545:                    // 'element' 'ordered'
-    case 103608:                    // 'namespace' 'ordered'
-    case 103640:                    // 'processing-instruction' 'ordered'
-    case 104018:                    // 'attribute' 'ordering'
-    case 104057:                    // 'element' 'ordering'
-    case 104120:                    // 'namespace' 'ordering'
-    case 104152:                    // 'processing-instruction' 'ordering'
-    case 105554:                    // 'attribute' 'parent'
-    case 105593:                    // 'element' 'parent'
-    case 105656:                    // 'namespace' 'parent'
-    case 105688:                    // 'processing-instruction' 'parent'
-    case 108626:                    // 'attribute' 'preceding'
-    case 108665:                    // 'element' 'preceding'
-    case 108728:                    // 'namespace' 'preceding'
-    case 108760:                    // 'processing-instruction' 'preceding'
-    case 109138:                    // 'attribute' 'preceding-sibling'
-    case 109177:                    // 'element' 'preceding-sibling'
-    case 109240:                    // 'namespace' 'preceding-sibling'
-    case 109272:                    // 'processing-instruction' 'preceding-sibling'
-    case 110674:                    // 'attribute' 'processing-instruction'
-    case 110713:                    // 'element' 'processing-instruction'
-    case 110776:                    // 'namespace' 'processing-instruction'
-    case 110808:                    // 'processing-instruction' 'processing-instruction'
-    case 111698:                    // 'attribute' 'rename'
-    case 111737:                    // 'element' 'rename'
-    case 111800:                    // 'namespace' 'rename'
-    case 111832:                    // 'processing-instruction' 'rename'
-    case 112210:                    // 'attribute' 'replace'
-    case 112249:                    // 'element' 'replace'
-    case 112312:                    // 'namespace' 'replace'
-    case 112344:                    // 'processing-instruction' 'replace'
-    case 113234:                    // 'attribute' 'returning'
-    case 113273:                    // 'element' 'returning'
-    case 113336:                    // 'namespace' 'returning'
-    case 113368:                    // 'processing-instruction' 'returning'
-    case 113746:                    // 'attribute' 'revalidation'
-    case 113785:                    // 'element' 'revalidation'
-    case 113848:                    // 'namespace' 'revalidation'
-    case 113880:                    // 'processing-instruction' 'revalidation'
-    case 115282:                    // 'attribute' 'schema'
-    case 115321:                    // 'element' 'schema'
-    case 115384:                    // 'namespace' 'schema'
-    case 115416:                    // 'processing-instruction' 'schema'
-    case 115794:                    // 'attribute' 'schema-attribute'
-    case 115833:                    // 'element' 'schema-attribute'
-    case 115896:                    // 'namespace' 'schema-attribute'
-    case 115928:                    // 'processing-instruction' 'schema-attribute'
-    case 116306:                    // 'attribute' 'schema-element'
-    case 116345:                    // 'element' 'schema-element'
-    case 116408:                    // 'namespace' 'schema-element'
-    case 116440:                    // 'processing-instruction' 'schema-element'
-    case 116818:                    // 'attribute' 'score'
-    case 116857:                    // 'element' 'score'
-    case 116920:                    // 'namespace' 'score'
-    case 116952:                    // 'processing-instruction' 'score'
-    case 117330:                    // 'attribute' 'self'
-    case 117369:                    // 'element' 'self'
-    case 117432:                    // 'namespace' 'self'
-    case 117464:                    // 'processing-instruction' 'self'
-    case 119890:                    // 'attribute' 'sliding'
-    case 119929:                    // 'element' 'sliding'
-    case 119992:                    // 'namespace' 'sliding'
-    case 120024:                    // 'processing-instruction' 'sliding'
-    case 120402:                    // 'attribute' 'some'
-    case 120441:                    // 'element' 'some'
-    case 120504:                    // 'namespace' 'some'
-    case 120536:                    // 'processing-instruction' 'some'
-    case 122962:                    // 'attribute' 'strict'
-    case 123001:                    // 'element' 'strict'
-    case 123064:                    // 'namespace' 'strict'
-    case 123096:                    // 'processing-instruction' 'strict'
-    case 124498:                    // 'attribute' 'switch'
-    case 124537:                    // 'element' 'switch'
-    case 124600:                    // 'namespace' 'switch'
-    case 124632:                    // 'processing-instruction' 'switch'
-    case 125010:                    // 'attribute' 'text'
-    case 125049:                    // 'element' 'text'
-    case 125112:                    // 'namespace' 'text'
-    case 125144:                    // 'processing-instruction' 'text'
-    case 128082:                    // 'attribute' 'try'
-    case 128121:                    // 'element' 'try'
-    case 128184:                    // 'namespace' 'try'
-    case 128216:                    // 'processing-instruction' 'try'
-    case 128594:                    // 'attribute' 'tumbling'
-    case 128633:                    // 'element' 'tumbling'
-    case 128696:                    // 'namespace' 'tumbling'
-    case 128728:                    // 'processing-instruction' 'tumbling'
-    case 129106:                    // 'attribute' 'type'
-    case 129145:                    // 'element' 'type'
-    case 129208:                    // 'namespace' 'type'
-    case 129240:                    // 'processing-instruction' 'type'
-    case 129618:                    // 'attribute' 'typeswitch'
-    case 129657:                    // 'element' 'typeswitch'
-    case 129720:                    // 'namespace' 'typeswitch'
-    case 129752:                    // 'processing-instruction' 'typeswitch'
-    case 131154:                    // 'attribute' 'unordered'
-    case 131193:                    // 'element' 'unordered'
-    case 131256:                    // 'namespace' 'unordered'
-    case 131288:                    // 'processing-instruction' 'unordered'
-    case 131666:                    // 'attribute' 'updating'
-    case 131705:                    // 'element' 'updating'
-    case 131768:                    // 'namespace' 'updating'
-    case 131800:                    // 'processing-instruction' 'updating'
-    case 133202:                    // 'attribute' 'validate'
-    case 133241:                    // 'element' 'validate'
-    case 133304:                    // 'namespace' 'validate'
-    case 133336:                    // 'processing-instruction' 'validate'
-    case 133714:                    // 'attribute' 'value'
-    case 133753:                    // 'element' 'value'
-    case 133816:                    // 'namespace' 'value'
-    case 133848:                    // 'processing-instruction' 'value'
-    case 134226:                    // 'attribute' 'variable'
-    case 134265:                    // 'element' 'variable'
-    case 134328:                    // 'namespace' 'variable'
-    case 134360:                    // 'processing-instruction' 'variable'
-    case 134738:                    // 'attribute' 'version'
-    case 134777:                    // 'element' 'version'
-    case 134840:                    // 'namespace' 'version'
-    case 134872:                    // 'processing-instruction' 'version'
-    case 136786:                    // 'attribute' 'while'
-    case 136825:                    // 'element' 'while'
-    case 136888:                    // 'namespace' 'while'
-    case 136920:                    // 'processing-instruction' 'while'
-    case 140370:                    // 'attribute' 'xquery'
-    case 140409:                    // 'element' 'xquery'
-    case 140472:                    // 'namespace' 'xquery'
-    case 140504:                    // 'processing-instruction' 'xquery'
-    case 141394:                    // 'attribute' '{'
-    case 141408:                    // 'comment' '{'
-    case 141431:                    // 'document' '{'
-    case 141433:                    // 'element' '{'
-    case 141496:                    // 'namespace' '{'
-    case 141514:                    // 'ordered' '{'
-    case 141528:                    // 'processing-instruction' '{'
-    case 141556:                    // 'text' '{'
-    case 141568:                    // 'unordered' '{'
-      try_PostfixExpr();
-      break;
-    case -3:
-      break;
-    default:
-      try_AxisStep();
-    }
-  }
-
-  function parse_AxisStep()
-  {
-    eventHandler.startNonterminal("AxisStep", e0);
-    switch (l1)
-    {
-    case 73:                        // 'ancestor'
-    case 74:                        // 'ancestor-or-self'
-    case 206:                       // 'parent'
-    case 212:                       // 'preceding'
-    case 213:                       // 'preceding-sibling'
-      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 45:                        // '..'
-    case 26185:                     // 'ancestor' '::'
-    case 26186:                     // 'ancestor-or-self' '::'
-    case 26318:                     // 'parent' '::'
-    case 26324:                     // 'preceding' '::'
-    case 26325:                     // 'preceding-sibling' '::'
-      parse_ReverseStep();
-      break;
-    default:
-      parse_ForwardStep();
-    }
-    lookahead1W(236);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-    whitespace();
-    parse_PredicateList();
-    eventHandler.endNonterminal("AxisStep", e0);
-  }
-
-  function try_AxisStep()
-  {
-    switch (l1)
-    {
-    case 73:                        // 'ancestor'
-    case 74:                        // 'ancestor-or-self'
-    case 206:                       // 'parent'
-    case 212:                       // 'preceding'
-    case 213:                       // 'preceding-sibling'
-      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 45:                        // '..'
-    case 26185:                     // 'ancestor' '::'
-    case 26186:                     // 'ancestor-or-self' '::'
-    case 26318:                     // 'parent' '::'
-    case 26324:                     // 'preceding' '::'
-    case 26325:                     // 'preceding-sibling' '::'
-      try_ReverseStep();
-      break;
-    default:
-      try_ForwardStep();
-    }
-    lookahead1W(236);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-    try_PredicateList();
-  }
-
-  function parse_ForwardStep()
-  {
-    eventHandler.startNonterminal("ForwardStep", e0);
-    switch (l1)
-    {
-    case 82:                        // 'attribute'
-      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    case 93:                        // 'child'
-    case 111:                       // 'descendant'
-    case 112:                       // 'descendant-or-self'
-    case 135:                       // 'following'
-    case 136:                       // 'following-sibling'
-    case 229:                       // 'self'
-      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 26194:                     // 'attribute' '::'
-    case 26205:                     // 'child' '::'
-    case 26223:                     // 'descendant' '::'
-    case 26224:                     // 'descendant-or-self' '::'
-    case 26247:                     // 'following' '::'
-    case 26248:                     // 'following-sibling' '::'
-    case 26341:                     // 'self' '::'
-      parse_ForwardAxis();
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_NodeTest();
-      break;
-    default:
-      parse_AbbrevForwardStep();
-    }
-    eventHandler.endNonterminal("ForwardStep", e0);
-  }
-
-  function try_ForwardStep()
-  {
-    switch (l1)
-    {
-    case 82:                        // 'attribute'
-      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    case 93:                        // 'child'
-    case 111:                       // 'descendant'
-    case 112:                       // 'descendant-or-self'
-    case 135:                       // 'following'
-    case 136:                       // 'following-sibling'
-    case 229:                       // 'self'
-      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 26194:                     // 'attribute' '::'
-    case 26205:                     // 'child' '::'
-    case 26223:                     // 'descendant' '::'
-    case 26224:                     // 'descendant-or-self' '::'
-    case 26247:                     // 'following' '::'
-    case 26248:                     // 'following-sibling' '::'
-    case 26341:                     // 'self' '::'
-      try_ForwardAxis();
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_NodeTest();
-      break;
-    default:
-      try_AbbrevForwardStep();
-    }
-  }
-
-  function parse_ForwardAxis()
-  {
-    eventHandler.startNonterminal("ForwardAxis", e0);
-    switch (l1)
-    {
-    case 93:                        // 'child'
-      shift(93);                    // 'child'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 111:                       // 'descendant'
-      shift(111);                   // 'descendant'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 82:                        // 'attribute'
-      shift(82);                    // 'attribute'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 229:                       // 'self'
-      shift(229);                   // 'self'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 112:                       // 'descendant-or-self'
-      shift(112);                   // 'descendant-or-self'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 136:                       // 'following-sibling'
-      shift(136);                   // 'following-sibling'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    default:
-      shift(135);                   // 'following'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-    }
-    eventHandler.endNonterminal("ForwardAxis", e0);
-  }
-
-  function try_ForwardAxis()
-  {
-    switch (l1)
-    {
-    case 93:                        // 'child'
-      shiftT(93);                   // 'child'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 111:                       // 'descendant'
-      shiftT(111);                  // 'descendant'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 82:                        // 'attribute'
-      shiftT(82);                   // 'attribute'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 229:                       // 'self'
-      shiftT(229);                  // 'self'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 112:                       // 'descendant-or-self'
-      shiftT(112);                  // 'descendant-or-self'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 136:                       // 'following-sibling'
-      shiftT(136);                  // 'following-sibling'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    default:
-      shiftT(135);                  // 'following'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-    }
-  }
-
-  function parse_AbbrevForwardStep()
-  {
-    eventHandler.startNonterminal("AbbrevForwardStep", e0);
-    if (l1 == 66)                   // '@'
-    {
-      shift(66);                    // '@'
-    }
-    lookahead1W(255);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_NodeTest();
-    eventHandler.endNonterminal("AbbrevForwardStep", e0);
-  }
-
-  function try_AbbrevForwardStep()
-  {
-    if (l1 == 66)                   // '@'
-    {
-      shiftT(66);                   // '@'
-    }
-    lookahead1W(255);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_NodeTest();
-  }
-
-  function parse_ReverseStep()
-  {
-    eventHandler.startNonterminal("ReverseStep", e0);
-    switch (l1)
-    {
-    case 45:                        // '..'
-      parse_AbbrevReverseStep();
-      break;
-    default:
-      parse_ReverseAxis();
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_NodeTest();
-    }
-    eventHandler.endNonterminal("ReverseStep", e0);
-  }
-
-  function try_ReverseStep()
-  {
-    switch (l1)
-    {
-    case 45:                        // '..'
-      try_AbbrevReverseStep();
-      break;
-    default:
-      try_ReverseAxis();
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_NodeTest();
-    }
-  }
-
-  function parse_ReverseAxis()
-  {
-    eventHandler.startNonterminal("ReverseAxis", e0);
-    switch (l1)
-    {
-    case 206:                       // 'parent'
-      shift(206);                   // 'parent'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 73:                        // 'ancestor'
-      shift(73);                    // 'ancestor'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 213:                       // 'preceding-sibling'
-      shift(213);                   // 'preceding-sibling'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    case 212:                       // 'preceding'
-      shift(212);                   // 'preceding'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-      break;
-    default:
-      shift(74);                    // 'ancestor-or-self'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shift(51);                    // '::'
-    }
-    eventHandler.endNonterminal("ReverseAxis", e0);
-  }
-
-  function try_ReverseAxis()
-  {
-    switch (l1)
-    {
-    case 206:                       // 'parent'
-      shiftT(206);                  // 'parent'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 73:                        // 'ancestor'
-      shiftT(73);                   // 'ancestor'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 213:                       // 'preceding-sibling'
-      shiftT(213);                  // 'preceding-sibling'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    case 212:                       // 'preceding'
-      shiftT(212);                  // 'preceding'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-      break;
-    default:
-      shiftT(74);                   // 'ancestor-or-self'
-      lookahead1W(26);              // S^WS | '(:' | '::'
-      shiftT(51);                   // '::'
-    }
-  }
-
-  function parse_AbbrevReverseStep()
-  {
-    eventHandler.startNonterminal("AbbrevReverseStep", e0);
-    shift(45);                      // '..'
-    eventHandler.endNonterminal("AbbrevReverseStep", e0);
-  }
-
-  function try_AbbrevReverseStep()
-  {
-    shiftT(45);                     // '..'
-  }
-
-  function parse_NodeTest()
-  {
-    eventHandler.startNonterminal("NodeTest", e0);
-    switch (l1)
-    {
-    case 78:                        // 'array'
-    case 82:                        // 'attribute'
-    case 96:                        // 'comment'
-    case 120:                       // 'document-node'
-    case 121:                       // 'element'
-    case 167:                       // 'json-item'
-    case 185:                       // 'namespace-node'
-    case 191:                       // 'node'
-    case 194:                       // 'object'
-    case 216:                       // 'processing-instruction'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 244:                       // 'text'
-      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 17486:                     // 'array' '('
-    case 17490:                     // 'attribute' '('
-    case 17504:                     // 'comment' '('
-    case 17528:                     // 'document-node' '('
-    case 17529:                     // 'element' '('
-    case 17575:                     // 'json-item' '('
-    case 17593:                     // 'namespace-node' '('
-    case 17599:                     // 'node' '('
-    case 17602:                     // 'object' '('
-    case 17624:                     // 'processing-instruction' '('
-    case 17634:                     // 'schema-attribute' '('
-    case 17635:                     // 'schema-element' '('
-    case 17652:                     // 'text' '('
-      parse_KindTest();
-      break;
-    default:
-      parse_NameTest();
-    }
-    eventHandler.endNonterminal("NodeTest", e0);
-  }
-
-  function try_NodeTest()
-  {
-    switch (l1)
-    {
-    case 78:                        // 'array'
-    case 82:                        // 'attribute'
-    case 96:                        // 'comment'
-    case 120:                       // 'document-node'
-    case 121:                       // 'element'
-    case 167:                       // 'json-item'
-    case 185:                       // 'namespace-node'
-    case 191:                       // 'node'
-    case 194:                       // 'object'
-    case 216:                       // 'processing-instruction'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 244:                       // 'text'
-      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 17486:                     // 'array' '('
-    case 17490:                     // 'attribute' '('
-    case 17504:                     // 'comment' '('
-    case 17528:                     // 'document-node' '('
-    case 17529:                     // 'element' '('
-    case 17575:                     // 'json-item' '('
-    case 17593:                     // 'namespace-node' '('
-    case 17599:                     // 'node' '('
-    case 17602:                     // 'object' '('
-    case 17624:                     // 'processing-instruction' '('
-    case 17634:                     // 'schema-attribute' '('
-    case 17635:                     // 'schema-element' '('
-    case 17652:                     // 'text' '('
-      try_KindTest();
-      break;
-    default:
-      try_NameTest();
-    }
-  }
-
-  function parse_NameTest()
-  {
-    eventHandler.startNonterminal("NameTest", e0);
-    switch (l1)
-    {
-    case 5:                         // Wildcard
-      shift(5);                     // Wildcard
-      break;
-    default:
-      parse_EQName();
-    }
-    eventHandler.endNonterminal("NameTest", e0);
-  }
-
-  function try_NameTest()
-  {
-    switch (l1)
-    {
-    case 5:                         // Wildcard
-      shiftT(5);                    // Wildcard
-      break;
-    default:
-      try_EQName();
-    }
-  }
-
-  function parse_PostfixExpr()
-  {
-    eventHandler.startNonterminal("PostfixExpr", e0);
-    parse_PrimaryExpr();
-    for (;;)
-    {
-      lookahead1W(239);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      if (l1 != 34                  // '('
-       && l1 != 68)                 // '['
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 68:                      // '['
-        whitespace();
-        parse_Predicate();
-        break;
-      default:
-        whitespace();
-        parse_ArgumentList();
-      }
-    }
-    eventHandler.endNonterminal("PostfixExpr", e0);
-  }
-
-  function try_PostfixExpr()
-  {
-    try_PrimaryExpr();
-    for (;;)
-    {
-      lookahead1W(239);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |
-      if (l1 != 34                  // '('
-       && l1 != 68)                 // '['
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 68:                      // '['
-        try_Predicate();
-        break;
-      default:
-        try_ArgumentList();
-      }
-    }
-  }
-
-  function parse_ArgumentList()
-  {
-    eventHandler.startNonterminal("ArgumentList", e0);
-    shift(34);                      // '('
-    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 37)                   // ')'
-    {
-      whitespace();
-      parse_Argument();
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shift(41);                  // ','
-        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        whitespace();
-        parse_Argument();
-      }
-    }
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("ArgumentList", e0);
-  }
-
-  function try_ArgumentList()
-  {
-    shiftT(34);                     // '('
-    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 37)                   // ')'
-    {
-      try_Argument();
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shiftT(41);                 // ','
-        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        try_Argument();
-      }
-    }
-    shiftT(37);                     // ')'
-  }
-
-  function parse_PredicateList()
-  {
-    eventHandler.startNonterminal("PredicateList", e0);
-    for (;;)
-    {
-      lookahead1W(236);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-      if (l1 != 68)                 // '['
-      {
-        break;
-      }
-      whitespace();
-      parse_Predicate();
-    }
-    eventHandler.endNonterminal("PredicateList", e0);
-  }
-
-  function try_PredicateList()
-  {
-    for (;;)
-    {
-      lookahead1W(236);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |
-      if (l1 != 68)                 // '['
-      {
-        break;
-      }
-      try_Predicate();
-    }
-  }
-
-  function parse_Predicate()
-  {
-    eventHandler.startNonterminal("Predicate", e0);
-    shift(68);                      // '['
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(69);                      // ']'
-    eventHandler.endNonterminal("Predicate", e0);
-  }
-
-  function try_Predicate()
-  {
-    shiftT(68);                     // '['
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(69);                     // ']'
-  }
-
-  function parse_Literal()
-  {
-    eventHandler.startNonterminal("Literal", e0);
-    switch (l1)
-    {
-    case 11:                        // StringLiteral
-      shift(11);                    // StringLiteral
-      break;
-    default:
-      parse_NumericLiteral();
-    }
-    eventHandler.endNonterminal("Literal", e0);
-  }
-
-  function try_Literal()
-  {
-    switch (l1)
-    {
-    case 11:                        // StringLiteral
-      shiftT(11);                   // StringLiteral
-      break;
-    default:
-      try_NumericLiteral();
-    }
-  }
-
-  function parse_NumericLiteral()
-  {
-    eventHandler.startNonterminal("NumericLiteral", e0);
-    switch (l1)
-    {
-    case 8:                         // IntegerLiteral
-      shift(8);                     // IntegerLiteral
-      break;
-    case 9:                         // DecimalLiteral
-      shift(9);                     // DecimalLiteral
-      break;
-    default:
-      shift(10);                    // DoubleLiteral
-    }
-    eventHandler.endNonterminal("NumericLiteral", e0);
-  }
-
-  function try_NumericLiteral()
-  {
-    switch (l1)
-    {
-    case 8:                         // IntegerLiteral
-      shiftT(8);                    // IntegerLiteral
-      break;
-    case 9:                         // DecimalLiteral
-      shiftT(9);                    // DecimalLiteral
-      break;
-    default:
-      shiftT(10);                   // DoubleLiteral
-    }
-  }
-
-  function parse_VarRef()
-  {
-    eventHandler.startNonterminal("VarRef", e0);
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    eventHandler.endNonterminal("VarRef", e0);
-  }
-
-  function try_VarRef()
-  {
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-  }
-
-  function parse_VarName()
-  {
-    eventHandler.startNonterminal("VarName", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("VarName", e0);
-  }
-
-  function try_VarName()
-  {
-    try_EQName();
-  }
-
-  function parse_ParenthesizedExpr()
-  {
-    eventHandler.startNonterminal("ParenthesizedExpr", e0);
-    shift(34);                      // '('
-    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 37)                   // ')'
-    {
-      whitespace();
-      parse_Expr();
-    }
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("ParenthesizedExpr", e0);
-  }
-
-  function try_ParenthesizedExpr()
-  {
-    shiftT(34);                     // '('
-    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 37)                   // ')'
-    {
-      try_Expr();
-    }
-    shiftT(37);                     // ')'
-  }
-
-  function parse_ContextItemExpr()
-  {
-    eventHandler.startNonterminal("ContextItemExpr", e0);
-    shift(44);                      // '.'
-    eventHandler.endNonterminal("ContextItemExpr", e0);
-  }
-
-  function try_ContextItemExpr()
-  {
-    shiftT(44);                     // '.'
-  }
-
-  function parse_OrderedExpr()
-  {
-    eventHandler.startNonterminal("OrderedExpr", e0);
-    shift(202);                     // 'ordered'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("OrderedExpr", e0);
-  }
-
-  function try_OrderedExpr()
-  {
-    shiftT(202);                    // 'ordered'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_UnorderedExpr()
-  {
-    eventHandler.startNonterminal("UnorderedExpr", e0);
-    shift(256);                     // 'unordered'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("UnorderedExpr", e0);
-  }
-
-  function try_UnorderedExpr()
-  {
-    shiftT(256);                    // 'unordered'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_FunctionCall()
-  {
-    eventHandler.startNonterminal("FunctionCall", e0);
-    parse_FunctionName();
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    whitespace();
-    parse_ArgumentList();
-    eventHandler.endNonterminal("FunctionCall", e0);
-  }
-
-  function try_FunctionCall()
-  {
-    try_FunctionName();
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    try_ArgumentList();
-  }
-
-  function parse_Argument()
-  {
-    eventHandler.startNonterminal("Argument", e0);
-    switch (l1)
-    {
-    case 64:                        // '?'
-      parse_ArgumentPlaceholder();
-      break;
-    default:
-      parse_ExprSingle();
-    }
-    eventHandler.endNonterminal("Argument", e0);
-  }
-
-  function try_Argument()
-  {
-    switch (l1)
-    {
-    case 64:                        // '?'
-      try_ArgumentPlaceholder();
-      break;
-    default:
-      try_ExprSingle();
-    }
-  }
-
-  function parse_ArgumentPlaceholder()
-  {
-    eventHandler.startNonterminal("ArgumentPlaceholder", e0);
-    shift(64);                      // '?'
-    eventHandler.endNonterminal("ArgumentPlaceholder", e0);
-  }
-
-  function try_ArgumentPlaceholder()
-  {
-    shiftT(64);                     // '?'
-  }
-
-  function parse_Constructor()
-  {
-    eventHandler.startNonterminal("Constructor", e0);
-    switch (l1)
-    {
-    case 54:                        // '<'
-    case 55:                        // '<!--'
-    case 59:                        // '<?'
-      parse_DirectConstructor();
-      break;
-    default:
-      parse_ComputedConstructor();
-    }
-    eventHandler.endNonterminal("Constructor", e0);
-  }
-
-  function try_Constructor()
-  {
-    switch (l1)
-    {
-    case 54:                        // '<'
-    case 55:                        // '<!--'
-    case 59:                        // '<?'
-      try_DirectConstructor();
-      break;
-    default:
-      try_ComputedConstructor();
-    }
-  }
-
-  function parse_DirectConstructor()
-  {
-    eventHandler.startNonterminal("DirectConstructor", e0);
-    switch (l1)
-    {
-    case 54:                        // '<'
-      parse_DirElemConstructor();
-      break;
-    case 55:                        // '<!--'
-      parse_DirCommentConstructor();
-      break;
-    default:
-      parse_DirPIConstructor();
-    }
-    eventHandler.endNonterminal("DirectConstructor", e0);
-  }
-
-  function try_DirectConstructor()
-  {
-    switch (l1)
-    {
-    case 54:                        // '<'
-      try_DirElemConstructor();
-      break;
-    case 55:                        // '<!--'
-      try_DirCommentConstructor();
-      break;
-    default:
-      try_DirPIConstructor();
-    }
-  }
-
-  function parse_DirElemConstructor()
-  {
-    eventHandler.startNonterminal("DirElemConstructor", e0);
-    shift(54);                      // '<'
-    lookahead1(4);                  // QName
-    shift(20);                      // QName
-    parse_DirAttributeList();
-    switch (l1)
-    {
-    case 48:                        // '/>'
-      shift(48);                    // '/>'
-      break;
-    default:
-      shift(61);                    // '>'
-      for (;;)
-      {
-        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |
-        if (l1 == 56)               // '</'
-        {
-          break;
-        }
-        parse_DirElemContent();
-      }
-      shift(56);                    // '</'
-      lookahead1(4);                // QName
-      shift(20);                    // QName
-      lookahead1(12);               // S | '>'
-      if (l1 == 21)                 // S
-      {
-        shift(21);                  // S
-      }
-      lookahead1(8);                // '>'
-      shift(61);                    // '>'
-    }
-    eventHandler.endNonterminal("DirElemConstructor", e0);
-  }
-
-  function try_DirElemConstructor()
-  {
-    shiftT(54);                     // '<'
-    lookahead1(4);                  // QName
-    shiftT(20);                     // QName
-    try_DirAttributeList();
-    switch (l1)
-    {
-    case 48:                        // '/>'
-      shiftT(48);                   // '/>'
-      break;
-    default:
-      shiftT(61);                   // '>'
-      for (;;)
-      {
-        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |
-        if (l1 == 56)               // '</'
-        {
-          break;
-        }
-        try_DirElemContent();
-      }
-      shiftT(56);                   // '</'
-      lookahead1(4);                // QName
-      shiftT(20);                   // QName
-      lookahead1(12);               // S | '>'
-      if (l1 == 21)                 // S
-      {
-        shiftT(21);                 // S
-      }
-      lookahead1(8);                // '>'
-      shiftT(61);                   // '>'
-    }
-  }
-
-  function parse_DirAttributeList()
-  {
-    eventHandler.startNonterminal("DirAttributeList", e0);
-    for (;;)
-    {
-      lookahead1(19);               // S | '/>' | '>'
-      if (l1 != 21)                 // S
-      {
-        break;
-      }
-      shift(21);                    // S
-      lookahead1(91);               // QName | S | '/>' | '>'
-      if (l1 == 20)                 // QName
-      {
-        shift(20);                  // QName
-        lookahead1(11);             // S | '='
-        if (l1 == 21)               // S
-        {
-          shift(21);                // S
-        }
-        lookahead1(7);              // '='
-        shift(60);                  // '='
-        lookahead1(18);             // S | '"' | "'"
-        if (l1 == 21)               // S
-        {
-          shift(21);                // S
-        }
-        parse_DirAttributeValue();
-      }
-    }
-    eventHandler.endNonterminal("DirAttributeList", e0);
-  }
-
-  function try_DirAttributeList()
-  {
-    for (;;)
-    {
-      lookahead1(19);               // S | '/>' | '>'
-      if (l1 != 21)                 // S
-      {
-        break;
-      }
-      shiftT(21);                   // S
-      lookahead1(91);               // QName | S | '/>' | '>'
-      if (l1 == 20)                 // QName
-      {
-        shiftT(20);                 // QName
-        lookahead1(11);             // S | '='
-        if (l1 == 21)               // S
-        {
-          shiftT(21);               // S
-        }
-        lookahead1(7);              // '='
-        shiftT(60);                 // '='
-        lookahead1(18);             // S | '"' | "'"
-        if (l1 == 21)               // S
-        {
-          shiftT(21);               // S
-        }
-        try_DirAttributeValue();
-      }
-    }
-  }
-
-  function parse_DirAttributeValue()
-  {
-    eventHandler.startNonterminal("DirAttributeValue", e0);
-    lookahead1(14);                 // '"' | "'"
-    switch (l1)
-    {
-    case 28:                        // '"'
-      shift(28);                    // '"'
-      for (;;)
-      {
-        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '"' | '{' |
-        if (l1 == 28)               // '"'
-        {
-          break;
-        }
-        switch (l1)
-        {
-        case 13:                    // EscapeQuot
-          shift(13);                // EscapeQuot
-          break;
-        default:
-          parse_QuotAttrValueContent();
-        }
-      }
-      shift(28);                    // '"'
-      break;
-    default:
-      shift(33);                    // "'"
-      for (;;)
-      {
-        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | "'" | '{' |
-        if (l1 == 33)               // "'"
-        {
-          break;
-        }
-        switch (l1)
-        {
-        case 14:                    // EscapeApos
-          shift(14);                // EscapeApos
-          break;
-        default:
-          parse_AposAttrValueContent();
-        }
-      }
-      shift(33);                    // "'"
-    }
-    eventHandler.endNonterminal("DirAttributeValue", e0);
-  }
-
-  function try_DirAttributeValue()
-  {
-    lookahead1(14);                 // '"' | "'"
-    switch (l1)
-    {
-    case 28:                        // '"'
-      shiftT(28);                   // '"'
-      for (;;)
-      {
-        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '"' | '{' |
-        if (l1 == 28)               // '"'
-        {
-          break;
-        }
-        switch (l1)
-        {
-        case 13:                    // EscapeQuot
-          shiftT(13);               // EscapeQuot
-          break;
-        default:
-          try_QuotAttrValueContent();
-        }
-      }
-      shiftT(28);                   // '"'
-      break;
-    default:
-      shiftT(33);                   // "'"
-      for (;;)
-      {
-        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | "'" | '{' |
-        if (l1 == 33)               // "'"
-        {
-          break;
-        }
-        switch (l1)
-        {
-        case 14:                    // EscapeApos
-          shiftT(14);               // EscapeApos
-          break;
-        default:
-          try_AposAttrValueContent();
-        }
-      }
-      shiftT(33);                   // "'"
-    }
-  }
-
-  function parse_QuotAttrValueContent()
-  {
-    eventHandler.startNonterminal("QuotAttrValueContent", e0);
-    switch (l1)
-    {
-    case 16:                        // QuotAttrContentChar
-      shift(16);                    // QuotAttrContentChar
-      break;
-    default:
-      parse_CommonContent();
-    }
-    eventHandler.endNonterminal("QuotAttrValueContent", e0);
-  }
-
-  function try_QuotAttrValueContent()
-  {
-    switch (l1)
-    {
-    case 16:                        // QuotAttrContentChar
-      shiftT(16);                   // QuotAttrContentChar
-      break;
-    default:
-      try_CommonContent();
-    }
-  }
-
-  function parse_AposAttrValueContent()
-  {
-    eventHandler.startNonterminal("AposAttrValueContent", e0);
-    switch (l1)
-    {
-    case 17:                        // AposAttrContentChar
-      shift(17);                    // AposAttrContentChar
-      break;
-    default:
-      parse_CommonContent();
-    }
-    eventHandler.endNonterminal("AposAttrValueContent", e0);
-  }
-
-  function try_AposAttrValueContent()
-  {
-    switch (l1)
-    {
-    case 17:                        // AposAttrContentChar
-      shiftT(17);                   // AposAttrContentChar
-      break;
-    default:
-      try_CommonContent();
-    }
-  }
-
-  function parse_DirElemContent()
-  {
-    eventHandler.startNonterminal("DirElemContent", e0);
-    switch (l1)
-    {
-    case 54:                        // '<'
-    case 55:                        // '<!--'
-    case 59:                        // '<?'
-      parse_DirectConstructor();
-      break;
-    case 4:                         // CDataSection
-      shift(4);                     // CDataSection
-      break;
-    case 15:                        // ElementContentChar
-      shift(15);                    // ElementContentChar
-      break;
-    default:
-      parse_CommonContent();
-    }
-    eventHandler.endNonterminal("DirElemContent", e0);
-  }
-
-  function try_DirElemContent()
-  {
-    switch (l1)
-    {
-    case 54:                        // '<'
-    case 55:                        // '<!--'
-    case 59:                        // '<?'
-      try_DirectConstructor();
-      break;
-    case 4:                         // CDataSection
-      shiftT(4);                    // CDataSection
-      break;
-    case 15:                        // ElementContentChar
-      shiftT(15);                   // ElementContentChar
-      break;
-    default:
-      try_CommonContent();
-    }
-  }
-
-  function parse_DirCommentConstructor()
-  {
-    eventHandler.startNonterminal("DirCommentConstructor", e0);
-    shift(55);                      // '<!--'
-    lookahead1(1);                  // DirCommentContents
-    shift(2);                       // DirCommentContents
-    lookahead1(6);                  // '-->'
-    shift(43);                      // '-->'
-    eventHandler.endNonterminal("DirCommentConstructor", e0);
-  }
-
-  function try_DirCommentConstructor()
-  {
-    shiftT(55);                     // '<!--'
-    lookahead1(1);                  // DirCommentContents
-    shiftT(2);                      // DirCommentContents
-    lookahead1(6);                  // '-->'
-    shiftT(43);                     // '-->'
-  }
-
-  function parse_DirPIConstructor()
-  {
-    eventHandler.startNonterminal("DirPIConstructor", e0);
-    shift(59);                      // '<?'
-    lookahead1(3);                  // PITarget
-    shift(18);                      // PITarget
-    lookahead1(13);                 // S | '?>'
-    if (l1 == 21)                   // S
-    {
-      shift(21);                    // S
-      lookahead1(2);                // DirPIContents
-      shift(3);                     // DirPIContents
-    }
-    lookahead1(9);                  // '?>'
-    shift(65);                      // '?>'
-    eventHandler.endNonterminal("DirPIConstructor", e0);
-  }
-
-  function try_DirPIConstructor()
-  {
-    shiftT(59);                     // '<?'
-    lookahead1(3);                  // PITarget
-    shiftT(18);                     // PITarget
-    lookahead1(13);                 // S | '?>'
-    if (l1 == 21)                   // S
-    {
-      shiftT(21);                   // S
-      lookahead1(2);                // DirPIContents
-      shiftT(3);                    // DirPIContents
-    }
-    lookahead1(9);                  // '?>'
-    shiftT(65);                     // '?>'
-  }
-
-  function parse_ComputedConstructor()
-  {
-    eventHandler.startNonterminal("ComputedConstructor", e0);
-    switch (l1)
-    {
-    case 119:                       // 'document'
-      parse_CompDocConstructor();
-      break;
-    case 121:                       // 'element'
-      parse_CompElemConstructor();
-      break;
-    case 82:                        // 'attribute'
-      parse_CompAttrConstructor();
-      break;
-    case 184:                       // 'namespace'
-      parse_CompNamespaceConstructor();
-      break;
-    case 244:                       // 'text'
-      parse_CompTextConstructor();
-      break;
-    case 96:                        // 'comment'
-      parse_CompCommentConstructor();
-      break;
-    default:
-      parse_CompPIConstructor();
-    }
-    eventHandler.endNonterminal("ComputedConstructor", e0);
-  }
-
-  function try_ComputedConstructor()
-  {
-    switch (l1)
-    {
-    case 119:                       // 'document'
-      try_CompDocConstructor();
-      break;
-    case 121:                       // 'element'
-      try_CompElemConstructor();
-      break;
-    case 82:                        // 'attribute'
-      try_CompAttrConstructor();
-      break;
-    case 184:                       // 'namespace'
-      try_CompNamespaceConstructor();
-      break;
-    case 244:                       // 'text'
-      try_CompTextConstructor();
-      break;
-    case 96:                        // 'comment'
-      try_CompCommentConstructor();
-      break;
-    default:
-      try_CompPIConstructor();
-    }
-  }
-
-  function parse_CompElemConstructor()
-  {
-    eventHandler.startNonterminal("CompElemConstructor", e0);
-    shift(121);                     // 'element'
-    lookahead1W(256);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shift(276);                   // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_Expr();
-      shift(282);                   // '}'
-      break;
-    default:
-      whitespace();
-      parse_EQName();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shift(276);                     // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 282)                  // '}'
-    {
-      whitespace();
-      parse_ContentExpr();
-    }
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("CompElemConstructor", e0);
-  }
-
-  function try_CompElemConstructor()
-  {
-    shiftT(121);                    // 'element'
-    lookahead1W(256);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shiftT(276);                  // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_Expr();
-      shiftT(282);                  // '}'
-      break;
-    default:
-      try_EQName();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shiftT(276);                    // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 282)                  // '}'
-    {
-      try_ContentExpr();
-    }
-    shiftT(282);                    // '}'
-  }
-
-  function parse_CompNamespaceConstructor()
-  {
-    eventHandler.startNonterminal("CompNamespaceConstructor", e0);
-    shift(184);                     // 'namespace'
-    lookahead1W(249);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shift(276);                   // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_PrefixExpr();
-      shift(282);                   // '}'
-      break;
-    default:
-      whitespace();
-      parse_Prefix();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_URIExpr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("CompNamespaceConstructor", e0);
-  }
-
-  function try_CompNamespaceConstructor()
-  {
-    shiftT(184);                    // 'namespace'
-    lookahead1W(249);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shiftT(276);                  // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_PrefixExpr();
-      shiftT(282);                  // '}'
-      break;
-    default:
-      try_Prefix();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_URIExpr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_Prefix()
-  {
-    eventHandler.startNonterminal("Prefix", e0);
-    parse_NCName();
-    eventHandler.endNonterminal("Prefix", e0);
-  }
-
-  function try_Prefix()
-  {
-    try_NCName();
-  }
-
-  function parse_PrefixExpr()
-  {
-    eventHandler.startNonterminal("PrefixExpr", e0);
-    parse_Expr();
-    eventHandler.endNonterminal("PrefixExpr", e0);
-  }
-
-  function try_PrefixExpr()
-  {
-    try_Expr();
-  }
-
-  function parse_URIExpr()
-  {
-    eventHandler.startNonterminal("URIExpr", e0);
-    parse_Expr();
-    eventHandler.endNonterminal("URIExpr", e0);
-  }
-
-  function try_URIExpr()
-  {
-    try_Expr();
-  }
-
-  function parse_FunctionItemExpr()
-  {
-    eventHandler.startNonterminal("FunctionItemExpr", e0);
-    switch (l1)
-    {
-    case 145:                       // 'function'
-      lookahead2W(92);              // S^WS | '#' | '(' | '(:'
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 32:                        // '%'
-    case 17553:                     // 'function' '('
-      parse_InlineFunctionExpr();
-      break;
-    default:
-      parse_NamedFunctionRef();
-    }
-    eventHandler.endNonterminal("FunctionItemExpr", e0);
-  }
-
-  function try_FunctionItemExpr()
-  {
-    switch (l1)
-    {
-    case 145:                       // 'function'
-      lookahead2W(92);              // S^WS | '#' | '(' | '(:'
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 32:                        // '%'
-    case 17553:                     // 'function' '('
-      try_InlineFunctionExpr();
-      break;
-    default:
-      try_NamedFunctionRef();
-    }
-  }
-
-  function parse_NamedFunctionRef()
-  {
-    eventHandler.startNonterminal("NamedFunctionRef", e0);
-    parse_EQName();
-    lookahead1W(20);                // S^WS | '#' | '(:'
-    shift(29);                      // '#'
-    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'
-    shift(8);                       // IntegerLiteral
-    eventHandler.endNonterminal("NamedFunctionRef", e0);
-  }
-
-  function try_NamedFunctionRef()
-  {
-    try_EQName();
-    lookahead1W(20);                // S^WS | '#' | '(:'
-    shiftT(29);                     // '#'
-    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'
-    shiftT(8);                      // IntegerLiteral
-  }
-
-  function parse_InlineFunctionExpr()
-  {
-    eventHandler.startNonterminal("InlineFunctionExpr", e0);
-    for (;;)
-    {
-      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'
-      if (l1 != 32)                 // '%'
-      {
-        break;
-      }
-      whitespace();
-      parse_Annotation();
-    }
-    shift(145);                     // 'function'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(94);                // S^WS | '$' | '(:' | ')'
-    if (l1 == 31)                   // '$'
-    {
-      whitespace();
-      parse_ParamList();
-    }
-    shift(37);                      // ')'
-    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'
-    if (l1 == 79)                   // 'as'
-    {
-      shift(79);                    // 'as'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_SequenceType();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    whitespace();
-    parse_FunctionBody();
-    eventHandler.endNonterminal("InlineFunctionExpr", e0);
-  }
-
-  function try_InlineFunctionExpr()
-  {
-    for (;;)
-    {
-      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'
-      if (l1 != 32)                 // '%'
-      {
-        break;
-      }
-      try_Annotation();
-    }
-    shiftT(145);                    // 'function'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(94);                // S^WS | '$' | '(:' | ')'
-    if (l1 == 31)                   // '$'
-    {
-      try_ParamList();
-    }
-    shiftT(37);                     // ')'
-    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'
-    if (l1 == 79)                   // 'as'
-    {
-      shiftT(79);                   // 'as'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_SequenceType();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    try_FunctionBody();
-  }
-
-  function parse_SingleType()
-  {
-    eventHandler.startNonterminal("SingleType", e0);
-    parse_SimpleTypeName();
-    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 64)                   // '?'
-    {
-      shift(64);                    // '?'
-    }
-    eventHandler.endNonterminal("SingleType", e0);
-  }
-
-  function try_SingleType()
-  {
-    try_SimpleTypeName();
-    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |
-    if (l1 == 64)                   // '?'
-    {
-      shiftT(64);                   // '?'
-    }
-  }
-
-  function parse_TypeDeclaration()
-  {
-    eventHandler.startNonterminal("TypeDeclaration", e0);
-    shift(79);                      // 'as'
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_SequenceType();
-    eventHandler.endNonterminal("TypeDeclaration", e0);
-  }
-
-  function try_TypeDeclaration()
-  {
-    shiftT(79);                     // 'as'
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_SequenceType();
-  }
-
-  function parse_SequenceType()
-  {
-    eventHandler.startNonterminal("SequenceType", e0);
-    switch (l1)
-    {
-    case 124:                       // 'empty-sequence'
-      lookahead2W(241);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 17532:                     // 'empty-sequence' '('
-      shift(124);                   // 'empty-sequence'
-      lookahead1W(22);              // S^WS | '(' | '(:'
-      shift(34);                    // '('
-      lookahead1W(23);              // S^WS | '(:' | ')'
-      shift(37);                    // ')'
-      break;
-    default:
-      parse_ItemType();
-      lookahead1W(237);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |
-      switch (l1)
-      {
-      case 39:                      // '*'
-      case 40:                      // '+'
-      case 64:                      // '?'
-        whitespace();
-        parse_OccurrenceIndicator();
-        break;
-      default:
-        break;
-      }
-    }
-    eventHandler.endNonterminal("SequenceType", e0);
-  }
-
-  function try_SequenceType()
-  {
-    switch (l1)
-    {
-    case 124:                       // 'empty-sequence'
-      lookahead2W(241);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 17532:                     // 'empty-sequence' '('
-      shiftT(124);                  // 'empty-sequence'
-      lookahead1W(22);              // S^WS | '(' | '(:'
-      shiftT(34);                   // '('
-      lookahead1W(23);              // S^WS | '(:' | ')'
-      shiftT(37);                   // ')'
-      break;
-    default:
-      try_ItemType();
-      lookahead1W(237);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |
-      switch (l1)
-      {
-      case 39:                      // '*'
-      case 40:                      // '+'
-      case 64:                      // '?'
-        try_OccurrenceIndicator();
-        break;
-      default:
-        break;
-      }
-    }
-  }
-
-  function parse_OccurrenceIndicator()
-  {
-    eventHandler.startNonterminal("OccurrenceIndicator", e0);
-    switch (l1)
-    {
-    case 64:                        // '?'
-      shift(64);                    // '?'
-      break;
-    case 39:                        // '*'
-      shift(39);                    // '*'
-      break;
-    default:
-      shift(40);                    // '+'
-    }
-    eventHandler.endNonterminal("OccurrenceIndicator", e0);
-  }
-
-  function try_OccurrenceIndicator()
-  {
-    switch (l1)
-    {
-    case 64:                        // '?'
-      shiftT(64);                   // '?'
-      break;
-    case 39:                        // '*'
-      shiftT(39);                   // '*'
-      break;
-    default:
-      shiftT(40);                   // '+'
-    }
-  }
-
-  function parse_ItemType()
-  {
-    eventHandler.startNonterminal("ItemType", e0);
-    switch (l1)
-    {
-    case 78:                        // 'array'
-    case 82:                        // 'attribute'
-    case 96:                        // 'comment'
-    case 120:                       // 'document-node'
-    case 121:                       // 'element'
-    case 145:                       // 'function'
-    case 165:                       // 'item'
-    case 167:                       // 'json-item'
-    case 185:                       // 'namespace-node'
-    case 191:                       // 'node'
-    case 194:                       // 'object'
-    case 216:                       // 'processing-instruction'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 244:                       // 'text'
-      lookahead2W(241);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 17486                 // 'array' '('
-     || lk == 17575                 // 'json-item' '('
-     || lk == 17602)                // 'object' '('
-    {
-      lk = memoized(4, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_KindTest();
-          lk = -1;
-        }
-        catch (p1A)
-        {
-          lk = -6;
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(4, e0, lk);
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-    case 17490:                     // 'attribute' '('
-    case 17504:                     // 'comment' '('
-    case 17528:                     // 'document-node' '('
-    case 17529:                     // 'element' '('
-    case 17593:                     // 'namespace-node' '('
-    case 17599:                     // 'node' '('
-    case 17624:                     // 'processing-instruction' '('
-    case 17634:                     // 'schema-attribute' '('
-    case 17635:                     // 'schema-element' '('
-    case 17652:                     // 'text' '('
-      parse_KindTest();
-      break;
-    case 17573:                     // 'item' '('
-      shift(165);                   // 'item'
-      lookahead1W(22);              // S^WS | '(' | '(:'
-      shift(34);                    // '('
-      lookahead1W(23);              // S^WS | '(:' | ')'
-      shift(37);                    // ')'
-      break;
-    case 32:                        // '%'
-    case 17553:                     // 'function' '('
-      parse_FunctionTest();
-      break;
-    case 34:                        // '('
-      parse_ParenthesizedItemType();
-      break;
-    case -6:
-      parse_JSONTest();
-      break;
-    case 242:                       // 'structured-item'
-      parse_StructuredItemTest();
-      break;
-    default:
-      parse_AtomicOrUnionType();
-    }
-    eventHandler.endNonterminal("ItemType", e0);
-  }
-
-  function try_ItemType()
-  {
-    switch (l1)
-    {
-    case 78:                        // 'array'
-    case 82:                        // 'attribute'
-    case 96:                        // 'comment'
-    case 120:                       // 'document-node'
-    case 121:                       // 'element'
-    case 145:                       // 'function'
-    case 165:                       // 'item'
-    case 167:                       // 'json-item'
-    case 185:                       // 'namespace-node'
-    case 191:                       // 'node'
-    case 194:                       // 'object'
-    case 216:                       // 'processing-instruction'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 244:                       // 'text'
-      lookahead2W(241);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 17486                 // 'array' '('
-     || lk == 17575                 // 'json-item' '('
-     || lk == 17602)                // 'object' '('
-    {
-      lk = memoized(4, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_KindTest();
-          memoize(4, e0A, -1);
-          lk = -8;
-        }
-        catch (p1A)
-        {
-          lk = -6;
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(4, e0A, -6);
-        }
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-    case 17490:                     // 'attribute' '('
-    case 17504:                     // 'comment' '('
-    case 17528:                     // 'document-node' '('
-    case 17529:                     // 'element' '('
-    case 17593:                     // 'namespace-node' '('
-    case 17599:                     // 'node' '('
-    case 17624:                     // 'processing-instruction' '('
-    case 17634:                     // 'schema-attribute' '('
-    case 17635:                     // 'schema-element' '('
-    case 17652:                     // 'text' '('
-      try_KindTest();
-      break;
-    case 17573:                     // 'item' '('
-      shiftT(165);                  // 'item'
-      lookahead1W(22);              // S^WS | '(' | '(:'
-      shiftT(34);                   // '('
-      lookahead1W(23);              // S^WS | '(:' | ')'
-      shiftT(37);                   // ')'
-      break;
-    case 32:                        // '%'
-    case 17553:                     // 'function' '('
-      try_FunctionTest();
-      break;
-    case 34:                        // '('
-      try_ParenthesizedItemType();
-      break;
-    case -6:
-      try_JSONTest();
-      break;
-    case 242:                       // 'structured-item'
-      try_StructuredItemTest();
-      break;
-    case -8:
-      break;
-    default:
-      try_AtomicOrUnionType();
-    }
-  }
-
-  function parse_JSONTest()
-  {
-    eventHandler.startNonterminal("JSONTest", e0);
-    switch (l1)
-    {
-    case 167:                       // 'json-item'
-      parse_JSONItemTest();
-      break;
-    case 194:                       // 'object'
-      parse_JSONObjectTest();
-      break;
-    default:
-      parse_JSONArrayTest();
-    }
-    eventHandler.endNonterminal("JSONTest", e0);
-  }
-
-  function try_JSONTest()
-  {
-    switch (l1)
-    {
-    case 167:                       // 'json-item'
-      try_JSONItemTest();
-      break;
-    case 194:                       // 'object'
-      try_JSONObjectTest();
-      break;
-    default:
-      try_JSONArrayTest();
-    }
-  }
-
-  function parse_StructuredItemTest()
-  {
-    eventHandler.startNonterminal("StructuredItemTest", e0);
-    shift(242);                     // 'structured-item'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("StructuredItemTest", e0);
-  }
-
-  function try_StructuredItemTest()
-  {
-    shiftT(242);                    // 'structured-item'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_JSONItemTest()
-  {
-    eventHandler.startNonterminal("JSONItemTest", e0);
-    shift(167);                     // 'json-item'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("JSONItemTest", e0);
-  }
-
-  function try_JSONItemTest()
-  {
-    shiftT(167);                    // 'json-item'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_JSONObjectTest()
-  {
-    eventHandler.startNonterminal("JSONObjectTest", e0);
-    shift(194);                     // 'object'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("JSONObjectTest", e0);
-  }
-
-  function try_JSONObjectTest()
-  {
-    shiftT(194);                    // 'object'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_JSONArrayTest()
-  {
-    eventHandler.startNonterminal("JSONArrayTest", e0);
-    shift(78);                      // 'array'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("JSONArrayTest", e0);
-  }
-
-  function try_JSONArrayTest()
-  {
-    shiftT(78);                     // 'array'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_AtomicOrUnionType()
-  {
-    eventHandler.startNonterminal("AtomicOrUnionType", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("AtomicOrUnionType", e0);
-  }
-
-  function try_AtomicOrUnionType()
-  {
-    try_EQName();
-  }
-
-  function parse_KindTest()
-  {
-    eventHandler.startNonterminal("KindTest", e0);
-    switch (l1)
-    {
-    case 120:                       // 'document-node'
-      parse_DocumentTest();
-      break;
-    case 121:                       // 'element'
-      parse_ElementTest();
-      break;
-    case 82:                        // 'attribute'
-      parse_AttributeTest();
-      break;
-    case 227:                       // 'schema-element'
-      parse_SchemaElementTest();
-      break;
-    case 226:                       // 'schema-attribute'
-      parse_SchemaAttributeTest();
-      break;
-    case 216:                       // 'processing-instruction'
-      parse_PITest();
-      break;
-    case 96:                        // 'comment'
-      parse_CommentTest();
-      break;
-    case 244:                       // 'text'
-      parse_TextTest();
-      break;
-    case 185:                       // 'namespace-node'
-      parse_NamespaceNodeTest();
-      break;
-    case 191:                       // 'node'
-      parse_AnyKindTest();
-      break;
-    default:
-      parse_JSONTest();
-    }
-    eventHandler.endNonterminal("KindTest", e0);
-  }
-
-  function try_KindTest()
-  {
-    switch (l1)
-    {
-    case 120:                       // 'document-node'
-      try_DocumentTest();
-      break;
-    case 121:                       // 'element'
-      try_ElementTest();
-      break;
-    case 82:                        // 'attribute'
-      try_AttributeTest();
-      break;
-    case 227:                       // 'schema-element'
-      try_SchemaElementTest();
-      break;
-    case 226:                       // 'schema-attribute'
-      try_SchemaAttributeTest();
-      break;
-    case 216:                       // 'processing-instruction'
-      try_PITest();
-      break;
-    case 96:                        // 'comment'
-      try_CommentTest();
-      break;
-    case 244:                       // 'text'
-      try_TextTest();
-      break;
-    case 185:                       // 'namespace-node'
-      try_NamespaceNodeTest();
-      break;
-    case 191:                       // 'node'
-      try_AnyKindTest();
-      break;
-    default:
-      try_JSONTest();
-    }
-  }
-
-  function parse_AnyKindTest()
-  {
-    eventHandler.startNonterminal("AnyKindTest", e0);
-    shift(191);                     // 'node'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("AnyKindTest", e0);
-  }
-
-  function try_AnyKindTest()
-  {
-    shiftT(191);                    // 'node'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_DocumentTest()
-  {
-    eventHandler.startNonterminal("DocumentTest", e0);
-    shift(120);                     // 'document-node'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'
-    if (l1 != 37)                   // ')'
-    {
-      switch (l1)
-      {
-      case 121:                     // 'element'
-        whitespace();
-        parse_ElementTest();
-        break;
-      default:
-        whitespace();
-        parse_SchemaElementTest();
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("DocumentTest", e0);
-  }
-
-  function try_DocumentTest()
-  {
-    shiftT(120);                    // 'document-node'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'
-    if (l1 != 37)                   // ')'
-    {
-      switch (l1)
-      {
-      case 121:                     // 'element'
-        try_ElementTest();
-        break;
-      default:
-        try_SchemaElementTest();
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_TextTest()
-  {
-    eventHandler.startNonterminal("TextTest", e0);
-    shift(244);                     // 'text'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("TextTest", e0);
-  }
-
-  function try_TextTest()
-  {
-    shiftT(244);                    // 'text'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_CommentTest()
-  {
-    eventHandler.startNonterminal("CommentTest", e0);
-    shift(96);                      // 'comment'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("CommentTest", e0);
-  }
-
-  function try_CommentTest()
-  {
-    shiftT(96);                     // 'comment'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_NamespaceNodeTest()
-  {
-    eventHandler.startNonterminal("NamespaceNodeTest", e0);
-    shift(185);                     // 'namespace-node'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("NamespaceNodeTest", e0);
-  }
-
-  function try_NamespaceNodeTest()
-  {
-    shiftT(185);                    // 'namespace-node'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_PITest()
-  {
-    eventHandler.startNonterminal("PITest", e0);
-    shift(216);                     // 'processing-instruction'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(251);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |
-    if (l1 != 37)                   // ')'
-    {
-      switch (l1)
-      {
-      case 11:                      // StringLiteral
-        shift(11);                  // StringLiteral
-        break;
-      default:
-        whitespace();
-        parse_NCName();
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("PITest", e0);
-  }
-
-  function try_PITest()
-  {
-    shiftT(216);                    // 'processing-instruction'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(251);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |
-    if (l1 != 37)                   // ')'
-    {
-      switch (l1)
-      {
-      case 11:                      // StringLiteral
-        shiftT(11);                 // StringLiteral
-        break;
-      default:
-        try_NCName();
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_AttributeTest()
-  {
-    eventHandler.startNonterminal("AttributeTest", e0);
-    shift(82);                      // 'attribute'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(258);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |
-    if (l1 != 37)                   // ')'
-    {
-      whitespace();
-      parse_AttribNameOrWildcard();
-      lookahead1W(101);             // S^WS | '(:' | ')' | ','
-      if (l1 == 41)                 // ','
-      {
-        shift(41);                  // ','
-        lookahead1W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        whitespace();
-        parse_TypeName();
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("AttributeTest", e0);
-  }
-
-  function try_AttributeTest()
-  {
-    shiftT(82);                     // 'attribute'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(258);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |
-    if (l1 != 37)                   // ')'
-    {
-      try_AttribNameOrWildcard();
-      lookahead1W(101);             // S^WS | '(:' | ')' | ','
-      if (l1 == 41)                 // ','
-      {
-        shiftT(41);                 // ','
-        lookahead1W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        try_TypeName();
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_AttribNameOrWildcard()
-  {
-    eventHandler.startNonterminal("AttribNameOrWildcard", e0);
-    switch (l1)
-    {
-    case 38:                        // '*'
-      shift(38);                    // '*'
-      break;
-    default:
-      parse_AttributeName();
-    }
-    eventHandler.endNonterminal("AttribNameOrWildcard", e0);
-  }
-
-  function try_AttribNameOrWildcard()
-  {
-    switch (l1)
-    {
-    case 38:                        // '*'
-      shiftT(38);                   // '*'
-      break;
-    default:
-      try_AttributeName();
-    }
-  }
-
-  function parse_SchemaAttributeTest()
-  {
-    eventHandler.startNonterminal("SchemaAttributeTest", e0);
-    shift(226);                     // 'schema-attribute'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_AttributeDeclaration();
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("SchemaAttributeTest", e0);
-  }
-
-  function try_SchemaAttributeTest()
-  {
-    shiftT(226);                    // 'schema-attribute'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_AttributeDeclaration();
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_AttributeDeclaration()
-  {
-    eventHandler.startNonterminal("AttributeDeclaration", e0);
-    parse_AttributeName();
-    eventHandler.endNonterminal("AttributeDeclaration", e0);
-  }
-
-  function try_AttributeDeclaration()
-  {
-    try_AttributeName();
-  }
-
-  function parse_ElementTest()
-  {
-    eventHandler.startNonterminal("ElementTest", e0);
-    shift(121);                     // 'element'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(258);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |
-    if (l1 != 37)                   // ')'
-    {
-      whitespace();
-      parse_ElementNameOrWildcard();
-      lookahead1W(101);             // S^WS | '(:' | ')' | ','
-      if (l1 == 41)                 // ','
-      {
-        shift(41);                  // ','
-        lookahead1W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        whitespace();
-        parse_TypeName();
-        lookahead1W(102);           // S^WS | '(:' | ')' | '?'
-        if (l1 == 64)               // '?'
-        {
-          shift(64);                // '?'
-        }
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("ElementTest", e0);
-  }
-
-  function try_ElementTest()
-  {
-    shiftT(121);                    // 'element'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(258);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |
-    if (l1 != 37)                   // ')'
-    {
-      try_ElementNameOrWildcard();
-      lookahead1W(101);             // S^WS | '(:' | ')' | ','
-      if (l1 == 41)                 // ','
-      {
-        shiftT(41);                 // ','
-        lookahead1W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        try_TypeName();
-        lookahead1W(102);           // S^WS | '(:' | ')' | '?'
-        if (l1 == 64)               // '?'
-        {
-          shiftT(64);               // '?'
-        }
-      }
-    }
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_ElementNameOrWildcard()
-  {
-    eventHandler.startNonterminal("ElementNameOrWildcard", e0);
-    switch (l1)
-    {
-    case 38:                        // '*'
-      shift(38);                    // '*'
-      break;
-    default:
-      parse_ElementName();
-    }
-    eventHandler.endNonterminal("ElementNameOrWildcard", e0);
-  }
-
-  function try_ElementNameOrWildcard()
-  {
-    switch (l1)
-    {
-    case 38:                        // '*'
-      shiftT(38);                   // '*'
-      break;
-    default:
-      try_ElementName();
-    }
-  }
-
-  function parse_SchemaElementTest()
-  {
-    eventHandler.startNonterminal("SchemaElementTest", e0);
-    shift(227);                     // 'schema-element'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_ElementDeclaration();
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("SchemaElementTest", e0);
-  }
-
-  function try_SchemaElementTest()
-  {
-    shiftT(227);                    // 'schema-element'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_ElementDeclaration();
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_ElementDeclaration()
-  {
-    eventHandler.startNonterminal("ElementDeclaration", e0);
-    parse_ElementName();
-    eventHandler.endNonterminal("ElementDeclaration", e0);
-  }
-
-  function try_ElementDeclaration()
-  {
-    try_ElementName();
-  }
-
-  function parse_AttributeName()
-  {
-    eventHandler.startNonterminal("AttributeName", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("AttributeName", e0);
-  }
-
-  function try_AttributeName()
-  {
-    try_EQName();
-  }
-
-  function parse_ElementName()
-  {
-    eventHandler.startNonterminal("ElementName", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("ElementName", e0);
-  }
-
-  function try_ElementName()
-  {
-    try_EQName();
-  }
-
-  function parse_SimpleTypeName()
-  {
-    eventHandler.startNonterminal("SimpleTypeName", e0);
-    parse_TypeName();
-    eventHandler.endNonterminal("SimpleTypeName", e0);
-  }
-
-  function try_SimpleTypeName()
-  {
-    try_TypeName();
-  }
-
-  function parse_TypeName()
-  {
-    eventHandler.startNonterminal("TypeName", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("TypeName", e0);
-  }
-
-  function try_TypeName()
-  {
-    try_EQName();
-  }
-
-  function parse_FunctionTest()
-  {
-    eventHandler.startNonterminal("FunctionTest", e0);
-    for (;;)
-    {
-      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'
-      if (l1 != 32)                 // '%'
-      {
-        break;
-      }
-      whitespace();
-      parse_Annotation();
-    }
-    switch (l1)
-    {
-    case 145:                       // 'function'
-      lookahead2W(22);              // S^WS | '(' | '(:'
-      break;
-    default:
-      lk = l1;
-    }
-    lk = memoized(5, e0);
-    if (lk == 0)
-    {
-      var b0A = b0; var e0A = e0; var l1A = l1;
-      var b1A = b1; var e1A = e1; var l2A = l2;
-      var b2A = b2; var e2A = e2;
-      try
-      {
-        try_AnyFunctionTest();
-        lk = -1;
-      }
-      catch (p1A)
-      {
-        lk = -2;
-      }
-      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-      b2 = b2A; e2 = e2A; end = e2A; }}
-      memoize(5, e0, lk);
-    }
-    switch (lk)
-    {
-    case -1:
-      whitespace();
-      parse_AnyFunctionTest();
-      break;
-    default:
-      whitespace();
-      parse_TypedFunctionTest();
-    }
-    eventHandler.endNonterminal("FunctionTest", e0);
-  }
-
-  function try_FunctionTest()
-  {
-    for (;;)
-    {
-      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'
-      if (l1 != 32)                 // '%'
-      {
-        break;
-      }
-      try_Annotation();
-    }
-    switch (l1)
-    {
-    case 145:                       // 'function'
-      lookahead2W(22);              // S^WS | '(' | '(:'
-      break;
-    default:
-      lk = l1;
-    }
-    lk = memoized(5, e0);
-    if (lk == 0)
-    {
-      var b0A = b0; var e0A = e0; var l1A = l1;
-      var b1A = b1; var e1A = e1; var l2A = l2;
-      var b2A = b2; var e2A = e2;
-      try
-      {
-        try_AnyFunctionTest();
-        memoize(5, e0A, -1);
-        lk = -3;
-      }
-      catch (p1A)
-      {
-        lk = -2;
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(5, e0A, -2);
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-      try_AnyFunctionTest();
-      break;
-    case -3:
-      break;
-    default:
-      try_TypedFunctionTest();
-    }
-  }
-
-  function parse_AnyFunctionTest()
-  {
-    eventHandler.startNonterminal("AnyFunctionTest", e0);
-    shift(145);                     // 'function'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(24);                // S^WS | '(:' | '*'
-    shift(38);                      // '*'
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("AnyFunctionTest", e0);
-  }
-
-  function try_AnyFunctionTest()
-  {
-    shiftT(145);                    // 'function'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(24);                // S^WS | '(:' | '*'
-    shiftT(38);                     // '*'
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_TypedFunctionTest()
-  {
-    eventHandler.startNonterminal("TypedFunctionTest", e0);
-    shift(145);                     // 'function'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(261);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |
-    if (l1 != 37)                   // ')'
-    {
-      whitespace();
-      parse_SequenceType();
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shift(41);                  // ','
-        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-        whitespace();
-        parse_SequenceType();
-      }
-    }
-    shift(37);                      // ')'
-    lookahead1W(30);                // S^WS | '(:' | 'as'
-    shift(79);                      // 'as'
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_SequenceType();
-    eventHandler.endNonterminal("TypedFunctionTest", e0);
-  }
-
-  function try_TypedFunctionTest()
-  {
-    shiftT(145);                    // 'function'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(261);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |
-    if (l1 != 37)                   // ')'
-    {
-      try_SequenceType();
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shiftT(41);                 // ','
-        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-        try_SequenceType();
-      }
-    }
-    shiftT(37);                     // ')'
-    lookahead1W(30);                // S^WS | '(:' | 'as'
-    shiftT(79);                     // 'as'
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_SequenceType();
-  }
-
-  function parse_ParenthesizedItemType()
-  {
-    eventHandler.startNonterminal("ParenthesizedItemType", e0);
-    shift(34);                      // '('
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_ItemType();
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shift(37);                      // ')'
-    eventHandler.endNonterminal("ParenthesizedItemType", e0);
-  }
-
-  function try_ParenthesizedItemType()
-  {
-    shiftT(34);                     // '('
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_ItemType();
-    lookahead1W(23);                // S^WS | '(:' | ')'
-    shiftT(37);                     // ')'
-  }
-
-  function parse_RevalidationDecl()
-  {
-    eventHandler.startNonterminal("RevalidationDecl", e0);
-    shift(108);                     // 'declare'
-    lookahead1W(72);                // S^WS | '(:' | 'revalidation'
-    shift(222);                     // 'revalidation'
-    lookahead1W(152);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'
-    switch (l1)
-    {
-    case 240:                       // 'strict'
-      shift(240);                   // 'strict'
-      break;
-    case 171:                       // 'lax'
-      shift(171);                   // 'lax'
-      break;
-    default:
-      shift(233);                   // 'skip'
-    }
-    eventHandler.endNonterminal("RevalidationDecl", e0);
-  }
-
-  function parse_InsertExprTargetChoice()
-  {
-    eventHandler.startNonterminal("InsertExprTargetChoice", e0);
-    switch (l1)
-    {
-    case 70:                        // 'after'
-      shift(70);                    // 'after'
-      break;
-    case 84:                        // 'before'
-      shift(84);                    // 'before'
-      break;
-    default:
-      if (l1 == 79)                 // 'as'
-      {
-        shift(79);                  // 'as'
-        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'
-        switch (l1)
-        {
-        case 134:                   // 'first'
-          shift(134);               // 'first'
-          break;
-        default:
-          shift(170);               // 'last'
-        }
-      }
-      lookahead1W(54);              // S^WS | '(:' | 'into'
-      shift(163);                   // 'into'
-    }
-    eventHandler.endNonterminal("InsertExprTargetChoice", e0);
-  }
-
-  function try_InsertExprTargetChoice()
-  {
-    switch (l1)
-    {
-    case 70:                        // 'after'
-      shiftT(70);                   // 'after'
-      break;
-    case 84:                        // 'before'
-      shiftT(84);                   // 'before'
-      break;
-    default:
-      if (l1 == 79)                 // 'as'
-      {
-        shiftT(79);                 // 'as'
-        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'
-        switch (l1)
-        {
-        case 134:                   // 'first'
-          shiftT(134);              // 'first'
-          break;
-        default:
-          shiftT(170);              // 'last'
-        }
-      }
-      lookahead1W(54);              // S^WS | '(:' | 'into'
-      shiftT(163);                  // 'into'
-    }
-  }
-
-  function parse_InsertExpr()
-  {
-    eventHandler.startNonterminal("InsertExpr", e0);
-    shift(159);                     // 'insert'
-    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'
-    switch (l1)
-    {
-    case 191:                       // 'node'
-      shift(191);                   // 'node'
-      break;
-    default:
-      shift(192);                   // 'nodes'
-    }
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_SourceExpr();
-    whitespace();
-    parse_InsertExprTargetChoice();
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_TargetExpr();
-    eventHandler.endNonterminal("InsertExpr", e0);
-  }
-
-  function try_InsertExpr()
-  {
-    shiftT(159);                    // 'insert'
-    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'
-    switch (l1)
-    {
-    case 191:                       // 'node'
-      shiftT(191);                  // 'node'
-      break;
-    default:
-      shiftT(192);                  // 'nodes'
-    }
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_SourceExpr();
-    try_InsertExprTargetChoice();
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_TargetExpr();
-  }
-
-  function parse_DeleteExpr()
-  {
-    eventHandler.startNonterminal("DeleteExpr", e0);
-    shift(110);                     // 'delete'
-    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'
-    switch (l1)
-    {
-    case 191:                       // 'node'
-      shift(191);                   // 'node'
-      break;
-    default:
-      shift(192);                   // 'nodes'
-    }
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_TargetExpr();
-    eventHandler.endNonterminal("DeleteExpr", e0);
-  }
-
-  function try_DeleteExpr()
-  {
-    shiftT(110);                    // 'delete'
-    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'
-    switch (l1)
-    {
-    case 191:                       // 'node'
-      shiftT(191);                  // 'node'
-      break;
-    default:
-      shiftT(192);                  // 'nodes'
-    }
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_TargetExpr();
-  }
-
-  function parse_ReplaceExpr()
-  {
-    eventHandler.startNonterminal("ReplaceExpr", e0);
-    shift(219);                     // 'replace'
-    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'
-    if (l1 == 261)                  // 'value'
-    {
-      shift(261);                   // 'value'
-      lookahead1W(64);              // S^WS | '(:' | 'of'
-      shift(196);                   // 'of'
-    }
-    lookahead1W(62);                // S^WS | '(:' | 'node'
-    shift(191);                     // 'node'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_TargetExpr();
-    shift(270);                     // 'with'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("ReplaceExpr", e0);
-  }
-
-  function try_ReplaceExpr()
-  {
-    shiftT(219);                    // 'replace'
-    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'
-    if (l1 == 261)                  // 'value'
-    {
-      shiftT(261);                  // 'value'
-      lookahead1W(64);              // S^WS | '(:' | 'of'
-      shiftT(196);                  // 'of'
-    }
-    lookahead1W(62);                // S^WS | '(:' | 'node'
-    shiftT(191);                    // 'node'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_TargetExpr();
-    shiftT(270);                    // 'with'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_RenameExpr()
-  {
-    eventHandler.startNonterminal("RenameExpr", e0);
-    shift(218);                     // 'rename'
-    lookahead1W(62);                // S^WS | '(:' | 'node'
-    shift(191);                     // 'node'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_TargetExpr();
-    shift(79);                      // 'as'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_NewNameExpr();
-    eventHandler.endNonterminal("RenameExpr", e0);
-  }
-
-  function try_RenameExpr()
-  {
-    shiftT(218);                    // 'rename'
-    lookahead1W(62);                // S^WS | '(:' | 'node'
-    shiftT(191);                    // 'node'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_TargetExpr();
-    shiftT(79);                     // 'as'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_NewNameExpr();
-  }
-
-  function parse_SourceExpr()
-  {
-    eventHandler.startNonterminal("SourceExpr", e0);
-    parse_ExprSingle();
-    eventHandler.endNonterminal("SourceExpr", e0);
-  }
-
-  function try_SourceExpr()
-  {
-    try_ExprSingle();
-  }
-
-  function parse_TargetExpr()
-  {
-    eventHandler.startNonterminal("TargetExpr", e0);
-    parse_ExprSingle();
-    eventHandler.endNonterminal("TargetExpr", e0);
-  }
-
-  function try_TargetExpr()
-  {
-    try_ExprSingle();
-  }
-
-  function parse_NewNameExpr()
-  {
-    eventHandler.startNonterminal("NewNameExpr", e0);
-    parse_ExprSingle();
-    eventHandler.endNonterminal("NewNameExpr", e0);
-  }
-
-  function try_NewNameExpr()
-  {
-    try_ExprSingle();
-  }
-
-  function parse_TransformExpr()
-  {
-    eventHandler.startNonterminal("TransformExpr", e0);
-    shift(103);                     // 'copy'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(27);                // S^WS | '(:' | ':='
-    shift(52);                      // ':='
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-      lookahead1W(27);              // S^WS | '(:' | ':='
-      shift(52);                    // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_ExprSingle();
-    }
-    shift(181);                     // 'modify'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("TransformExpr", e0);
-  }
-
-  function try_TransformExpr()
-  {
-    shiftT(103);                    // 'copy'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-    lookahead1W(27);                // S^WS | '(:' | ':='
-    shiftT(52);                     // ':='
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-      lookahead1W(27);              // S^WS | '(:' | ':='
-      shiftT(52);                   // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_ExprSingle();
-    }
-    shiftT(181);                    // 'modify'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_FTSelection()
-  {
-    eventHandler.startNonterminal("FTSelection", e0);
-    parse_FTOr();
-    for (;;)
-    {
-      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      switch (l1)
-      {
-      case 81:                      // 'at'
-        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 115                 // 'different'
-       && lk != 117                 // 'distance'
-       && lk != 127                 // 'entire'
-       && lk != 202                 // 'ordered'
-       && lk != 223                 // 'same'
-       && lk != 269                 // 'window'
-       && lk != 64593               // 'at' 'end'
-       && lk != 121425)             // 'at' 'start'
-      {
-        break;
-      }
-      whitespace();
-      parse_FTPosFilter();
-    }
-    eventHandler.endNonterminal("FTSelection", e0);
-  }
-
-  function try_FTSelection()
-  {
-    try_FTOr();
-    for (;;)
-    {
-      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      switch (l1)
-      {
-      case 81:                      // 'at'
-        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 115                 // 'different'
-       && lk != 117                 // 'distance'
-       && lk != 127                 // 'entire'
-       && lk != 202                 // 'ordered'
-       && lk != 223                 // 'same'
-       && lk != 269                 // 'window'
-       && lk != 64593               // 'at' 'end'
-       && lk != 121425)             // 'at' 'start'
-      {
-        break;
-      }
-      try_FTPosFilter();
-    }
-  }
-
-  function parse_FTWeight()
-  {
-    eventHandler.startNonterminal("FTWeight", e0);
-    shift(264);                     // 'weight'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shift(276);                     // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("FTWeight", e0);
-  }
-
-  function try_FTWeight()
-  {
-    shiftT(264);                    // 'weight'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    shiftT(276);                    // '{'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_FTOr()
-  {
-    eventHandler.startNonterminal("FTOr", e0);
-    parse_FTAnd();
-    for (;;)
-    {
-      if (l1 != 144)                // 'ftor'
-      {
-        break;
-      }
-      shift(144);                   // 'ftor'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      whitespace();
-      parse_FTAnd();
-    }
-    eventHandler.endNonterminal("FTOr", e0);
-  }
-
-  function try_FTOr()
-  {
-    try_FTAnd();
-    for (;;)
-    {
-      if (l1 != 144)                // 'ftor'
-      {
-        break;
-      }
-      shiftT(144);                  // 'ftor'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      try_FTAnd();
-    }
-  }
-
-  function parse_FTAnd()
-  {
-    eventHandler.startNonterminal("FTAnd", e0);
-    parse_FTMildNot();
-    for (;;)
-    {
-      if (l1 != 142)                // 'ftand'
-      {
-        break;
-      }
-      shift(142);                   // 'ftand'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      whitespace();
-      parse_FTMildNot();
-    }
-    eventHandler.endNonterminal("FTAnd", e0);
-  }
-
-  function try_FTAnd()
-  {
-    try_FTMildNot();
-    for (;;)
-    {
-      if (l1 != 142)                // 'ftand'
-      {
-        break;
-      }
-      shiftT(142);                  // 'ftand'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      try_FTMildNot();
-    }
-  }
-
-  function parse_FTMildNot()
-  {
-    eventHandler.startNonterminal("FTMildNot", e0);
-    parse_FTUnaryNot();
-    for (;;)
-    {
-      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 != 193)                // 'not'
-      {
-        break;
-      }
-      shift(193);                   // 'not'
-      lookahead1W(53);              // S^WS | '(:' | 'in'
-      shift(154);                   // 'in'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      whitespace();
-      parse_FTUnaryNot();
-    }
-    eventHandler.endNonterminal("FTMildNot", e0);
-  }
-
-  function try_FTMildNot()
-  {
-    try_FTUnaryNot();
-    for (;;)
-    {
-      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 != 193)                // 'not'
-      {
-        break;
-      }
-      shiftT(193);                  // 'not'
-      lookahead1W(53);              // S^WS | '(:' | 'in'
-      shiftT(154);                  // 'in'
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      try_FTUnaryNot();
-    }
-  }
-
-  function parse_FTUnaryNot()
-  {
-    eventHandler.startNonterminal("FTUnaryNot", e0);
-    if (l1 == 143)                  // 'ftnot'
-    {
-      shift(143);                   // 'ftnot'
-    }
-    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'
-    whitespace();
-    parse_FTPrimaryWithOptions();
-    eventHandler.endNonterminal("FTUnaryNot", e0);
-  }
-
-  function try_FTUnaryNot()
-  {
-    if (l1 == 143)                  // 'ftnot'
-    {
-      shiftT(143);                  // 'ftnot'
-    }
-    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'
-    try_FTPrimaryWithOptions();
-  }
-
-  function parse_FTPrimaryWithOptions()
-  {
-    eventHandler.startNonterminal("FTPrimaryWithOptions", e0);
-    parse_FTPrimary();
-    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    if (l1 == 259)                  // 'using'
-    {
-      whitespace();
-      parse_FTMatchOptions();
-    }
-    if (l1 == 264)                  // 'weight'
-    {
-      whitespace();
-      parse_FTWeight();
-    }
-    eventHandler.endNonterminal("FTPrimaryWithOptions", e0);
-  }
-
-  function try_FTPrimaryWithOptions()
-  {
-    try_FTPrimary();
-    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    if (l1 == 259)                  // 'using'
-    {
-      try_FTMatchOptions();
-    }
-    if (l1 == 264)                  // 'weight'
-    {
-      try_FTWeight();
-    }
-  }
-
-  function parse_FTPrimary()
-  {
-    eventHandler.startNonterminal("FTPrimary", e0);
-    switch (l1)
-    {
-    case 34:                        // '('
-      shift(34);                    // '('
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      whitespace();
-      parse_FTSelection();
-      shift(37);                    // ')'
-      break;
-    case 35:                        // '(#'
-      parse_FTExtensionSelection();
-      break;
-    default:
-      parse_FTWords();
-      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 == 195)                // 'occurs'
-      {
-        whitespace();
-        parse_FTTimes();
-      }
-    }
-    eventHandler.endNonterminal("FTPrimary", e0);
-  }
-
-  function try_FTPrimary()
-  {
-    switch (l1)
-    {
-    case 34:                        // '('
-      shiftT(34);                   // '('
-      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'
-      try_FTSelection();
-      shiftT(37);                   // ')'
-      break;
-    case 35:                        // '(#'
-      try_FTExtensionSelection();
-      break;
-    default:
-      try_FTWords();
-      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 == 195)                // 'occurs'
-      {
-        try_FTTimes();
-      }
-    }
-  }
-
-  function parse_FTWords()
-  {
-    eventHandler.startNonterminal("FTWords", e0);
-    parse_FTWordsValue();
-    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    if (l1 == 71                    // 'all'
-     || l1 == 76                    // 'any'
-     || l1 == 210)                  // 'phrase'
-    {
-      whitespace();
-      parse_FTAnyallOption();
-    }
-    eventHandler.endNonterminal("FTWords", e0);
-  }
-
-  function try_FTWords()
-  {
-    try_FTWordsValue();
-    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    if (l1 == 71                    // 'all'
-     || l1 == 76                    // 'any'
-     || l1 == 210)                  // 'phrase'
-    {
-      try_FTAnyallOption();
-    }
-  }
-
-  function parse_FTWordsValue()
-  {
-    eventHandler.startNonterminal("FTWordsValue", e0);
-    switch (l1)
-    {
-    case 11:                        // StringLiteral
-      shift(11);                    // StringLiteral
-      break;
-    default:
-      shift(276);                   // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_Expr();
-      shift(282);                   // '}'
-    }
-    eventHandler.endNonterminal("FTWordsValue", e0);
-  }
-
-  function try_FTWordsValue()
-  {
-    switch (l1)
-    {
-    case 11:                        // StringLiteral
-      shiftT(11);                   // StringLiteral
-      break;
-    default:
-      shiftT(276);                  // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_Expr();
-      shiftT(282);                  // '}'
-    }
-  }
-
-  function parse_FTExtensionSelection()
-  {
-    eventHandler.startNonterminal("FTExtensionSelection", e0);
-    for (;;)
-    {
-      whitespace();
-      parse_Pragma();
-      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'
-      if (l1 != 35)                 // '(#'
-      {
-        break;
-      }
-    }
-    shift(276);                     // '{'
-    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'
-    if (l1 != 282)                  // '}'
-    {
-      whitespace();
-      parse_FTSelection();
-    }
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("FTExtensionSelection", e0);
-  }
-
-  function try_FTExtensionSelection()
-  {
-    for (;;)
-    {
-      try_Pragma();
-      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'
-      if (l1 != 35)                 // '(#'
-      {
-        break;
-      }
-    }
-    shiftT(276);                    // '{'
-    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'
-    if (l1 != 282)                  // '}'
-    {
-      try_FTSelection();
-    }
-    shiftT(282);                    // '}'
-  }
-
-  function parse_FTAnyallOption()
-  {
-    eventHandler.startNonterminal("FTAnyallOption", e0);
-    switch (l1)
-    {
-    case 76:                        // 'any'
-      shift(76);                    // 'any'
-      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 == 272)                // 'word'
-      {
-        shift(272);                 // 'word'
-      }
-      break;
-    case 71:                        // 'all'
-      shift(71);                    // 'all'
-      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 == 273)                // 'words'
-      {
-        shift(273);                 // 'words'
-      }
-      break;
-    default:
-      shift(210);                   // 'phrase'
-    }
-    eventHandler.endNonterminal("FTAnyallOption", e0);
-  }
-
-  function try_FTAnyallOption()
-  {
-    switch (l1)
-    {
-    case 76:                        // 'any'
-      shiftT(76);                   // 'any'
-      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 == 272)                // 'word'
-      {
-        shiftT(272);                // 'word'
-      }
-      break;
-    case 71:                        // 'all'
-      shiftT(71);                   // 'all'
-      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 == 273)                // 'words'
-      {
-        shiftT(273);                // 'words'
-      }
-      break;
-    default:
-      shiftT(210);                  // 'phrase'
-    }
-  }
-
-  function parse_FTTimes()
-  {
-    eventHandler.startNonterminal("FTTimes", e0);
-    shift(195);                     // 'occurs'
-    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'
-    whitespace();
-    parse_FTRange();
-    shift(247);                     // 'times'
-    eventHandler.endNonterminal("FTTimes", e0);
-  }
-
-  function try_FTTimes()
-  {
-    shiftT(195);                    // 'occurs'
-    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'
-    try_FTRange();
-    shiftT(247);                    // 'times'
-  }
-
-  function parse_FTRange()
-  {
-    eventHandler.startNonterminal("FTRange", e0);
-    switch (l1)
-    {
-    case 130:                       // 'exactly'
-      shift(130);                   // 'exactly'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_AdditiveExpr();
-      break;
-    case 81:                        // 'at'
-      shift(81);                    // 'at'
-      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'
-      switch (l1)
-      {
-      case 173:                     // 'least'
-        shift(173);                 // 'least'
-        lookahead1W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        whitespace();
-        parse_AdditiveExpr();
-        break;
-      default:
-        shift(183);                 // 'most'
-        lookahead1W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        whitespace();
-        parse_AdditiveExpr();
-      }
-      break;
-    default:
-      shift(140);                   // 'from'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_AdditiveExpr();
-      shift(248);                   // 'to'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_AdditiveExpr();
-    }
-    eventHandler.endNonterminal("FTRange", e0);
-  }
-
-  function try_FTRange()
-  {
-    switch (l1)
-    {
-    case 130:                       // 'exactly'
-      shiftT(130);                  // 'exactly'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_AdditiveExpr();
-      break;
-    case 81:                        // 'at'
-      shiftT(81);                   // 'at'
-      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'
-      switch (l1)
-      {
-      case 173:                     // 'least'
-        shiftT(173);                // 'least'
-        lookahead1W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        try_AdditiveExpr();
-        break;
-      default:
-        shiftT(183);                // 'most'
-        lookahead1W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        try_AdditiveExpr();
-      }
-      break;
-    default:
-      shiftT(140);                  // 'from'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_AdditiveExpr();
-      shiftT(248);                  // 'to'
-      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_AdditiveExpr();
-    }
-  }
-
-  function parse_FTPosFilter()
-  {
-    eventHandler.startNonterminal("FTPosFilter", e0);
-    switch (l1)
-    {
-    case 202:                       // 'ordered'
-      parse_FTOrder();
-      break;
-    case 269:                       // 'window'
-      parse_FTWindow();
-      break;
-    case 117:                       // 'distance'
-      parse_FTDistance();
-      break;
-    case 115:                       // 'different'
-    case 223:                       // 'same'
-      parse_FTScope();
-      break;
-    default:
-      parse_FTContent();
-    }
-    eventHandler.endNonterminal("FTPosFilter", e0);
-  }
-
-  function try_FTPosFilter()
-  {
-    switch (l1)
-    {
-    case 202:                       // 'ordered'
-      try_FTOrder();
-      break;
-    case 269:                       // 'window'
-      try_FTWindow();
-      break;
-    case 117:                       // 'distance'
-      try_FTDistance();
-      break;
-    case 115:                       // 'different'
-    case 223:                       // 'same'
-      try_FTScope();
-      break;
-    default:
-      try_FTContent();
-    }
-  }
-
-  function parse_FTOrder()
-  {
-    eventHandler.startNonterminal("FTOrder", e0);
-    shift(202);                     // 'ordered'
-    eventHandler.endNonterminal("FTOrder", e0);
-  }
-
-  function try_FTOrder()
-  {
-    shiftT(202);                    // 'ordered'
-  }
-
-  function parse_FTWindow()
-  {
-    eventHandler.startNonterminal("FTWindow", e0);
-    shift(269);                     // 'window'
-    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_AdditiveExpr();
-    whitespace();
-    parse_FTUnit();
-    eventHandler.endNonterminal("FTWindow", e0);
-  }
-
-  function try_FTWindow()
-  {
-    shiftT(269);                    // 'window'
-    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_AdditiveExpr();
-    try_FTUnit();
-  }
-
-  function parse_FTDistance()
-  {
-    eventHandler.startNonterminal("FTDistance", e0);
-    shift(117);                     // 'distance'
-    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'
-    whitespace();
-    parse_FTRange();
-    whitespace();
-    parse_FTUnit();
-    eventHandler.endNonterminal("FTDistance", e0);
-  }
-
-  function try_FTDistance()
-  {
-    shiftT(117);                    // 'distance'
-    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'
-    try_FTRange();
-    try_FTUnit();
-  }
-
-  function parse_FTUnit()
-  {
-    eventHandler.startNonterminal("FTUnit", e0);
-    switch (l1)
-    {
-    case 273:                       // 'words'
-      shift(273);                   // 'words'
-      break;
-    case 232:                       // 'sentences'
-      shift(232);                   // 'sentences'
-      break;
-    default:
-      shift(205);                   // 'paragraphs'
-    }
-    eventHandler.endNonterminal("FTUnit", e0);
-  }
-
-  function try_FTUnit()
-  {
-    switch (l1)
-    {
-    case 273:                       // 'words'
-      shiftT(273);                  // 'words'
-      break;
-    case 232:                       // 'sentences'
-      shiftT(232);                  // 'sentences'
-      break;
-    default:
-      shiftT(205);                  // 'paragraphs'
-    }
-  }
-
-  function parse_FTScope()
-  {
-    eventHandler.startNonterminal("FTScope", e0);
-    switch (l1)
-    {
-    case 223:                       // 'same'
-      shift(223);                   // 'same'
-      break;
-    default:
-      shift(115);                   // 'different'
-    }
-    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'
-    whitespace();
-    parse_FTBigUnit();
-    eventHandler.endNonterminal("FTScope", e0);
-  }
-
-  function try_FTScope()
-  {
-    switch (l1)
-    {
-    case 223:                       // 'same'
-      shiftT(223);                  // 'same'
-      break;
-    default:
-      shiftT(115);                  // 'different'
-    }
-    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'
-    try_FTBigUnit();
-  }
-
-  function parse_FTBigUnit()
-  {
-    eventHandler.startNonterminal("FTBigUnit", e0);
-    switch (l1)
-    {
-    case 231:                       // 'sentence'
-      shift(231);                   // 'sentence'
-      break;
-    default:
-      shift(204);                   // 'paragraph'
-    }
-    eventHandler.endNonterminal("FTBigUnit", e0);
-  }
-
-  function try_FTBigUnit()
-  {
-    switch (l1)
-    {
-    case 231:                       // 'sentence'
-      shiftT(231);                  // 'sentence'
-      break;
-    default:
-      shiftT(204);                  // 'paragraph'
-    }
-  }
-
-  function parse_FTContent()
-  {
-    eventHandler.startNonterminal("FTContent", e0);
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      shift(81);                    // 'at'
-      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'
-      switch (l1)
-      {
-      case 237:                     // 'start'
-        shift(237);                 // 'start'
-        break;
-      default:
-        shift(126);                 // 'end'
-      }
-      break;
-    default:
-      shift(127);                   // 'entire'
-      lookahead1W(42);              // S^WS | '(:' | 'content'
-      shift(100);                   // 'content'
-    }
-    eventHandler.endNonterminal("FTContent", e0);
-  }
-
-  function try_FTContent()
-  {
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      shiftT(81);                   // 'at'
-      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'
-      switch (l1)
-      {
-      case 237:                     // 'start'
-        shiftT(237);                // 'start'
-        break;
-      default:
-        shiftT(126);                // 'end'
-      }
-      break;
-    default:
-      shiftT(127);                  // 'entire'
-      lookahead1W(42);              // S^WS | '(:' | 'content'
-      shiftT(100);                  // 'content'
-    }
-  }
-
-  function parse_FTMatchOptions()
-  {
-    eventHandler.startNonterminal("FTMatchOptions", e0);
-    for (;;)
-    {
-      shift(259);                   // 'using'
-      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |
-      whitespace();
-      parse_FTMatchOption();
-      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 != 259)                // 'using'
-      {
-        break;
-      }
-    }
-    eventHandler.endNonterminal("FTMatchOptions", e0);
-  }
-
-  function try_FTMatchOptions()
-  {
-    for (;;)
-    {
-      shiftT(259);                  // 'using'
-      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |
-      try_FTMatchOption();
-      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-      if (l1 != 259)                // 'using'
-      {
-        break;
-      }
-    }
-  }
-
-  function parse_FTMatchOption()
-  {
-    eventHandler.startNonterminal("FTMatchOption", e0);
-    switch (l1)
-    {
-    case 188:                       // 'no'
-      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 169:                       // 'language'
-      parse_FTLanguageOption();
-      break;
-    case 268:                       // 'wildcards'
-    case 137404:                    // 'no' 'wildcards'
-      parse_FTWildCardOption();
-      break;
-    case 246:                       // 'thesaurus'
-    case 126140:                    // 'no' 'thesaurus'
-      parse_FTThesaurusOption();
-      break;
-    case 238:                       // 'stemming'
-    case 122044:                    // 'no' 'stemming'
-      parse_FTStemOption();
-      break;
-    case 114:                       // 'diacritics'
-      parse_FTDiacriticsOption();
-      break;
-    case 239:                       // 'stop'
-    case 122556:                    // 'no' 'stop'
-      parse_FTStopWordOption();
-      break;
-    case 199:                       // 'option'
-      parse_FTExtensionOption();
-      break;
-    default:
-      parse_FTCaseOption();
-    }
-    eventHandler.endNonterminal("FTMatchOption", e0);
-  }
-
-  function try_FTMatchOption()
-  {
-    switch (l1)
-    {
-    case 188:                       // 'no'
-      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 169:                       // 'language'
-      try_FTLanguageOption();
-      break;
-    case 268:                       // 'wildcards'
-    case 137404:                    // 'no' 'wildcards'
-      try_FTWildCardOption();
-      break;
-    case 246:                       // 'thesaurus'
-    case 126140:                    // 'no' 'thesaurus'
-      try_FTThesaurusOption();
-      break;
-    case 238:                       // 'stemming'
-    case 122044:                    // 'no' 'stemming'
-      try_FTStemOption();
-      break;
-    case 114:                       // 'diacritics'
-      try_FTDiacriticsOption();
-      break;
-    case 239:                       // 'stop'
-    case 122556:                    // 'no' 'stop'
-      try_FTStopWordOption();
-      break;
-    case 199:                       // 'option'
-      try_FTExtensionOption();
-      break;
-    default:
-      try_FTCaseOption();
-    }
-  }
-
-  function parse_FTCaseOption()
-  {
-    eventHandler.startNonterminal("FTCaseOption", e0);
-    switch (l1)
-    {
-    case 88:                        // 'case'
-      shift(88);                    // 'case'
-      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'
-      switch (l1)
-      {
-      case 158:                     // 'insensitive'
-        shift(158);                 // 'insensitive'
-        break;
-      default:
-        shift(230);                 // 'sensitive'
-      }
-      break;
-    case 177:                       // 'lowercase'
-      shift(177);                   // 'lowercase'
-      break;
-    default:
-      shift(258);                   // 'uppercase'
-    }
-    eventHandler.endNonterminal("FTCaseOption", e0);
-  }
-
-  function try_FTCaseOption()
-  {
-    switch (l1)
-    {
-    case 88:                        // 'case'
-      shiftT(88);                   // 'case'
-      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'
-      switch (l1)
-      {
-      case 158:                     // 'insensitive'
-        shiftT(158);                // 'insensitive'
-        break;
-      default:
-        shiftT(230);                // 'sensitive'
-      }
-      break;
-    case 177:                       // 'lowercase'
-      shiftT(177);                  // 'lowercase'
-      break;
-    default:
-      shiftT(258);                  // 'uppercase'
-    }
-  }
-
-  function parse_FTDiacriticsOption()
-  {
-    eventHandler.startNonterminal("FTDiacriticsOption", e0);
-    shift(114);                     // 'diacritics'
-    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'
-    switch (l1)
-    {
-    case 158:                       // 'insensitive'
-      shift(158);                   // 'insensitive'
-      break;
-    default:
-      shift(230);                   // 'sensitive'
-    }
-    eventHandler.endNonterminal("FTDiacriticsOption", e0);
-  }
-
-  function try_FTDiacriticsOption()
-  {
-    shiftT(114);                    // 'diacritics'
-    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'
-    switch (l1)
-    {
-    case 158:                       // 'insensitive'
-      shiftT(158);                  // 'insensitive'
-      break;
-    default:
-      shiftT(230);                  // 'sensitive'
-    }
-  }
-
-  function parse_FTStemOption()
-  {
-    eventHandler.startNonterminal("FTStemOption", e0);
-    switch (l1)
-    {
-    case 238:                       // 'stemming'
-      shift(238);                   // 'stemming'
-      break;
-    default:
-      shift(188);                   // 'no'
-      lookahead1W(74);              // S^WS | '(:' | 'stemming'
-      shift(238);                   // 'stemming'
-    }
-    eventHandler.endNonterminal("FTStemOption", e0);
-  }
-
-  function try_FTStemOption()
-  {
-    switch (l1)
-    {
-    case 238:                       // 'stemming'
-      shiftT(238);                  // 'stemming'
-      break;
-    default:
-      shiftT(188);                  // 'no'
-      lookahead1W(74);              // S^WS | '(:' | 'stemming'
-      shiftT(238);                  // 'stemming'
-    }
-  }
-
-  function parse_FTThesaurusOption()
-  {
-    eventHandler.startNonterminal("FTThesaurusOption", e0);
-    switch (l1)
-    {
-    case 246:                       // 'thesaurus'
-      shift(246);                   // 'thesaurus'
-      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'
-      switch (l1)
-      {
-      case 81:                      // 'at'
-        whitespace();
-        parse_FTThesaurusID();
-        break;
-      case 109:                     // 'default'
-        shift(109);                 // 'default'
-        break;
-      default:
-        shift(34);                  // '('
-        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'
-        switch (l1)
-        {
-        case 81:                    // 'at'
-          whitespace();
-          parse_FTThesaurusID();
-          break;
-        default:
-          shift(109);               // 'default'
-        }
-        for (;;)
-        {
-          lookahead1W(101);         // S^WS | '(:' | ')' | ','
-          if (l1 != 41)             // ','
-          {
-            break;
-          }
-          shift(41);                // ','
-          lookahead1W(31);          // S^WS | '(:' | 'at'
-          whitespace();
-          parse_FTThesaurusID();
-        }
-        shift(37);                  // ')'
-      }
-      break;
-    default:
-      shift(188);                   // 'no'
-      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'
-      shift(246);                   // 'thesaurus'
-    }
-    eventHandler.endNonterminal("FTThesaurusOption", e0);
-  }
-
-  function try_FTThesaurusOption()
-  {
-    switch (l1)
-    {
-    case 246:                       // 'thesaurus'
-      shiftT(246);                  // 'thesaurus'
-      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'
-      switch (l1)
-      {
-      case 81:                      // 'at'
-        try_FTThesaurusID();
-        break;
-      case 109:                     // 'default'
-        shiftT(109);                // 'default'
-        break;
-      default:
-        shiftT(34);                 // '('
-        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'
-        switch (l1)
-        {
-        case 81:                    // 'at'
-          try_FTThesaurusID();
-          break;
-        default:
-          shiftT(109);              // 'default'
-        }
-        for (;;)
-        {
-          lookahead1W(101);         // S^WS | '(:' | ')' | ','
-          if (l1 != 41)             // ','
-          {
-            break;
-          }
-          shiftT(41);               // ','
-          lookahead1W(31);          // S^WS | '(:' | 'at'
-          try_FTThesaurusID();
-        }
-        shiftT(37);                 // ')'
-      }
-      break;
-    default:
-      shiftT(188);                  // 'no'
-      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'
-      shiftT(246);                  // 'thesaurus'
-    }
-  }
-
-  function parse_FTThesaurusID()
-  {
-    eventHandler.startNonterminal("FTThesaurusID", e0);
-    shift(81);                      // 'at'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    if (l1 == 217)                  // 'relationship'
-    {
-      shift(217);                   // 'relationship'
-      lookahead1W(17);              // StringLiteral | S^WS | '(:'
-      shift(11);                    // StringLiteral
-    }
-    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 130                   // 'exactly'
-     || lk == 140                   // 'from'
-     || lk == 88657                 // 'at' 'least'
-     || lk == 93777)                // 'at' 'most'
-    {
-      whitespace();
-      parse_FTLiteralRange();
-      lookahead1W(58);              // S^WS | '(:' | 'levels'
-      shift(175);                   // 'levels'
-    }
-    eventHandler.endNonterminal("FTThesaurusID", e0);
-  }
-
-  function try_FTThesaurusID()
-  {
-    shiftT(81);                     // 'at'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shiftT(7);                      // URILiteral
-    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    if (l1 == 217)                  // 'relationship'
-    {
-      shiftT(217);                  // 'relationship'
-      lookahead1W(17);              // StringLiteral | S^WS | '(:'
-      shiftT(11);                   // StringLiteral
-    }
-    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 130                   // 'exactly'
-     || lk == 140                   // 'from'
-     || lk == 88657                 // 'at' 'least'
-     || lk == 93777)                // 'at' 'most'
-    {
-      try_FTLiteralRange();
-      lookahead1W(58);              // S^WS | '(:' | 'levels'
-      shiftT(175);                  // 'levels'
-    }
-  }
-
-  function parse_FTLiteralRange()
-  {
-    eventHandler.startNonterminal("FTLiteralRange", e0);
-    switch (l1)
-    {
-    case 130:                       // 'exactly'
-      shift(130);                   // 'exactly'
-      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'
-      shift(8);                     // IntegerLiteral
-      break;
-    case 81:                        // 'at'
-      shift(81);                    // 'at'
-      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'
-      switch (l1)
-      {
-      case 173:                     // 'least'
-        shift(173);                 // 'least'
-        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'
-        shift(8);                   // IntegerLiteral
-        break;
-      default:
-        shift(183);                 // 'most'
-        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'
-        shift(8);                   // IntegerLiteral
-      }
-      break;
-    default:
-      shift(140);                   // 'from'
-      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'
-      shift(8);                     // IntegerLiteral
-      lookahead1W(79);              // S^WS | '(:' | 'to'
-      shift(248);                   // 'to'
-      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'
-      shift(8);                     // IntegerLiteral
-    }
-    eventHandler.endNonterminal("FTLiteralRange", e0);
-  }
-
-  function try_FTLiteralRange()
-  {
-    switch (l1)
-    {
-    case 130:                       // 'exactly'
-      shiftT(130);                  // 'exactly'
-      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'
-      shiftT(8);                    // IntegerLiteral
-      break;
-    case 81:                        // 'at'
-      shiftT(81);                   // 'at'
-      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'
-      switch (l1)
-      {
-      case 173:                     // 'least'
-        shiftT(173);                // 'least'
-        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'
-        shiftT(8);                  // IntegerLiteral
-        break;
-      default:
-        shiftT(183);                // 'most'
-        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'
-        shiftT(8);                  // IntegerLiteral
-      }
-      break;
-    default:
-      shiftT(140);                  // 'from'
-      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'
-      shiftT(8);                    // IntegerLiteral
-      lookahead1W(79);              // S^WS | '(:' | 'to'
-      shiftT(248);                  // 'to'
-      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'
-      shiftT(8);                    // IntegerLiteral
-    }
-  }
-
-  function parse_FTStopWordOption()
-  {
-    eventHandler.startNonterminal("FTStopWordOption", e0);
-    switch (l1)
-    {
-    case 239:                       // 'stop'
-      shift(239);                   // 'stop'
-      lookahead1W(86);              // S^WS | '(:' | 'words'
-      shift(273);                   // 'words'
-      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'
-      switch (l1)
-      {
-      case 109:                     // 'default'
-        shift(109);                 // 'default'
-        for (;;)
-        {
-          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-          if (l1 != 131             // 'except'
-           && l1 != 254)            // 'union'
-          {
-            break;
-          }
-          whitespace();
-          parse_FTStopWordsInclExcl();
-        }
-        break;
-      default:
-        whitespace();
-        parse_FTStopWords();
-        for (;;)
-        {
-          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-          if (l1 != 131             // 'except'
-           && l1 != 254)            // 'union'
-          {
-            break;
-          }
-          whitespace();
-          parse_FTStopWordsInclExcl();
-        }
-      }
-      break;
-    default:
-      shift(188);                   // 'no'
-      lookahead1W(75);              // S^WS | '(:' | 'stop'
-      shift(239);                   // 'stop'
-      lookahead1W(86);              // S^WS | '(:' | 'words'
-      shift(273);                   // 'words'
-    }
-    eventHandler.endNonterminal("FTStopWordOption", e0);
-  }
-
-  function try_FTStopWordOption()
-  {
-    switch (l1)
-    {
-    case 239:                       // 'stop'
-      shiftT(239);                  // 'stop'
-      lookahead1W(86);              // S^WS | '(:' | 'words'
-      shiftT(273);                  // 'words'
-      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'
-      switch (l1)
-      {
-      case 109:                     // 'default'
-        shiftT(109);                // 'default'
-        for (;;)
-        {
-          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-          if (l1 != 131             // 'except'
-           && l1 != 254)            // 'union'
-          {
-            break;
-          }
-          try_FTStopWordsInclExcl();
-        }
-        break;
-      default:
-        try_FTStopWords();
-        for (;;)
-        {
-          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |
-          if (l1 != 131             // 'except'
-           && l1 != 254)            // 'union'
-          {
-            break;
-          }
-          try_FTStopWordsInclExcl();
-        }
-      }
-      break;
-    default:
-      shiftT(188);                  // 'no'
-      lookahead1W(75);              // S^WS | '(:' | 'stop'
-      shiftT(239);                  // 'stop'
-      lookahead1W(86);              // S^WS | '(:' | 'words'
-      shiftT(273);                  // 'words'
-    }
-  }
-
-  function parse_FTStopWords()
-  {
-    eventHandler.startNonterminal("FTStopWords", e0);
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      shift(81);                    // 'at'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shift(7);                     // URILiteral
-      break;
-    default:
-      shift(34);                    // '('
-      lookahead1W(17);              // StringLiteral | S^WS | '(:'
-      shift(11);                    // StringLiteral
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shift(41);                  // ','
-        lookahead1W(17);            // StringLiteral | S^WS | '(:'
-        shift(11);                  // StringLiteral
-      }
-      shift(37);                    // ')'
-    }
-    eventHandler.endNonterminal("FTStopWords", e0);
-  }
-
-  function try_FTStopWords()
-  {
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      shiftT(81);                   // 'at'
-      lookahead1W(15);              // URILiteral | S^WS | '(:'
-      shiftT(7);                    // URILiteral
-      break;
-    default:
-      shiftT(34);                   // '('
-      lookahead1W(17);              // StringLiteral | S^WS | '(:'
-      shiftT(11);                   // StringLiteral
-      for (;;)
-      {
-        lookahead1W(101);           // S^WS | '(:' | ')' | ','
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shiftT(41);                 // ','
-        lookahead1W(17);            // StringLiteral | S^WS | '(:'
-        shiftT(11);                 // StringLiteral
-      }
-      shiftT(37);                   // ')'
-    }
-  }
-
-  function parse_FTStopWordsInclExcl()
-  {
-    eventHandler.startNonterminal("FTStopWordsInclExcl", e0);
-    switch (l1)
-    {
-    case 254:                       // 'union'
-      shift(254);                   // 'union'
-      break;
-    default:
-      shift(131);                   // 'except'
-    }
-    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'
-    whitespace();
-    parse_FTStopWords();
-    eventHandler.endNonterminal("FTStopWordsInclExcl", e0);
-  }
-
-  function try_FTStopWordsInclExcl()
-  {
-    switch (l1)
-    {
-    case 254:                       // 'union'
-      shiftT(254);                  // 'union'
-      break;
-    default:
-      shiftT(131);                  // 'except'
-    }
-    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'
-    try_FTStopWords();
-  }
-
-  function parse_FTLanguageOption()
-  {
-    eventHandler.startNonterminal("FTLanguageOption", e0);
-    shift(169);                     // 'language'
-    lookahead1W(17);                // StringLiteral | S^WS | '(:'
-    shift(11);                      // StringLiteral
-    eventHandler.endNonterminal("FTLanguageOption", e0);
-  }
-
-  function try_FTLanguageOption()
-  {
-    shiftT(169);                    // 'language'
-    lookahead1W(17);                // StringLiteral | S^WS | '(:'
-    shiftT(11);                     // StringLiteral
-  }
-
-  function parse_FTWildCardOption()
-  {
-    eventHandler.startNonterminal("FTWildCardOption", e0);
-    switch (l1)
-    {
-    case 268:                       // 'wildcards'
-      shift(268);                   // 'wildcards'
-      break;
-    default:
-      shift(188);                   // 'no'
-      lookahead1W(84);              // S^WS | '(:' | 'wildcards'
-      shift(268);                   // 'wildcards'
-    }
-    eventHandler.endNonterminal("FTWildCardOption", e0);
-  }
-
-  function try_FTWildCardOption()
-  {
-    switch (l1)
-    {
-    case 268:                       // 'wildcards'
-      shiftT(268);                  // 'wildcards'
-      break;
-    default:
-      shiftT(188);                  // 'no'
-      lookahead1W(84);              // S^WS | '(:' | 'wildcards'
-      shiftT(268);                  // 'wildcards'
-    }
-  }
-
-  function parse_FTExtensionOption()
-  {
-    eventHandler.startNonterminal("FTExtensionOption", e0);
-    shift(199);                     // 'option'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(17);                // StringLiteral | S^WS | '(:'
-    shift(11);                      // StringLiteral
-    eventHandler.endNonterminal("FTExtensionOption", e0);
-  }
-
-  function try_FTExtensionOption()
-  {
-    shiftT(199);                    // 'option'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_EQName();
-    lookahead1W(17);                // StringLiteral | S^WS | '(:'
-    shiftT(11);                     // StringLiteral
-  }
-
-  function parse_FTIgnoreOption()
-  {
-    eventHandler.startNonterminal("FTIgnoreOption", e0);
-    shift(271);                     // 'without'
-    lookahead1W(42);                // S^WS | '(:' | 'content'
-    shift(100);                     // 'content'
-    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_UnionExpr();
-    eventHandler.endNonterminal("FTIgnoreOption", e0);
-  }
-
-  function try_FTIgnoreOption()
-  {
-    shiftT(271);                    // 'without'
-    lookahead1W(42);                // S^WS | '(:' | 'content'
-    shiftT(100);                    // 'content'
-    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_UnionExpr();
-  }
-
-  function parse_CollectionDecl()
-  {
-    eventHandler.startNonterminal("CollectionDecl", e0);
-    shift(95);                      // 'collection'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(107);               // S^WS | '(:' | ';' | 'as'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_CollectionTypeDecl();
-    }
-    eventHandler.endNonterminal("CollectionDecl", e0);
-  }
-
-  function parse_CollectionTypeDecl()
-  {
-    eventHandler.startNonterminal("CollectionTypeDecl", e0);
-    shift(79);                      // 'as'
-    lookahead1W(183);               // S^WS | '(:' | 'array' | 'attribute' | 'comment' | 'document-node' | 'element' |
-    whitespace();
-    parse_KindTest();
-    lookahead1W(156);               // S^WS | '(:' | '*' | '+' | ';' | '?'
-    if (l1 != 53)                   // ';'
-    {
-      whitespace();
-      parse_OccurrenceIndicator();
-    }
-    eventHandler.endNonterminal("CollectionTypeDecl", e0);
-  }
-
-  function parse_IndexName()
-  {
-    eventHandler.startNonterminal("IndexName", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("IndexName", e0);
-  }
-
-  function parse_IndexDomainExpr()
-  {
-    eventHandler.startNonterminal("IndexDomainExpr", e0);
-    parse_PathExpr();
-    eventHandler.endNonterminal("IndexDomainExpr", e0);
-  }
-
-  function parse_IndexKeySpec()
-  {
-    eventHandler.startNonterminal("IndexKeySpec", e0);
-    parse_IndexKeyExpr();
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_IndexKeyTypeDecl();
-    }
-    lookahead1W(146);               // S^WS | '(:' | ',' | ';' | 'collation'
-    if (l1 == 94)                   // 'collation'
-    {
-      whitespace();
-      parse_IndexKeyCollation();
-    }
-    eventHandler.endNonterminal("IndexKeySpec", e0);
-  }
-
-  function parse_IndexKeyExpr()
-  {
-    eventHandler.startNonterminal("IndexKeyExpr", e0);
-    parse_PathExpr();
-    eventHandler.endNonterminal("IndexKeyExpr", e0);
-  }
-
-  function parse_IndexKeyTypeDecl()
-  {
-    eventHandler.startNonterminal("IndexKeyTypeDecl", e0);
-    shift(79);                      // 'as'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_AtomicType();
-    lookahead1W(169);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'
-    if (l1 == 39                    // '*'
-     || l1 == 40                    // '+'
-     || l1 == 64)                   // '?'
-    {
-      whitespace();
-      parse_OccurrenceIndicator();
-    }
-    eventHandler.endNonterminal("IndexKeyTypeDecl", e0);
-  }
-
-  function parse_AtomicType()
-  {
-    eventHandler.startNonterminal("AtomicType", e0);
-    parse_EQName();
-    eventHandler.endNonterminal("AtomicType", e0);
-  }
-
-  function parse_IndexKeyCollation()
-  {
-    eventHandler.startNonterminal("IndexKeyCollation", e0);
-    shift(94);                      // 'collation'
-    lookahead1W(15);                // URILiteral | S^WS | '(:'
-    shift(7);                       // URILiteral
-    eventHandler.endNonterminal("IndexKeyCollation", e0);
-  }
-
-  function parse_IndexDecl()
-  {
-    eventHandler.startNonterminal("IndexDecl", e0);
-    shift(155);                     // 'index'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_IndexName();
-    lookahead1W(65);                // S^WS | '(:' | 'on'
-    shift(197);                     // 'on'
-    lookahead1W(63);                // S^WS | '(:' | 'nodes'
-    shift(192);                     // 'nodes'
-    lookahead1W(264);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_IndexDomainExpr();
-    shift(87);                      // 'by'
-    lookahead1W(264);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_IndexKeySpec();
-    for (;;)
-    {
-      lookahead1W(103);             // S^WS | '(:' | ',' | ';'
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_IndexKeySpec();
-    }
-    eventHandler.endNonterminal("IndexDecl", e0);
-  }
-
-  function parse_ICDecl()
-  {
-    eventHandler.startNonterminal("ICDecl", e0);
-    shift(161);                     // 'integrity'
-    lookahead1W(40);                // S^WS | '(:' | 'constraint'
-    shift(97);                      // 'constraint'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(120);               // S^WS | '(:' | 'foreign' | 'on'
-    switch (l1)
-    {
-    case 197:                       // 'on'
-      whitespace();
-      parse_ICCollection();
-      break;
-    default:
-      whitespace();
-      parse_ICForeignKey();
-    }
-    eventHandler.endNonterminal("ICDecl", e0);
-  }
-
-  function parse_ICCollection()
-  {
-    eventHandler.startNonterminal("ICCollection", e0);
-    shift(197);                     // 'on'
-    lookahead1W(39);                // S^WS | '(:' | 'collection'
-    shift(95);                      // 'collection'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(140);               // S^WS | '$' | '(:' | 'foreach' | 'node'
-    switch (l1)
-    {
-    case 31:                        // '$'
-      whitespace();
-      parse_ICCollSequence();
-      break;
-    case 191:                       // 'node'
-      whitespace();
-      parse_ICCollSequenceUnique();
-      break;
-    default:
-      whitespace();
-      parse_ICCollNode();
-    }
-    eventHandler.endNonterminal("ICCollection", e0);
-  }
-
-  function parse_ICCollSequence()
-  {
-    eventHandler.startNonterminal("ICCollSequence", e0);
-    parse_VarRef();
-    lookahead1W(37);                // S^WS | '(:' | 'check'
-    shift(92);                      // 'check'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("ICCollSequence", e0);
-  }
-
-  function parse_ICCollSequenceUnique()
-  {
-    eventHandler.startNonterminal("ICCollSequenceUnique", e0);
-    shift(191);                     // 'node'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    whitespace();
-    parse_VarRef();
-    lookahead1W(37);                // S^WS | '(:' | 'check'
-    shift(92);                      // 'check'
-    lookahead1W(80);                // S^WS | '(:' | 'unique'
-    shift(255);                     // 'unique'
-    lookahead1W(57);                // S^WS | '(:' | 'key'
-    shift(168);                     // 'key'
-    lookahead1W(264);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_PathExpr();
-    eventHandler.endNonterminal("ICCollSequenceUnique", e0);
-  }
-
-  function parse_ICCollNode()
-  {
-    eventHandler.startNonterminal("ICCollNode", e0);
-    shift(138);                     // 'foreach'
-    lookahead1W(62);                // S^WS | '(:' | 'node'
-    shift(191);                     // 'node'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    whitespace();
-    parse_VarRef();
-    lookahead1W(37);                // S^WS | '(:' | 'check'
-    shift(92);                      // 'check'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("ICCollNode", e0);
-  }
-
-  function parse_ICForeignKey()
-  {
-    eventHandler.startNonterminal("ICForeignKey", e0);
-    shift(139);                     // 'foreign'
-    lookahead1W(57);                // S^WS | '(:' | 'key'
-    shift(168);                     // 'key'
-    lookahead1W(51);                // S^WS | '(:' | 'from'
-    whitespace();
-    parse_ICForeignKeySource();
-    whitespace();
-    parse_ICForeignKeyTarget();
-    eventHandler.endNonterminal("ICForeignKey", e0);
-  }
-
-  function parse_ICForeignKeySource()
-  {
-    eventHandler.startNonterminal("ICForeignKeySource", e0);
-    shift(140);                     // 'from'
-    lookahead1W(39);                // S^WS | '(:' | 'collection'
-    whitespace();
-    parse_ICForeignKeyValues();
-    eventHandler.endNonterminal("ICForeignKeySource", e0);
-  }
-
-  function parse_ICForeignKeyTarget()
-  {
-    eventHandler.startNonterminal("ICForeignKeyTarget", e0);
-    shift(248);                     // 'to'
-    lookahead1W(39);                // S^WS | '(:' | 'collection'
-    whitespace();
-    parse_ICForeignKeyValues();
-    eventHandler.endNonterminal("ICForeignKeyTarget", e0);
-  }
-
-  function parse_ICForeignKeyValues()
-  {
-    eventHandler.startNonterminal("ICForeignKeyValues", e0);
-    shift(95);                      // 'collection'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(62);                // S^WS | '(:' | 'node'
-    shift(191);                     // 'node'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    whitespace();
-    parse_VarRef();
-    lookahead1W(57);                // S^WS | '(:' | 'key'
-    shift(168);                     // 'key'
-    lookahead1W(264);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_PathExpr();
-    eventHandler.endNonterminal("ICForeignKeyValues", e0);
-  }
-
-  function try_Comment()
-  {
-    shiftT(36);                     // '(:'
-    for (;;)
-    {
-      lookahead1(89);               // CommentContents | '(:' | ':)'
-      if (l1 == 50)                 // ':)'
-      {
-        break;
-      }
-      switch (l1)
-      {
-      case 24:                      // CommentContents
-        shiftT(24);                 // CommentContents
-        break;
-      default:
-        try_Comment();
-      }
-    }
-    shiftT(50);                     // ':)'
-  }
-
-  function try_Whitespace()
-  {
-    switch (l1)
-    {
-    case 22:                        // S^WS
-      shiftT(22);                   // S^WS
-      break;
-    default:
-      try_Comment();
-    }
-  }
-
-  function parse_EQName()
-  {
-    eventHandler.startNonterminal("EQName", e0);
-    lookahead1(248);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |
-    switch (l1)
-    {
-    case 82:                        // 'attribute'
-      shift(82);                    // 'attribute'
-      break;
-    case 96:                        // 'comment'
-      shift(96);                    // 'comment'
-      break;
-    case 120:                       // 'document-node'
-      shift(120);                   // 'document-node'
-      break;
-    case 121:                       // 'element'
-      shift(121);                   // 'element'
-      break;
-    case 124:                       // 'empty-sequence'
-      shift(124);                   // 'empty-sequence'
-      break;
-    case 145:                       // 'function'
-      shift(145);                   // 'function'
-      break;
-    case 152:                       // 'if'
-      shift(152);                   // 'if'
-      break;
-    case 165:                       // 'item'
-      shift(165);                   // 'item'
-      break;
-    case 185:                       // 'namespace-node'
-      shift(185);                   // 'namespace-node'
-      break;
-    case 191:                       // 'node'
-      shift(191);                   // 'node'
-      break;
-    case 216:                       // 'processing-instruction'
-      shift(216);                   // 'processing-instruction'
-      break;
-    case 226:                       // 'schema-attribute'
-      shift(226);                   // 'schema-attribute'
-      break;
-    case 227:                       // 'schema-element'
-      shift(227);                   // 'schema-element'
-      break;
-    case 243:                       // 'switch'
-      shift(243);                   // 'switch'
-      break;
-    case 244:                       // 'text'
-      shift(244);                   // 'text'
-      break;
-    case 253:                       // 'typeswitch'
-      shift(253);                   // 'typeswitch'
-      break;
-    default:
-      parse_FunctionName();
-    }
-    eventHandler.endNonterminal("EQName", e0);
-  }
-
-  function try_EQName()
-  {
-    lookahead1(248);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |
-    switch (l1)
-    {
-    case 82:                        // 'attribute'
-      shiftT(82);                   // 'attribute'
-      break;
-    case 96:                        // 'comment'
-      shiftT(96);                   // 'comment'
-      break;
-    case 120:                       // 'document-node'
-      shiftT(120);                  // 'document-node'
-      break;
-    case 121:                       // 'element'
-      shiftT(121);                  // 'element'
-      break;
-    case 124:                       // 'empty-sequence'
-      shiftT(124);                  // 'empty-sequence'
-      break;
-    case 145:                       // 'function'
-      shiftT(145);                  // 'function'
-      break;
-    case 152:                       // 'if'
-      shiftT(152);                  // 'if'
-      break;
-    case 165:                       // 'item'
-      shiftT(165);                  // 'item'
-      break;
-    case 185:                       // 'namespace-node'
-      shiftT(185);                  // 'namespace-node'
-      break;
-    case 191:                       // 'node'
-      shiftT(191);                  // 'node'
-      break;
-    case 216:                       // 'processing-instruction'
-      shiftT(216);                  // 'processing-instruction'
-      break;
-    case 226:                       // 'schema-attribute'
-      shiftT(226);                  // 'schema-attribute'
-      break;
-    case 227:                       // 'schema-element'
-      shiftT(227);                  // 'schema-element'
-      break;
-    case 243:                       // 'switch'
-      shiftT(243);                  // 'switch'
-      break;
-    case 244:                       // 'text'
-      shiftT(244);                  // 'text'
-      break;
-    case 253:                       // 'typeswitch'
-      shiftT(253);                  // 'typeswitch'
-      break;
-    default:
-      try_FunctionName();
-    }
-  }
-
-  function parse_FunctionName()
-  {
-    eventHandler.startNonterminal("FunctionName", e0);
-    switch (l1)
-    {
-    case 6:                         // EQName^Token
-      shift(6);                     // EQName^Token
-      break;
-    case 70:                        // 'after'
-      shift(70);                    // 'after'
-      break;
-    case 73:                        // 'ancestor'
-      shift(73);                    // 'ancestor'
-      break;
-    case 74:                        // 'ancestor-or-self'
-      shift(74);                    // 'ancestor-or-self'
-      break;
-    case 75:                        // 'and'
-      shift(75);                    // 'and'
-      break;
-    case 79:                        // 'as'
-      shift(79);                    // 'as'
-      break;
-    case 80:                        // 'ascending'
-      shift(80);                    // 'ascending'
-      break;
-    case 84:                        // 'before'
-      shift(84);                    // 'before'
-      break;
-    case 88:                        // 'case'
-      shift(88);                    // 'case'
-      break;
-    case 89:                        // 'cast'
-      shift(89);                    // 'cast'
-      break;
-    case 90:                        // 'castable'
-      shift(90);                    // 'castable'
-      break;
-    case 93:                        // 'child'
-      shift(93);                    // 'child'
-      break;
-    case 94:                        // 'collation'
-      shift(94);                    // 'collation'
-      break;
-    case 103:                       // 'copy'
-      shift(103);                   // 'copy'
-      break;
-    case 105:                       // 'count'
-      shift(105);                   // 'count'
-      break;
-    case 108:                       // 'declare'
-      shift(108);                   // 'declare'
-      break;
-    case 109:                       // 'default'
-      shift(109);                   // 'default'
-      break;
-    case 110:                       // 'delete'
-      shift(110);                   // 'delete'
-      break;
-    case 111:                       // 'descendant'
-      shift(111);                   // 'descendant'
-      break;
-    case 112:                       // 'descendant-or-self'
-      shift(112);                   // 'descendant-or-self'
-      break;
-    case 113:                       // 'descending'
-      shift(113);                   // 'descending'
-      break;
-    case 118:                       // 'div'
-      shift(118);                   // 'div'
-      break;
-    case 119:                       // 'document'
-      shift(119);                   // 'document'
-      break;
-    case 122:                       // 'else'
-      shift(122);                   // 'else'
-      break;
-    case 123:                       // 'empty'
-      shift(123);                   // 'empty'
-      break;
-    case 126:                       // 'end'
-      shift(126);                   // 'end'
-      break;
-    case 128:                       // 'eq'
-      shift(128);                   // 'eq'
-      break;
-    case 129:                       // 'every'
-      shift(129);                   // 'every'
-      break;
-    case 131:                       // 'except'
-      shift(131);                   // 'except'
-      break;
-    case 134:                       // 'first'
-      shift(134);                   // 'first'
-      break;
-    case 135:                       // 'following'
-      shift(135);                   // 'following'
-      break;
-    case 136:                       // 'following-sibling'
-      shift(136);                   // 'following-sibling'
-      break;
-    case 137:                       // 'for'
-      shift(137);                   // 'for'
-      break;
-    case 146:                       // 'ge'
-      shift(146);                   // 'ge'
-      break;
-    case 148:                       // 'group'
-      shift(148);                   // 'group'
-      break;
-    case 150:                       // 'gt'
-      shift(150);                   // 'gt'
-      break;
-    case 151:                       // 'idiv'
-      shift(151);                   // 'idiv'
-      break;
-    case 153:                       // 'import'
-      shift(153);                   // 'import'
-      break;
-    case 159:                       // 'insert'
-      shift(159);                   // 'insert'
-      break;
-    case 160:                       // 'instance'
-      shift(160);                   // 'instance'
-      break;
-    case 162:                       // 'intersect'
-      shift(162);                   // 'intersect'
-      break;
-    case 163:                       // 'into'
-      shift(163);                   // 'into'
-      break;
-    case 164:                       // 'is'
-      shift(164);                   // 'is'
-      break;
-    case 170:                       // 'last'
-      shift(170);                   // 'last'
-      break;
-    case 172:                       // 'le'
-      shift(172);                   // 'le'
-      break;
-    case 174:                       // 'let'
-      shift(174);                   // 'let'
-      break;
-    case 178:                       // 'lt'
-      shift(178);                   // 'lt'
-      break;
-    case 180:                       // 'mod'
-      shift(180);                   // 'mod'
-      break;
-    case 181:                       // 'modify'
-      shift(181);                   // 'modify'
-      break;
-    case 182:                       // 'module'
-      shift(182);                   // 'module'
-      break;
-    case 184:                       // 'namespace'
-      shift(184);                   // 'namespace'
-      break;
-    case 186:                       // 'ne'
-      shift(186);                   // 'ne'
-      break;
-    case 198:                       // 'only'
-      shift(198);                   // 'only'
-      break;
-    case 200:                       // 'or'
-      shift(200);                   // 'or'
-      break;
-    case 201:                       // 'order'
-      shift(201);                   // 'order'
-      break;
-    case 202:                       // 'ordered'
-      shift(202);                   // 'ordered'
-      break;
-    case 206:                       // 'parent'
-      shift(206);                   // 'parent'
-      break;
-    case 212:                       // 'preceding'
-      shift(212);                   // 'preceding'
-      break;
-    case 213:                       // 'preceding-sibling'
-      shift(213);                   // 'preceding-sibling'
-      break;
-    case 218:                       // 'rename'
-      shift(218);                   // 'rename'
-      break;
-    case 219:                       // 'replace'
-      shift(219);                   // 'replace'
-      break;
-    case 220:                       // 'return'
-      shift(220);                   // 'return'
-      break;
-    case 224:                       // 'satisfies'
-      shift(224);                   // 'satisfies'
-      break;
-    case 229:                       // 'self'
-      shift(229);                   // 'self'
-      break;
-    case 235:                       // 'some'
-      shift(235);                   // 'some'
-      break;
-    case 236:                       // 'stable'
-      shift(236);                   // 'stable'
-      break;
-    case 237:                       // 'start'
-      shift(237);                   // 'start'
-      break;
-    case 248:                       // 'to'
-      shift(248);                   // 'to'
-      break;
-    case 249:                       // 'treat'
-      shift(249);                   // 'treat'
-      break;
-    case 250:                       // 'try'
-      shift(250);                   // 'try'
-      break;
-    case 254:                       // 'union'
-      shift(254);                   // 'union'
-      break;
-    case 256:                       // 'unordered'
-      shift(256);                   // 'unordered'
-      break;
-    case 260:                       // 'validate'
-      shift(260);                   // 'validate'
-      break;
-    case 266:                       // 'where'
-      shift(266);                   // 'where'
-      break;
-    case 270:                       // 'with'
-      shift(270);                   // 'with'
-      break;
-    case 274:                       // 'xquery'
-      shift(274);                   // 'xquery'
-      break;
-    case 72:                        // 'allowing'
-      shift(72);                    // 'allowing'
-      break;
-    case 81:                        // 'at'
-      shift(81);                    // 'at'
-      break;
-    case 83:                        // 'base-uri'
-      shift(83);                    // 'base-uri'
-      break;
-    case 85:                        // 'boundary-space'
-      shift(85);                    // 'boundary-space'
-      break;
-    case 86:                        // 'break'
-      shift(86);                    // 'break'
-      break;
-    case 91:                        // 'catch'
-      shift(91);                    // 'catch'
-      break;
-    case 98:                        // 'construction'
-      shift(98);                    // 'construction'
-      break;
-    case 101:                       // 'context'
-      shift(101);                   // 'context'
-      break;
-    case 102:                       // 'continue'
-      shift(102);                   // 'continue'
-      break;
-    case 104:                       // 'copy-namespaces'
-      shift(104);                   // 'copy-namespaces'
-      break;
-    case 106:                       // 'decimal-format'
-      shift(106);                   // 'decimal-format'
-      break;
-    case 125:                       // 'encoding'
-      shift(125);                   // 'encoding'
-      break;
-    case 132:                       // 'exit'
-      shift(132);                   // 'exit'
-      break;
-    case 133:                       // 'external'
-      shift(133);                   // 'external'
-      break;
-    case 141:                       // 'ft-option'
-      shift(141);                   // 'ft-option'
-      break;
-    case 154:                       // 'in'
-      shift(154);                   // 'in'
-      break;
-    case 155:                       // 'index'
-      shift(155);                   // 'index'
-      break;
-    case 161:                       // 'integrity'
-      shift(161);                   // 'integrity'
-      break;
-    case 171:                       // 'lax'
-      shift(171);                   // 'lax'
-      break;
-    case 192:                       // 'nodes'
-      shift(192);                   // 'nodes'
-      break;
-    case 199:                       // 'option'
-      shift(199);                   // 'option'
-      break;
-    case 203:                       // 'ordering'
-      shift(203);                   // 'ordering'
-      break;
-    case 222:                       // 'revalidation'
-      shift(222);                   // 'revalidation'
-      break;
-    case 225:                       // 'schema'
-      shift(225);                   // 'schema'
-      break;
-    case 228:                       // 'score'
-      shift(228);                   // 'score'
-      break;
-    case 234:                       // 'sliding'
-      shift(234);                   // 'sliding'
-      break;
-    case 240:                       // 'strict'
-      shift(240);                   // 'strict'
-      break;
-    case 251:                       // 'tumbling'
-      shift(251);                   // 'tumbling'
-      break;
-    case 252:                       // 'type'
-      shift(252);                   // 'type'
-      break;
-    case 257:                       // 'updating'
-      shift(257);                   // 'updating'
-      break;
-    case 261:                       // 'value'
-      shift(261);                   // 'value'
-      break;
-    case 262:                       // 'variable'
-      shift(262);                   // 'variable'
-      break;
-    case 263:                       // 'version'
-      shift(263);                   // 'version'
-      break;
-    case 267:                       // 'while'
-      shift(267);                   // 'while'
-      break;
-    case 97:                        // 'constraint'
-      shift(97);                    // 'constraint'
-      break;
-    case 176:                       // 'loop'
-      shift(176);                   // 'loop'
-      break;
-    case 221:                       // 'returning'
-      shift(221);                   // 'returning'
-      break;
-    case 194:                       // 'object'
-      shift(194);                   // 'object'
-      break;
-    case 167:                       // 'json-item'
-      shift(167);                   // 'json-item'
-      break;
-    default:
-      shift(78);                    // 'array'
-    }
-    eventHandler.endNonterminal("FunctionName", e0);
-  }
-
-  function try_FunctionName()
-  {
-    switch (l1)
-    {
-    case 6:                         // EQName^Token
-      shiftT(6);                    // EQName^Token
-      break;
-    case 70:                        // 'after'
-      shiftT(70);                   // 'after'
-      break;
-    case 73:                        // 'ancestor'
-      shiftT(73);                   // 'ancestor'
-      break;
-    case 74:                        // 'ancestor-or-self'
-      shiftT(74);                   // 'ancestor-or-self'
-      break;
-    case 75:                        // 'and'
-      shiftT(75);                   // 'and'
-      break;
-    case 79:                        // 'as'
-      shiftT(79);                   // 'as'
-      break;
-    case 80:                        // 'ascending'
-      shiftT(80);                   // 'ascending'
-      break;
-    case 84:                        // 'before'
-      shiftT(84);                   // 'before'
-      break;
-    case 88:                        // 'case'
-      shiftT(88);                   // 'case'
-      break;
-    case 89:                        // 'cast'
-      shiftT(89);                   // 'cast'
-      break;
-    case 90:                        // 'castable'
-      shiftT(90);                   // 'castable'
-      break;
-    case 93:                        // 'child'
-      shiftT(93);                   // 'child'
-      break;
-    case 94:                        // 'collation'
-      shiftT(94);                   // 'collation'
-      break;
-    case 103:                       // 'copy'
-      shiftT(103);                  // 'copy'
-      break;
-    case 105:                       // 'count'
-      shiftT(105);                  // 'count'
-      break;
-    case 108:                       // 'declare'
-      shiftT(108);                  // 'declare'
-      break;
-    case 109:                       // 'default'
-      shiftT(109);                  // 'default'
-      break;
-    case 110:                       // 'delete'
-      shiftT(110);                  // 'delete'
-      break;
-    case 111:                       // 'descendant'
-      shiftT(111);                  // 'descendant'
-      break;
-    case 112:                       // 'descendant-or-self'
-      shiftT(112);                  // 'descendant-or-self'
-      break;
-    case 113:                       // 'descending'
-      shiftT(113);                  // 'descending'
-      break;
-    case 118:                       // 'div'
-      shiftT(118);                  // 'div'
-      break;
-    case 119:                       // 'document'
-      shiftT(119);                  // 'document'
-      break;
-    case 122:                       // 'else'
-      shiftT(122);                  // 'else'
-      break;
-    case 123:                       // 'empty'
-      shiftT(123);                  // 'empty'
-      break;
-    case 126:                       // 'end'
-      shiftT(126);                  // 'end'
-      break;
-    case 128:                       // 'eq'
-      shiftT(128);                  // 'eq'
-      break;
-    case 129:                       // 'every'
-      shiftT(129);                  // 'every'
-      break;
-    case 131:                       // 'except'
-      shiftT(131);                  // 'except'
-      break;
-    case 134:                       // 'first'
-      shiftT(134);                  // 'first'
-      break;
-    case 135:                       // 'following'
-      shiftT(135);                  // 'following'
-      break;
-    case 136:                       // 'following-sibling'
-      shiftT(136);                  // 'following-sibling'
-      break;
-    case 137:                       // 'for'
-      shiftT(137);                  // 'for'
-      break;
-    case 146:                       // 'ge'
-      shiftT(146);                  // 'ge'
-      break;
-    case 148:                       // 'group'
-      shiftT(148);                  // 'group'
-      break;
-    case 150:                       // 'gt'
-      shiftT(150);                  // 'gt'
-      break;
-    case 151:                       // 'idiv'
-      shiftT(151);                  // 'idiv'
-      break;
-    case 153:                       // 'import'
-      shiftT(153);                  // 'import'
-      break;
-    case 159:                       // 'insert'
-      shiftT(159);                  // 'insert'
-      break;
-    case 160:                       // 'instance'
-      shiftT(160);                  // 'instance'
-      break;
-    case 162:                       // 'intersect'
-      shiftT(162);                  // 'intersect'
-      break;
-    case 163:                       // 'into'
-      shiftT(163);                  // 'into'
-      break;
-    case 164:                       // 'is'
-      shiftT(164);                  // 'is'
-      break;
-    case 170:                       // 'last'
-      shiftT(170);                  // 'last'
-      break;
-    case 172:                       // 'le'
-      shiftT(172);                  // 'le'
-      break;
-    case 174:                       // 'let'
-      shiftT(174);                  // 'let'
-      break;
-    case 178:                       // 'lt'
-      shiftT(178);                  // 'lt'
-      break;
-    case 180:                       // 'mod'
-      shiftT(180);                  // 'mod'
-      break;
-    case 181:                       // 'modify'
-      shiftT(181);                  // 'modify'
-      break;
-    case 182:                       // 'module'
-      shiftT(182);                  // 'module'
-      break;
-    case 184:                       // 'namespace'
-      shiftT(184);                  // 'namespace'
-      break;
-    case 186:                       // 'ne'
-      shiftT(186);                  // 'ne'
-      break;
-    case 198:                       // 'only'
-      shiftT(198);                  // 'only'
-      break;
-    case 200:                       // 'or'
-      shiftT(200);                  // 'or'
-      break;
-    case 201:                       // 'order'
-      shiftT(201);                  // 'order'
-      break;
-    case 202:                       // 'ordered'
-      shiftT(202);                  // 'ordered'
-      break;
-    case 206:                       // 'parent'
-      shiftT(206);                  // 'parent'
-      break;
-    case 212:                       // 'preceding'
-      shiftT(212);                  // 'preceding'
-      break;
-    case 213:                       // 'preceding-sibling'
-      shiftT(213);                  // 'preceding-sibling'
-      break;
-    case 218:                       // 'rename'
-      shiftT(218);                  // 'rename'
-      break;
-    case 219:                       // 'replace'
-      shiftT(219);                  // 'replace'
-      break;
-    case 220:                       // 'return'
-      shiftT(220);                  // 'return'
-      break;
-    case 224:                       // 'satisfies'
-      shiftT(224);                  // 'satisfies'
-      break;
-    case 229:                       // 'self'
-      shiftT(229);                  // 'self'
-      break;
-    case 235:                       // 'some'
-      shiftT(235);                  // 'some'
-      break;
-    case 236:                       // 'stable'
-      shiftT(236);                  // 'stable'
-      break;
-    case 237:                       // 'start'
-      shiftT(237);                  // 'start'
-      break;
-    case 248:                       // 'to'
-      shiftT(248);                  // 'to'
-      break;
-    case 249:                       // 'treat'
-      shiftT(249);                  // 'treat'
-      break;
-    case 250:                       // 'try'
-      shiftT(250);                  // 'try'
-      break;
-    case 254:                       // 'union'
-      shiftT(254);                  // 'union'
-      break;
-    case 256:                       // 'unordered'
-      shiftT(256);                  // 'unordered'
-      break;
-    case 260:                       // 'validate'
-      shiftT(260);                  // 'validate'
-      break;
-    case 266:                       // 'where'
-      shiftT(266);                  // 'where'
-      break;
-    case 270:                       // 'with'
-      shiftT(270);                  // 'with'
-      break;
-    case 274:                       // 'xquery'
-      shiftT(274);                  // 'xquery'
-      break;
-    case 72:                        // 'allowing'
-      shiftT(72);                   // 'allowing'
-      break;
-    case 81:                        // 'at'
-      shiftT(81);                   // 'at'
-      break;
-    case 83:                        // 'base-uri'
-      shiftT(83);                   // 'base-uri'
-      break;
-    case 85:                        // 'boundary-space'
-      shiftT(85);                   // 'boundary-space'
-      break;
-    case 86:                        // 'break'
-      shiftT(86);                   // 'break'
-      break;
-    case 91:                        // 'catch'
-      shiftT(91);                   // 'catch'
-      break;
-    case 98:                        // 'construction'
-      shiftT(98);                   // 'construction'
-      break;
-    case 101:                       // 'context'
-      shiftT(101);                  // 'context'
-      break;
-    case 102:                       // 'continue'
-      shiftT(102);                  // 'continue'
-      break;
-    case 104:                       // 'copy-namespaces'
-      shiftT(104);                  // 'copy-namespaces'
-      break;
-    case 106:                       // 'decimal-format'
-      shiftT(106);                  // 'decimal-format'
-      break;
-    case 125:                       // 'encoding'
-      shiftT(125);                  // 'encoding'
-      break;
-    case 132:                       // 'exit'
-      shiftT(132);                  // 'exit'
-      break;
-    case 133:                       // 'external'
-      shiftT(133);                  // 'external'
-      break;
-    case 141:                       // 'ft-option'
-      shiftT(141);                  // 'ft-option'
-      break;
-    case 154:                       // 'in'
-      shiftT(154);                  // 'in'
-      break;
-    case 155:                       // 'index'
-      shiftT(155);                  // 'index'
-      break;
-    case 161:                       // 'integrity'
-      shiftT(161);                  // 'integrity'
-      break;
-    case 171:                       // 'lax'
-      shiftT(171);                  // 'lax'
-      break;
-    case 192:                       // 'nodes'
-      shiftT(192);                  // 'nodes'
-      break;
-    case 199:                       // 'option'
-      shiftT(199);                  // 'option'
-      break;
-    case 203:                       // 'ordering'
-      shiftT(203);                  // 'ordering'
-      break;
-    case 222:                       // 'revalidation'
-      shiftT(222);                  // 'revalidation'
-      break;
-    case 225:                       // 'schema'
-      shiftT(225);                  // 'schema'
-      break;
-    case 228:                       // 'score'
-      shiftT(228);                  // 'score'
-      break;
-    case 234:                       // 'sliding'
-      shiftT(234);                  // 'sliding'
-      break;
-    case 240:                       // 'strict'
-      shiftT(240);                  // 'strict'
-      break;
-    case 251:                       // 'tumbling'
-      shiftT(251);                  // 'tumbling'
-      break;
-    case 252:                       // 'type'
-      shiftT(252);                  // 'type'
-      break;
-    case 257:                       // 'updating'
-      shiftT(257);                  // 'updating'
-      break;
-    case 261:                       // 'value'
-      shiftT(261);                  // 'value'
-      break;
-    case 262:                       // 'variable'
-      shiftT(262);                  // 'variable'
-      break;
-    case 263:                       // 'version'
-      shiftT(263);                  // 'version'
-      break;
-    case 267:                       // 'while'
-      shiftT(267);                  // 'while'
-      break;
-    case 97:                        // 'constraint'
-      shiftT(97);                   // 'constraint'
-      break;
-    case 176:                       // 'loop'
-      shiftT(176);                  // 'loop'
-      break;
-    case 221:                       // 'returning'
-      shiftT(221);                  // 'returning'
-      break;
-    case 194:                       // 'object'
-      shiftT(194);                  // 'object'
-      break;
-    case 167:                       // 'json-item'
-      shiftT(167);                  // 'json-item'
-      break;
-    default:
-      shiftT(78);                   // 'array'
-    }
-  }
-
-  function parse_NCName()
-  {
-    eventHandler.startNonterminal("NCName", e0);
-    switch (l1)
-    {
-    case 19:                        // NCName^Token
-      shift(19);                    // NCName^Token
-      break;
-    case 70:                        // 'after'
-      shift(70);                    // 'after'
-      break;
-    case 75:                        // 'and'
-      shift(75);                    // 'and'
-      break;
-    case 79:                        // 'as'
-      shift(79);                    // 'as'
-      break;
-    case 80:                        // 'ascending'
-      shift(80);                    // 'ascending'
-      break;
-    case 84:                        // 'before'
-      shift(84);                    // 'before'
-      break;
-    case 88:                        // 'case'
-      shift(88);                    // 'case'
-      break;
-    case 89:                        // 'cast'
-      shift(89);                    // 'cast'
-      break;
-    case 90:                        // 'castable'
-      shift(90);                    // 'castable'
-      break;
-    case 94:                        // 'collation'
-      shift(94);                    // 'collation'
-      break;
-    case 105:                       // 'count'
-      shift(105);                   // 'count'
-      break;
-    case 109:                       // 'default'
-      shift(109);                   // 'default'
-      break;
-    case 113:                       // 'descending'
-      shift(113);                   // 'descending'
-      break;
-    case 118:                       // 'div'
-      shift(118);                   // 'div'
-      break;
-    case 122:                       // 'else'
-      shift(122);                   // 'else'
-      break;
-    case 123:                       // 'empty'
-      shift(123);                   // 'empty'
-      break;
-    case 126:                       // 'end'
-      shift(126);                   // 'end'
-      break;
-    case 128:                       // 'eq'
-      shift(128);                   // 'eq'
-      break;
-    case 131:                       // 'except'
-      shift(131);                   // 'except'
-      break;
-    case 137:                       // 'for'
-      shift(137);                   // 'for'
-      break;
-    case 146:                       // 'ge'
-      shift(146);                   // 'ge'
-      break;
-    case 148:                       // 'group'
-      shift(148);                   // 'group'
-      break;
-    case 150:                       // 'gt'
-      shift(150);                   // 'gt'
-      break;
-    case 151:                       // 'idiv'
-      shift(151);                   // 'idiv'
-      break;
-    case 160:                       // 'instance'
-      shift(160);                   // 'instance'
-      break;
-    case 162:                       // 'intersect'
-      shift(162);                   // 'intersect'
-      break;
-    case 163:                       // 'into'
-      shift(163);                   // 'into'
-      break;
-    case 164:                       // 'is'
-      shift(164);                   // 'is'
-      break;
-    case 172:                       // 'le'
-      shift(172);                   // 'le'
-      break;
-    case 174:                       // 'let'
-      shift(174);                   // 'let'
-      break;
-    case 178:                       // 'lt'
-      shift(178);                   // 'lt'
-      break;
-    case 180:                       // 'mod'
-      shift(180);                   // 'mod'
-      break;
-    case 181:                       // 'modify'
-      shift(181);                   // 'modify'
-      break;
-    case 186:                       // 'ne'
-      shift(186);                   // 'ne'
-      break;
-    case 198:                       // 'only'
-      shift(198);                   // 'only'
-      break;
-    case 200:                       // 'or'
-      shift(200);                   // 'or'
-      break;
-    case 201:                       // 'order'
-      shift(201);                   // 'order'
-      break;
-    case 220:                       // 'return'
-      shift(220);                   // 'return'
-      break;
-    case 224:                       // 'satisfies'
-      shift(224);                   // 'satisfies'
-      break;
-    case 236:                       // 'stable'
-      shift(236);                   // 'stable'
-      break;
-    case 237:                       // 'start'
-      shift(237);                   // 'start'
-      break;
-    case 248:                       // 'to'
-      shift(248);                   // 'to'
-      break;
-    case 249:                       // 'treat'
-      shift(249);                   // 'treat'
-      break;
-    case 254:                       // 'union'
-      shift(254);                   // 'union'
-      break;
-    case 266:                       // 'where'
-      shift(266);                   // 'where'
-      break;
-    case 270:                       // 'with'
-      shift(270);                   // 'with'
-      break;
-    case 73:                        // 'ancestor'
-      shift(73);                    // 'ancestor'
-      break;
-    case 74:                        // 'ancestor-or-self'
-      shift(74);                    // 'ancestor-or-self'
-      break;
-    case 82:                        // 'attribute'
-      shift(82);                    // 'attribute'
-      break;
-    case 93:                        // 'child'
-      shift(93);                    // 'child'
-      break;
-    case 96:                        // 'comment'
-      shift(96);                    // 'comment'
-      break;
-    case 103:                       // 'copy'
-      shift(103);                   // 'copy'
-      break;
-    case 108:                       // 'declare'
-      shift(108);                   // 'declare'
-      break;
-    case 110:                       // 'delete'
-      shift(110);                   // 'delete'
-      break;
-    case 111:                       // 'descendant'
-      shift(111);                   // 'descendant'
-      break;
-    case 112:                       // 'descendant-or-self'
-      shift(112);                   // 'descendant-or-self'
-      break;
-    case 119:                       // 'document'
-      shift(119);                   // 'document'
-      break;
-    case 120:                       // 'document-node'
-      shift(120);                   // 'document-node'
-      break;
-    case 121:                       // 'element'
-      shift(121);                   // 'element'
-      break;
-    case 124:                       // 'empty-sequence'
-      shift(124);                   // 'empty-sequence'
-      break;
-    case 129:                       // 'every'
-      shift(129);                   // 'every'
-      break;
-    case 134:                       // 'first'
-      shift(134);                   // 'first'
-      break;
-    case 135:                       // 'following'
-      shift(135);                   // 'following'
-      break;
-    case 136:                       // 'following-sibling'
-      shift(136);                   // 'following-sibling'
-      break;
-    case 145:                       // 'function'
-      shift(145);                   // 'function'
-      break;
-    case 152:                       // 'if'
-      shift(152);                   // 'if'
-      break;
-    case 153:                       // 'import'
-      shift(153);                   // 'import'
-      break;
-    case 159:                       // 'insert'
-      shift(159);                   // 'insert'
-      break;
-    case 165:                       // 'item'
-      shift(165);                   // 'item'
-      break;
-    case 170:                       // 'last'
-      shift(170);                   // 'last'
-      break;
-    case 182:                       // 'module'
-      shift(182);                   // 'module'
-      break;
-    case 184:                       // 'namespace'
-      shift(184);                   // 'namespace'
-      break;
-    case 185:                       // 'namespace-node'
-      shift(185);                   // 'namespace-node'
-      break;
-    case 191:                       // 'node'
-      shift(191);                   // 'node'
-      break;
-    case 202:                       // 'ordered'
-      shift(202);                   // 'ordered'
-      break;
-    case 206:                       // 'parent'
-      shift(206);                   // 'parent'
-      break;
-    case 212:                       // 'preceding'
-      shift(212);                   // 'preceding'
-      break;
-    case 213:                       // 'preceding-sibling'
-      shift(213);                   // 'preceding-sibling'
-      break;
-    case 216:                       // 'processing-instruction'
-      shift(216);                   // 'processing-instruction'
-      break;
-    case 218:                       // 'rename'
-      shift(218);                   // 'rename'
-      break;
-    case 219:                       // 'replace'
-      shift(219);                   // 'replace'
-      break;
-    case 226:                       // 'schema-attribute'
-      shift(226);                   // 'schema-attribute'
-      break;
-    case 227:                       // 'schema-element'
-      shift(227);                   // 'schema-element'
-      break;
-    case 229:                       // 'self'
-      shift(229);                   // 'self'
-      break;
-    case 235:                       // 'some'
-      shift(235);                   // 'some'
-      break;
-    case 243:                       // 'switch'
-      shift(243);                   // 'switch'
-      break;
-    case 244:                       // 'text'
-      shift(244);                   // 'text'
-      break;
-    case 250:                       // 'try'
-      shift(250);                   // 'try'
-      break;
-    case 253:                       // 'typeswitch'
-      shift(253);                   // 'typeswitch'
-      break;
-    case 256:                       // 'unordered'
-      shift(256);                   // 'unordered'
-      break;
-    case 260:                       // 'validate'
-      shift(260);                   // 'validate'
-      break;
-    case 262:                       // 'variable'
-      shift(262);                   // 'variable'
-      break;
-    case 274:                       // 'xquery'
-      shift(274);                   // 'xquery'
-      break;
-    case 72:                        // 'allowing'
-      shift(72);                    // 'allowing'
-      break;
-    case 81:                        // 'at'
-      shift(81);                    // 'at'
-      break;
-    case 83:                        // 'base-uri'
-      shift(83);                    // 'base-uri'
-      break;
-    case 85:                        // 'boundary-space'
-      shift(85);                    // 'boundary-space'
-      break;
-    case 86:                        // 'break'
-      shift(86);                    // 'break'
-      break;
-    case 91:                        // 'catch'
-      shift(91);                    // 'catch'
-      break;
-    case 98:                        // 'construction'
-      shift(98);                    // 'construction'
-      break;
-    case 101:                       // 'context'
-      shift(101);                   // 'context'
-      break;
-    case 102:                       // 'continue'
-      shift(102);                   // 'continue'
-      break;
-    case 104:                       // 'copy-namespaces'
-      shift(104);                   // 'copy-namespaces'
-      break;
-    case 106:                       // 'decimal-format'
-      shift(106);                   // 'decimal-format'
-      break;
-    case 125:                       // 'encoding'
-      shift(125);                   // 'encoding'
-      break;
-    case 132:                       // 'exit'
-      shift(132);                   // 'exit'
-      break;
-    case 133:                       // 'external'
-      shift(133);                   // 'external'
-      break;
-    case 141:                       // 'ft-option'
-      shift(141);                   // 'ft-option'
-      break;
-    case 154:                       // 'in'
-      shift(154);                   // 'in'
-      break;
-    case 155:                       // 'index'
-      shift(155);                   // 'index'
-      break;
-    case 161:                       // 'integrity'
-      shift(161);                   // 'integrity'
-      break;
-    case 171:                       // 'lax'
-      shift(171);                   // 'lax'
-      break;
-    case 192:                       // 'nodes'
-      shift(192);                   // 'nodes'
-      break;
-    case 199:                       // 'option'
-      shift(199);                   // 'option'
-      break;
-    case 203:                       // 'ordering'
-      shift(203);                   // 'ordering'
-      break;
-    case 222:                       // 'revalidation'
-      shift(222);                   // 'revalidation'
-      break;
-    case 225:                       // 'schema'
-      shift(225);                   // 'schema'
-      break;
-    case 228:                       // 'score'
-      shift(228);                   // 'score'
-      break;
-    case 234:                       // 'sliding'
-      shift(234);                   // 'sliding'
-      break;
-    case 240:                       // 'strict'
-      shift(240);                   // 'strict'
-      break;
-    case 251:                       // 'tumbling'
-      shift(251);                   // 'tumbling'
-      break;
-    case 252:                       // 'type'
-      shift(252);                   // 'type'
-      break;
-    case 257:                       // 'updating'
-      shift(257);                   // 'updating'
-      break;
-    case 261:                       // 'value'
-      shift(261);                   // 'value'
-      break;
-    case 263:                       // 'version'
-      shift(263);                   // 'version'
-      break;
-    case 267:                       // 'while'
-      shift(267);                   // 'while'
-      break;
-    case 97:                        // 'constraint'
-      shift(97);                    // 'constraint'
-      break;
-    case 176:                       // 'loop'
-      shift(176);                   // 'loop'
-      break;
-    default:
-      shift(221);                   // 'returning'
-    }
-    eventHandler.endNonterminal("NCName", e0);
-  }
-
-  function try_NCName()
-  {
-    switch (l1)
-    {
-    case 19:                        // NCName^Token
-      shiftT(19);                   // NCName^Token
-      break;
-    case 70:                        // 'after'
-      shiftT(70);                   // 'after'
-      break;
-    case 75:                        // 'and'
-      shiftT(75);                   // 'and'
-      break;
-    case 79:                        // 'as'
-      shiftT(79);                   // 'as'
-      break;
-    case 80:                        // 'ascending'
-      shiftT(80);                   // 'ascending'
-      break;
-    case 84:                        // 'before'
-      shiftT(84);                   // 'before'
-      break;
-    case 88:                        // 'case'
-      shiftT(88);                   // 'case'
-      break;
-    case 89:                        // 'cast'
-      shiftT(89);                   // 'cast'
-      break;
-    case 90:                        // 'castable'
-      shiftT(90);                   // 'castable'
-      break;
-    case 94:                        // 'collation'
-      shiftT(94);                   // 'collation'
-      break;
-    case 105:                       // 'count'
-      shiftT(105);                  // 'count'
-      break;
-    case 109:                       // 'default'
-      shiftT(109);                  // 'default'
-      break;
-    case 113:                       // 'descending'
-      shiftT(113);                  // 'descending'
-      break;
-    case 118:                       // 'div'
-      shiftT(118);                  // 'div'
-      break;
-    case 122:                       // 'else'
-      shiftT(122);                  // 'else'
-      break;
-    case 123:                       // 'empty'
-      shiftT(123);                  // 'empty'
-      break;
-    case 126:                       // 'end'
-      shiftT(126);                  // 'end'
-      break;
-    case 128:                       // 'eq'
-      shiftT(128);                  // 'eq'
-      break;
-    case 131:                       // 'except'
-      shiftT(131);                  // 'except'
-      break;
-    case 137:                       // 'for'
-      shiftT(137);                  // 'for'
-      break;
-    case 146:                       // 'ge'
-      shiftT(146);                  // 'ge'
-      break;
-    case 148:                       // 'group'
-      shiftT(148);                  // 'group'
-      break;
-    case 150:                       // 'gt'
-      shiftT(150);                  // 'gt'
-      break;
-    case 151:                       // 'idiv'
-      shiftT(151);                  // 'idiv'
-      break;
-    case 160:                       // 'instance'
-      shiftT(160);                  // 'instance'
-      break;
-    case 162:                       // 'intersect'
-      shiftT(162);                  // 'intersect'
-      break;
-    case 163:                       // 'into'
-      shiftT(163);                  // 'into'
-      break;
-    case 164:                       // 'is'
-      shiftT(164);                  // 'is'
-      break;
-    case 172:                       // 'le'
-      shiftT(172);                  // 'le'
-      break;
-    case 174:                       // 'let'
-      shiftT(174);                  // 'let'
-      break;
-    case 178:                       // 'lt'
-      shiftT(178);                  // 'lt'
-      break;
-    case 180:                       // 'mod'
-      shiftT(180);                  // 'mod'
-      break;
-    case 181:                       // 'modify'
-      shiftT(181);                  // 'modify'
-      break;
-    case 186:                       // 'ne'
-      shiftT(186);                  // 'ne'
-      break;
-    case 198:                       // 'only'
-      shiftT(198);                  // 'only'
-      break;
-    case 200:                       // 'or'
-      shiftT(200);                  // 'or'
-      break;
-    case 201:                       // 'order'
-      shiftT(201);                  // 'order'
-      break;
-    case 220:                       // 'return'
-      shiftT(220);                  // 'return'
-      break;
-    case 224:                       // 'satisfies'
-      shiftT(224);                  // 'satisfies'
-      break;
-    case 236:                       // 'stable'
-      shiftT(236);                  // 'stable'
-      break;
-    case 237:                       // 'start'
-      shiftT(237);                  // 'start'
-      break;
-    case 248:                       // 'to'
-      shiftT(248);                  // 'to'
-      break;
-    case 249:                       // 'treat'
-      shiftT(249);                  // 'treat'
-      break;
-    case 254:                       // 'union'
-      shiftT(254);                  // 'union'
-      break;
-    case 266:                       // 'where'
-      shiftT(266);                  // 'where'
-      break;
-    case 270:                       // 'with'
-      shiftT(270);                  // 'with'
-      break;
-    case 73:                        // 'ancestor'
-      shiftT(73);                   // 'ancestor'
-      break;
-    case 74:                        // 'ancestor-or-self'
-      shiftT(74);                   // 'ancestor-or-self'
-      break;
-    case 82:                        // 'attribute'
-      shiftT(82);                   // 'attribute'
-      break;
-    case 93:                        // 'child'
-      shiftT(93);                   // 'child'
-      break;
-    case 96:                        // 'comment'
-      shiftT(96);                   // 'comment'
-      break;
-    case 103:                       // 'copy'
-      shiftT(103);                  // 'copy'
-      break;
-    case 108:                       // 'declare'
-      shiftT(108);                  // 'declare'
-      break;
-    case 110:                       // 'delete'
-      shiftT(110);                  // 'delete'
-      break;
-    case 111:                       // 'descendant'
-      shiftT(111);                  // 'descendant'
-      break;
-    case 112:                       // 'descendant-or-self'
-      shiftT(112);                  // 'descendant-or-self'
-      break;
-    case 119:                       // 'document'
-      shiftT(119);                  // 'document'
-      break;
-    case 120:                       // 'document-node'
-      shiftT(120);                  // 'document-node'
-      break;
-    case 121:                       // 'element'
-      shiftT(121);                  // 'element'
-      break;
-    case 124:                       // 'empty-sequence'
-      shiftT(124);                  // 'empty-sequence'
-      break;
-    case 129:                       // 'every'
-      shiftT(129);                  // 'every'
-      break;
-    case 134:                       // 'first'
-      shiftT(134);                  // 'first'
-      break;
-    case 135:                       // 'following'
-      shiftT(135);                  // 'following'
-      break;
-    case 136:                       // 'following-sibling'
-      shiftT(136);                  // 'following-sibling'
-      break;
-    case 145:                       // 'function'
-      shiftT(145);                  // 'function'
-      break;
-    case 152:                       // 'if'
-      shiftT(152);                  // 'if'
-      break;
-    case 153:                       // 'import'
-      shiftT(153);                  // 'import'
-      break;
-    case 159:                       // 'insert'
-      shiftT(159);                  // 'insert'
-      break;
-    case 165:                       // 'item'
-      shiftT(165);                  // 'item'
-      break;
-    case 170:                       // 'last'
-      shiftT(170);                  // 'last'
-      break;
-    case 182:                       // 'module'
-      shiftT(182);                  // 'module'
-      break;
-    case 184:                       // 'namespace'
-      shiftT(184);                  // 'namespace'
-      break;
-    case 185:                       // 'namespace-node'
-      shiftT(185);                  // 'namespace-node'
-      break;
-    case 191:                       // 'node'
-      shiftT(191);                  // 'node'
-      break;
-    case 202:                       // 'ordered'
-      shiftT(202);                  // 'ordered'
-      break;
-    case 206:                       // 'parent'
-      shiftT(206);                  // 'parent'
-      break;
-    case 212:                       // 'preceding'
-      shiftT(212);                  // 'preceding'
-      break;
-    case 213:                       // 'preceding-sibling'
-      shiftT(213);                  // 'preceding-sibling'
-      break;
-    case 216:                       // 'processing-instruction'
-      shiftT(216);                  // 'processing-instruction'
-      break;
-    case 218:                       // 'rename'
-      shiftT(218);                  // 'rename'
-      break;
-    case 219:                       // 'replace'
-      shiftT(219);                  // 'replace'
-      break;
-    case 226:                       // 'schema-attribute'
-      shiftT(226);                  // 'schema-attribute'
-      break;
-    case 227:                       // 'schema-element'
-      shiftT(227);                  // 'schema-element'
-      break;
-    case 229:                       // 'self'
-      shiftT(229);                  // 'self'
-      break;
-    case 235:                       // 'some'
-      shiftT(235);                  // 'some'
-      break;
-    case 243:                       // 'switch'
-      shiftT(243);                  // 'switch'
-      break;
-    case 244:                       // 'text'
-      shiftT(244);                  // 'text'
-      break;
-    case 250:                       // 'try'
-      shiftT(250);                  // 'try'
-      break;
-    case 253:                       // 'typeswitch'
-      shiftT(253);                  // 'typeswitch'
-      break;
-    case 256:                       // 'unordered'
-      shiftT(256);                  // 'unordered'
-      break;
-    case 260:                       // 'validate'
-      shiftT(260);                  // 'validate'
-      break;
-    case 262:                       // 'variable'
-      shiftT(262);                  // 'variable'
-      break;
-    case 274:                       // 'xquery'
-      shiftT(274);                  // 'xquery'
-      break;
-    case 72:                        // 'allowing'
-      shiftT(72);                   // 'allowing'
-      break;
-    case 81:                        // 'at'
-      shiftT(81);                   // 'at'
-      break;
-    case 83:                        // 'base-uri'
-      shiftT(83);                   // 'base-uri'
-      break;
-    case 85:                        // 'boundary-space'
-      shiftT(85);                   // 'boundary-space'
-      break;
-    case 86:                        // 'break'
-      shiftT(86);                   // 'break'
-      break;
-    case 91:                        // 'catch'
-      shiftT(91);                   // 'catch'
-      break;
-    case 98:                        // 'construction'
-      shiftT(98);                   // 'construction'
-      break;
-    case 101:                       // 'context'
-      shiftT(101);                  // 'context'
-      break;
-    case 102:                       // 'continue'
-      shiftT(102);                  // 'continue'
-      break;
-    case 104:                       // 'copy-namespaces'
-      shiftT(104);                  // 'copy-namespaces'
-      break;
-    case 106:                       // 'decimal-format'
-      shiftT(106);                  // 'decimal-format'
-      break;
-    case 125:                       // 'encoding'
-      shiftT(125);                  // 'encoding'
-      break;
-    case 132:                       // 'exit'
-      shiftT(132);                  // 'exit'
-      break;
-    case 133:                       // 'external'
-      shiftT(133);                  // 'external'
-      break;
-    case 141:                       // 'ft-option'
-      shiftT(141);                  // 'ft-option'
-      break;
-    case 154:                       // 'in'
-      shiftT(154);                  // 'in'
-      break;
-    case 155:                       // 'index'
-      shiftT(155);                  // 'index'
-      break;
-    case 161:                       // 'integrity'
-      shiftT(161);                  // 'integrity'
-      break;
-    case 171:                       // 'lax'
-      shiftT(171);                  // 'lax'
-      break;
-    case 192:                       // 'nodes'
-      shiftT(192);                  // 'nodes'
-      break;
-    case 199:                       // 'option'
-      shiftT(199);                  // 'option'
-      break;
-    case 203:                       // 'ordering'
-      shiftT(203);                  // 'ordering'
-      break;
-    case 222:                       // 'revalidation'
-      shiftT(222);                  // 'revalidation'
-      break;
-    case 225:                       // 'schema'
-      shiftT(225);                  // 'schema'
-      break;
-    case 228:                       // 'score'
-      shiftT(228);                  // 'score'
-      break;
-    case 234:                       // 'sliding'
-      shiftT(234);                  // 'sliding'
-      break;
-    case 240:                       // 'strict'
-      shiftT(240);                  // 'strict'
-      break;
-    case 251:                       // 'tumbling'
-      shiftT(251);                  // 'tumbling'
-      break;
-    case 252:                       // 'type'
-      shiftT(252);                  // 'type'
-      break;
-    case 257:                       // 'updating'
-      shiftT(257);                  // 'updating'
-      break;
-    case 261:                       // 'value'
-      shiftT(261);                  // 'value'
-      break;
-    case 263:                       // 'version'
-      shiftT(263);                  // 'version'
-      break;
-    case 267:                       // 'while'
-      shiftT(267);                  // 'while'
-      break;
-    case 97:                        // 'constraint'
-      shiftT(97);                   // 'constraint'
-      break;
-    case 176:                       // 'loop'
-      shiftT(176);                  // 'loop'
-      break;
-    default:
-      shiftT(221);                  // 'returning'
-    }
-  }
-
-  function parse_MainModule()
-  {
-    eventHandler.startNonterminal("MainModule", e0);
-    parse_Prolog();
-    whitespace();
-    parse_Program();
-    eventHandler.endNonterminal("MainModule", e0);
-  }
-
-  function parse_Program()
-  {
-    eventHandler.startNonterminal("Program", e0);
-    parse_StatementsAndOptionalExpr();
-    eventHandler.endNonterminal("Program", e0);
-  }
-
-  function parse_Statements()
-  {
-    eventHandler.startNonterminal("Statements", e0);
-    for (;;)
-    {
-      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 34:                      // '('
-        lookahead2W(269);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 35:                      // '(#'
-        lookahead2(250);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |
-        break;
-      case 46:                      // '/'
-        lookahead2W(281);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 47:                      // '//'
-        lookahead2W(263);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 54:                      // '<'
-        lookahead2(4);              // QName
-        break;
-      case 55:                      // '<!--'
-        lookahead2(1);              // DirCommentContents
-        break;
-      case 59:                      // '<?'
-        lookahead2(3);              // PITarget
-        break;
-      case 66:                      // '@'
-        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        break;
-      case 68:                      // '['
-        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 77:                      // 'append'
-        lookahead2W(56);            // S^WS | '(:' | 'json'
-        break;
-      case 82:                      // 'attribute'
-        lookahead2W(278);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |
-        break;
-      case 121:                     // 'element'
-        lookahead2W(277);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |
-        break;
-      case 132:                     // 'exit'
-        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 137:                     // 'for'
-        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      case 174:                     // 'let'
-        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      case 218:                     // 'rename'
-        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 219:                     // 'replace'
-        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 260:                     // 'validate'
-        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 276:                     // '{'
-        lookahead2W(273);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 278:                     // '{|'
-        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 5:                       // Wildcard
-      case 45:                      // '..'
-        lookahead2W(186);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |
-        break;
-      case 31:                      // '$'
-      case 32:                      // '%'
-        lookahead2W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        break;
-      case 40:                      // '+'
-      case 42:                      // '-'
-        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 86:                      // 'break'
-      case 102:                     // 'continue'
-        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 110:                     // 'delete'
-      case 159:                     // 'insert'
-        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 124:                     // 'empty-sequence'
-      case 165:                     // 'item'
-        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |
-        break;
-      case 184:                     // 'namespace'
-      case 216:                     // 'processing-instruction'
-        lookahead2W(266);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |
-        break;
-      case 103:                     // 'copy'
-      case 129:                     // 'every'
-      case 235:                     // 'some'
-      case 262:                     // 'variable'
-        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      case 8:                       // IntegerLiteral
-      case 9:                       // DecimalLiteral
-      case 10:                      // DoubleLiteral
-      case 11:                      // StringLiteral
-      case 44:                      // '.'
-        lookahead2W(192);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |
-        break;
-      case 96:                      // 'comment'
-      case 119:                     // 'document'
-      case 202:                     // 'ordered'
-      case 244:                     // 'text'
-      case 250:                     // 'try'
-      case 256:                     // 'unordered'
-        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 73:                      // 'ancestor'
-      case 74:                      // 'ancestor-or-self'
-      case 93:                      // 'child'
-      case 111:                     // 'descendant'
-      case 112:                     // 'descendant-or-self'
-      case 135:                     // 'following'
-      case 136:                     // 'following-sibling'
-      case 206:                     // 'parent'
-      case 212:                     // 'preceding'
-      case 213:                     // 'preceding-sibling'
-      case 229:                     // 'self'
-        lookahead2W(198);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 6:                       // EQName^Token
-      case 70:                      // 'after'
-      case 72:                      // 'allowing'
-      case 75:                      // 'and'
-      case 78:                      // 'array'
-      case 79:                      // 'as'
-      case 80:                      // 'ascending'
-      case 81:                      // 'at'
-      case 83:                      // 'base-uri'
-      case 84:                      // 'before'
-      case 85:                      // 'boundary-space'
-      case 88:                      // 'case'
-      case 89:                      // 'cast'
-      case 90:                      // 'castable'
-      case 91:                      // 'catch'
-      case 94:                      // 'collation'
-      case 97:                      // 'constraint'
-      case 98:                      // 'construction'
-      case 101:                     // 'context'
-      case 104:                     // 'copy-namespaces'
-      case 105:                     // 'count'
-      case 106:                     // 'decimal-format'
-      case 108:                     // 'declare'
-      case 109:                     // 'default'
-      case 113:                     // 'descending'
-      case 118:                     // 'div'
-      case 120:                     // 'document-node'
-      case 122:                     // 'else'
-      case 123:                     // 'empty'
-      case 125:                     // 'encoding'
-      case 126:                     // 'end'
-      case 128:                     // 'eq'
-      case 131:                     // 'except'
-      case 133:                     // 'external'
-      case 134:                     // 'first'
-      case 141:                     // 'ft-option'
-      case 145:                     // 'function'
-      case 146:                     // 'ge'
-      case 148:                     // 'group'
-      case 150:                     // 'gt'
-      case 151:                     // 'idiv'
-      case 152:                     // 'if'
-      case 153:                     // 'import'
-      case 154:                     // 'in'
-      case 155:                     // 'index'
-      case 160:                     // 'instance'
-      case 161:                     // 'integrity'
-      case 162:                     // 'intersect'
-      case 163:                     // 'into'
-      case 164:                     // 'is'
-      case 167:                     // 'json-item'
-      case 170:                     // 'last'
-      case 171:                     // 'lax'
-      case 172:                     // 'le'
-      case 176:                     // 'loop'
-      case 178:                     // 'lt'
-      case 180:                     // 'mod'
-      case 181:                     // 'modify'
-      case 182:                     // 'module'
-      case 185:                     // 'namespace-node'
-      case 186:                     // 'ne'
-      case 191:                     // 'node'
-      case 192:                     // 'nodes'
-      case 194:                     // 'object'
-      case 198:                     // 'only'
-      case 199:                     // 'option'
-      case 200:                     // 'or'
-      case 201:                     // 'order'
-      case 203:                     // 'ordering'
-      case 220:                     // 'return'
-      case 221:                     // 'returning'
-      case 222:                     // 'revalidation'
-      case 224:                     // 'satisfies'
-      case 225:                     // 'schema'
-      case 226:                     // 'schema-attribute'
-      case 227:                     // 'schema-element'
-      case 228:                     // 'score'
-      case 234:                     // 'sliding'
-      case 236:                     // 'stable'
-      case 237:                     // 'start'
-      case 240:                     // 'strict'
-      case 243:                     // 'switch'
-      case 248:                     // 'to'
-      case 249:                     // 'treat'
-      case 251:                     // 'tumbling'
-      case 252:                     // 'type'
-      case 253:                     // 'typeswitch'
-      case 254:                     // 'union'
-      case 257:                     // 'updating'
-      case 261:                     // 'value'
-      case 263:                     // 'version'
-      case 266:                     // 'where'
-      case 267:                     // 'while'
-      case 270:                     // 'with'
-      case 274:                     // 'xquery'
-        lookahead2W(195);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 25                  // EOF
-       && lk != 282                 // '}'
-       && lk != 12805               // Wildcard EOF
-       && lk != 12806               // EQName^Token EOF
-       && lk != 12808               // IntegerLiteral EOF
-       && lk != 12809               // DecimalLiteral EOF
-       && lk != 12810               // DoubleLiteral EOF
-       && lk != 12811               // StringLiteral EOF
-       && lk != 12844               // '.' EOF
-       && lk != 12845               // '..' EOF
-       && lk != 12846               // '/' EOF
-       && lk != 12870               // 'after' EOF
-       && lk != 12872               // 'allowing' EOF
-       && lk != 12873               // 'ancestor' EOF
-       && lk != 12874               // 'ancestor-or-self' EOF
-       && lk != 12875               // 'and' EOF
-       && lk != 12878               // 'array' EOF
-       && lk != 12879               // 'as' EOF
-       && lk != 12880               // 'ascending' EOF
-       && lk != 12881               // 'at' EOF
-       && lk != 12882               // 'attribute' EOF
-       && lk != 12883               // 'base-uri' EOF
-       && lk != 12884               // 'before' EOF
-       && lk != 12885               // 'boundary-space' EOF
-       && lk != 12886               // 'break' EOF
-       && lk != 12888               // 'case' EOF
-       && lk != 12889               // 'cast' EOF
-       && lk != 12890               // 'castable' EOF
-       && lk != 12891               // 'catch' EOF
-       && lk != 12893               // 'child' EOF
-       && lk != 12894               // 'collation' EOF
-       && lk != 12896               // 'comment' EOF
-       && lk != 12897               // 'constraint' EOF
-       && lk != 12898               // 'construction' EOF
-       && lk != 12901               // 'context' EOF
-       && lk != 12902               // 'continue' EOF
-       && lk != 12903               // 'copy' EOF
-       && lk != 12904               // 'copy-namespaces' EOF
-       && lk != 12905               // 'count' EOF
-       && lk != 12906               // 'decimal-format' EOF
-       && lk != 12908               // 'declare' EOF
-       && lk != 12909               // 'default' EOF
-       && lk != 12910               // 'delete' EOF
-       && lk != 12911               // 'descendant' EOF
-       && lk != 12912               // 'descendant-or-self' EOF
-       && lk != 12913               // 'descending' EOF
-       && lk != 12918               // 'div' EOF
-       && lk != 12919               // 'document' EOF
-       && lk != 12920               // 'document-node' EOF
-       && lk != 12921               // 'element' EOF
-       && lk != 12922               // 'else' EOF
-       && lk != 12923               // 'empty' EOF
-       && lk != 12924               // 'empty-sequence' EOF
-       && lk != 12925               // 'encoding' EOF
-       && lk != 12926               // 'end' EOF
-       && lk != 12928               // 'eq' EOF
-       && lk != 12929               // 'every' EOF
-       && lk != 12931               // 'except' EOF
-       && lk != 12932               // 'exit' EOF
-       && lk != 12933               // 'external' EOF
-       && lk != 12934               // 'first' EOF
-       && lk != 12935               // 'following' EOF
-       && lk != 12936               // 'following-sibling' EOF
-       && lk != 12937               // 'for' EOF
-       && lk != 12941               // 'ft-option' EOF
-       && lk != 12945               // 'function' EOF
-       && lk != 12946               // 'ge' EOF
-       && lk != 12948               // 'group' EOF
-       && lk != 12950               // 'gt' EOF
-       && lk != 12951               // 'idiv' EOF
-       && lk != 12952               // 'if' EOF
-       && lk != 12953               // 'import' EOF
-       && lk != 12954               // 'in' EOF
-       && lk != 12955               // 'index' EOF
-       && lk != 12959               // 'insert' EOF
-       && lk != 12960               // 'instance' EOF
-       && lk != 12961               // 'integrity' EOF
-       && lk != 12962               // 'intersect' EOF
-       && lk != 12963               // 'into' EOF
-       && lk != 12964               // 'is' EOF
-       && lk != 12965               // 'item' EOF
-       && lk != 12967               // 'json-item' EOF
-       && lk != 12970               // 'last' EOF
-       && lk != 12971               // 'lax' EOF
-       && lk != 12972               // 'le' EOF
-       && lk != 12974               // 'let' EOF
-       && lk != 12976               // 'loop' EOF
-       && lk != 12978               // 'lt' EOF
-       && lk != 12980               // 'mod' EOF
-       && lk != 12981               // 'modify' EOF
-       && lk != 12982               // 'module' EOF
-       && lk != 12984               // 'namespace' EOF
-       && lk != 12985               // 'namespace-node' EOF
-       && lk != 12986               // 'ne' EOF
-       && lk != 12991               // 'node' EOF
-       && lk != 12992               // 'nodes' EOF
-       && lk != 12994               // 'object' EOF
-       && lk != 12998               // 'only' EOF
-       && lk != 12999               // 'option' EOF
-       && lk != 13000               // 'or' EOF
-       && lk != 13001               // 'order' EOF
-       && lk != 13002               // 'ordered' EOF
-       && lk != 13003               // 'ordering' EOF
-       && lk != 13006               // 'parent' EOF
-       && lk != 13012               // 'preceding' EOF
-       && lk != 13013               // 'preceding-sibling' EOF
-       && lk != 13016               // 'processing-instruction' EOF
-       && lk != 13018               // 'rename' EOF
-       && lk != 13019               // 'replace' EOF
-       && lk != 13020               // 'return' EOF
-       && lk != 13021               // 'returning' EOF
-       && lk != 13022               // 'revalidation' EOF
-       && lk != 13024               // 'satisfies' EOF
-       && lk != 13025               // 'schema' EOF
-       && lk != 13026               // 'schema-attribute' EOF
-       && lk != 13027               // 'schema-element' EOF
-       && lk != 13028               // 'score' EOF
-       && lk != 13029               // 'self' EOF
-       && lk != 13034               // 'sliding' EOF
-       && lk != 13035               // 'some' EOF
-       && lk != 13036               // 'stable' EOF
-       && lk != 13037               // 'start' EOF
-       && lk != 13040               // 'strict' EOF
-       && lk != 13043               // 'switch' EOF
-       && lk != 13044               // 'text' EOF
-       && lk != 13048               // 'to' EOF
-       && lk != 13049               // 'treat' EOF
-       && lk != 13050               // 'try' EOF
-       && lk != 13051               // 'tumbling' EOF
-       && lk != 13052               // 'type' EOF
-       && lk != 13053               // 'typeswitch' EOF
-       && lk != 13054               // 'union' EOF
-       && lk != 13056               // 'unordered' EOF
-       && lk != 13057               // 'updating' EOF
-       && lk != 13060               // 'validate' EOF
-       && lk != 13061               // 'value' EOF
-       && lk != 13062               // 'variable' EOF
-       && lk != 13063               // 'version' EOF
-       && lk != 13066               // 'where' EOF
-       && lk != 13067               // 'while' EOF
-       && lk != 13070               // 'with' EOF
-       && lk != 13074               // 'xquery' EOF
-       && lk != 16134               // 'variable' '$'
-       && lk != 20997               // Wildcard ','
-       && lk != 20998               // EQName^Token ','
-       && lk != 21000               // IntegerLiteral ','
-       && lk != 21001               // DecimalLiteral ','
-       && lk != 21002               // DoubleLiteral ','
-       && lk != 21003               // StringLiteral ','
-       && lk != 21036               // '.' ','
-       && lk != 21037               // '..' ','
-       && lk != 21038               // '/' ','
-       && lk != 21062               // 'after' ','
-       && lk != 21064               // 'allowing' ','
-       && lk != 21065               // 'ancestor' ','
-       && lk != 21066               // 'ancestor-or-self' ','
-       && lk != 21067               // 'and' ','
-       && lk != 21070               // 'array' ','
-       && lk != 21071               // 'as' ','
-       && lk != 21072               // 'ascending' ','
-       && lk != 21073               // 'at' ','
-       && lk != 21074               // 'attribute' ','
-       && lk != 21075               // 'base-uri' ','
-       && lk != 21076               // 'before' ','
-       && lk != 21077               // 'boundary-space' ','
-       && lk != 21078               // 'break' ','
-       && lk != 21080               // 'case' ','
-       && lk != 21081               // 'cast' ','
-       && lk != 21082               // 'castable' ','
-       && lk != 21083               // 'catch' ','
-       && lk != 21085               // 'child' ','
-       && lk != 21086               // 'collation' ','
-       && lk != 21088               // 'comment' ','
-       && lk != 21089               // 'constraint' ','
-       && lk != 21090               // 'construction' ','
-       && lk != 21093               // 'context' ','
-       && lk != 21094               // 'continue' ','
-       && lk != 21095               // 'copy' ','
-       && lk != 21096               // 'copy-namespaces' ','
-       && lk != 21097               // 'count' ','
-       && lk != 21098               // 'decimal-format' ','
-       && lk != 21100               // 'declare' ','
-       && lk != 21101               // 'default' ','
-       && lk != 21102               // 'delete' ','
-       && lk != 21103               // 'descendant' ','
-       && lk != 21104               // 'descendant-or-self' ','
-       && lk != 21105               // 'descending' ','
-       && lk != 21110               // 'div' ','
-       && lk != 21111               // 'document' ','
-       && lk != 21112               // 'document-node' ','
-       && lk != 21113               // 'element' ','
-       && lk != 21114               // 'else' ','
-       && lk != 21115               // 'empty' ','
-       && lk != 21116               // 'empty-sequence' ','
-       && lk != 21117               // 'encoding' ','
-       && lk != 21118               // 'end' ','
-       && lk != 21120               // 'eq' ','
-       && lk != 21121               // 'every' ','
-       && lk != 21123               // 'except' ','
-       && lk != 21124               // 'exit' ','
-       && lk != 21125               // 'external' ','
-       && lk != 21126               // 'first' ','
-       && lk != 21127               // 'following' ','
-       && lk != 21128               // 'following-sibling' ','
-       && lk != 21129               // 'for' ','
-       && lk != 21133               // 'ft-option' ','
-       && lk != 21137               // 'function' ','
-       && lk != 21138               // 'ge' ','
-       && lk != 21140               // 'group' ','
-       && lk != 21142               // 'gt' ','
-       && lk != 21143               // 'idiv' ','
-       && lk != 21144               // 'if' ','
-       && lk != 21145               // 'import' ','
-       && lk != 21146               // 'in' ','
-       && lk != 21147               // 'index' ','
-       && lk != 21151               // 'insert' ','
-       && lk != 21152               // 'instance' ','
-       && lk != 21153               // 'integrity' ','
-       && lk != 21154               // 'intersect' ','
-       && lk != 21155               // 'into' ','
-       && lk != 21156               // 'is' ','
-       && lk != 21157               // 'item' ','
-       && lk != 21159               // 'json-item' ','
-       && lk != 21162               // 'last' ','
-       && lk != 21163               // 'lax' ','
-       && lk != 21164               // 'le' ','
-       && lk != 21166               // 'let' ','
-       && lk != 21168               // 'loop' ','
-       && lk != 21170               // 'lt' ','
-       && lk != 21172               // 'mod' ','
-       && lk != 21173               // 'modify' ','
-       && lk != 21174               // 'module' ','
-       && lk != 21176               // 'namespace' ','
-       && lk != 21177               // 'namespace-node' ','
-       && lk != 21178               // 'ne' ','
-       && lk != 21183               // 'node' ','
-       && lk != 21184               // 'nodes' ','
-       && lk != 21186               // 'object' ','
-       && lk != 21190               // 'only' ','
-       && lk != 21191               // 'option' ','
-       && lk != 21192               // 'or' ','
-       && lk != 21193               // 'order' ','
-       && lk != 21194               // 'ordered' ','
-       && lk != 21195               // 'ordering' ','
-       && lk != 21198               // 'parent' ','
-       && lk != 21204               // 'preceding' ','
-       && lk != 21205               // 'preceding-sibling' ','
-       && lk != 21208               // 'processing-instruction' ','
-       && lk != 21210               // 'rename' ','
-       && lk != 21211               // 'replace' ','
-       && lk != 21212               // 'return' ','
-       && lk != 21213               // 'returning' ','
-       && lk != 21214               // 'revalidation' ','
-       && lk != 21216               // 'satisfies' ','
-       && lk != 21217               // 'schema' ','
-       && lk != 21218               // 'schema-attribute' ','
-       && lk != 21219               // 'schema-element' ','
-       && lk != 21220               // 'score' ','
-       && lk != 21221               // 'self' ','
-       && lk != 21226               // 'sliding' ','
-       && lk != 21227               // 'some' ','
-       && lk != 21228               // 'stable' ','
-       && lk != 21229               // 'start' ','
-       && lk != 21232               // 'strict' ','
-       && lk != 21235               // 'switch' ','
-       && lk != 21236               // 'text' ','
-       && lk != 21240               // 'to' ','
-       && lk != 21241               // 'treat' ','
-       && lk != 21242               // 'try' ','
-       && lk != 21243               // 'tumbling' ','
-       && lk != 21244               // 'type' ','
-       && lk != 21245               // 'typeswitch' ','
-       && lk != 21246               // 'union' ','
-       && lk != 21248               // 'unordered' ','
-       && lk != 21249               // 'updating' ','
-       && lk != 21252               // 'validate' ','
-       && lk != 21253               // 'value' ','
-       && lk != 21254               // 'variable' ','
-       && lk != 21255               // 'version' ','
-       && lk != 21258               // 'where' ','
-       && lk != 21259               // 'while' ','
-       && lk != 21262               // 'with' ','
-       && lk != 21266               // 'xquery' ','
-       && lk != 27141               // Wildcard ';'
-       && lk != 27142               // EQName^Token ';'
-       && lk != 27144               // IntegerLiteral ';'
-       && lk != 27145               // DecimalLiteral ';'
-       && lk != 27146               // DoubleLiteral ';'
-       && lk != 27147               // StringLiteral ';'
-       && lk != 27180               // '.' ';'
-       && lk != 27181               // '..' ';'
-       && lk != 27182               // '/' ';'
-       && lk != 27206               // 'after' ';'
-       && lk != 27208               // 'allowing' ';'
-       && lk != 27209               // 'ancestor' ';'
-       && lk != 27210               // 'ancestor-or-self' ';'
-       && lk != 27211               // 'and' ';'
-       && lk != 27214               // 'array' ';'
-       && lk != 27215               // 'as' ';'
-       && lk != 27216               // 'ascending' ';'
-       && lk != 27217               // 'at' ';'
-       && lk != 27218               // 'attribute' ';'
-       && lk != 27219               // 'base-uri' ';'
-       && lk != 27220               // 'before' ';'
-       && lk != 27221               // 'boundary-space' ';'
-       && lk != 27222               // 'break' ';'
-       && lk != 27224               // 'case' ';'
-       && lk != 27225               // 'cast' ';'
-       && lk != 27226               // 'castable' ';'
-       && lk != 27227               // 'catch' ';'
-       && lk != 27229               // 'child' ';'
-       && lk != 27230               // 'collation' ';'
-       && lk != 27232               // 'comment' ';'
-       && lk != 27233               // 'constraint' ';'
-       && lk != 27234               // 'construction' ';'
-       && lk != 27237               // 'context' ';'
-       && lk != 27238               // 'continue' ';'
-       && lk != 27239               // 'copy' ';'
-       && lk != 27240               // 'copy-namespaces' ';'
-       && lk != 27241               // 'count' ';'
-       && lk != 27242               // 'decimal-format' ';'
-       && lk != 27244               // 'declare' ';'
-       && lk != 27245               // 'default' ';'
-       && lk != 27246               // 'delete' ';'
-       && lk != 27247               // 'descendant' ';'
-       && lk != 27248               // 'descendant-or-self' ';'
-       && lk != 27249               // 'descending' ';'
-       && lk != 27254               // 'div' ';'
-       && lk != 27255               // 'document' ';'
-       && lk != 27256               // 'document-node' ';'
-       && lk != 27257               // 'element' ';'
-       && lk != 27258               // 'else' ';'
-       && lk != 27259               // 'empty' ';'
-       && lk != 27260               // 'empty-sequence' ';'
-       && lk != 27261               // 'encoding' ';'
-       && lk != 27262               // 'end' ';'
-       && lk != 27264               // 'eq' ';'
-       && lk != 27265               // 'every' ';'
-       && lk != 27267               // 'except' ';'
-       && lk != 27268               // 'exit' ';'
-       && lk != 27269               // 'external' ';'
-       && lk != 27270               // 'first' ';'
-       && lk != 27271               // 'following' ';'
-       && lk != 27272               // 'following-sibling' ';'
-       && lk != 27273               // 'for' ';'
-       && lk != 27277               // 'ft-option' ';'
-       && lk != 27281               // 'function' ';'
-       && lk != 27282               // 'ge' ';'
-       && lk != 27284               // 'group' ';'
-       && lk != 27286               // 'gt' ';'
-       && lk != 27287               // 'idiv' ';'
-       && lk != 27288               // 'if' ';'
-       && lk != 27289               // 'import' ';'
-       && lk != 27290               // 'in' ';'
-       && lk != 27291               // 'index' ';'
-       && lk != 27295               // 'insert' ';'
-       && lk != 27296               // 'instance' ';'
-       && lk != 27297               // 'integrity' ';'
-       && lk != 27298               // 'intersect' ';'
-       && lk != 27299               // 'into' ';'
-       && lk != 27300               // 'is' ';'
-       && lk != 27301               // 'item' ';'
-       && lk != 27303               // 'json-item' ';'
-       && lk != 27306               // 'last' ';'
-       && lk != 27307               // 'lax' ';'
-       && lk != 27308               // 'le' ';'
-       && lk != 27310               // 'let' ';'
-       && lk != 27312               // 'loop' ';'
-       && lk != 27314               // 'lt' ';'
-       && lk != 27316               // 'mod' ';'
-       && lk != 27317               // 'modify' ';'
-       && lk != 27318               // 'module' ';'
-       && lk != 27320               // 'namespace' ';'
-       && lk != 27321               // 'namespace-node' ';'
-       && lk != 27322               // 'ne' ';'
-       && lk != 27327               // 'node' ';'
-       && lk != 27328               // 'nodes' ';'
-       && lk != 27330               // 'object' ';'
-       && lk != 27334               // 'only' ';'
-       && lk != 27335               // 'option' ';'
-       && lk != 27336               // 'or' ';'
-       && lk != 27337               // 'order' ';'
-       && lk != 27338               // 'ordered' ';'
-       && lk != 27339               // 'ordering' ';'
-       && lk != 27342               // 'parent' ';'
-       && lk != 27348               // 'preceding' ';'
-       && lk != 27349               // 'preceding-sibling' ';'
-       && lk != 27352               // 'processing-instruction' ';'
-       && lk != 27354               // 'rename' ';'
-       && lk != 27355               // 'replace' ';'
-       && lk != 27356               // 'return' ';'
-       && lk != 27357               // 'returning' ';'
-       && lk != 27358               // 'revalidation' ';'
-       && lk != 27360               // 'satisfies' ';'
-       && lk != 27361               // 'schema' ';'
-       && lk != 27362               // 'schema-attribute' ';'
-       && lk != 27363               // 'schema-element' ';'
-       && lk != 27364               // 'score' ';'
-       && lk != 27365               // 'self' ';'
-       && lk != 27370               // 'sliding' ';'
-       && lk != 27371               // 'some' ';'
-       && lk != 27372               // 'stable' ';'
-       && lk != 27373               // 'start' ';'
-       && lk != 27376               // 'strict' ';'
-       && lk != 27379               // 'switch' ';'
-       && lk != 27380               // 'text' ';'
-       && lk != 27384               // 'to' ';'
-       && lk != 27385               // 'treat' ';'
-       && lk != 27386               // 'try' ';'
-       && lk != 27387               // 'tumbling' ';'
-       && lk != 27388               // 'type' ';'
-       && lk != 27389               // 'typeswitch' ';'
-       && lk != 27390               // 'union' ';'
-       && lk != 27392               // 'unordered' ';'
-       && lk != 27393               // 'updating' ';'
-       && lk != 27396               // 'validate' ';'
-       && lk != 27397               // 'value' ';'
-       && lk != 27398               // 'variable' ';'
-       && lk != 27399               // 'version' ';'
-       && lk != 27402               // 'where' ';'
-       && lk != 27403               // 'while' ';'
-       && lk != 27406               // 'with' ';'
-       && lk != 27410               // 'xquery' ';'
-       && lk != 90198               // 'break' 'loop'
-       && lk != 90214               // 'continue' 'loop'
-       && lk != 113284              // 'exit' 'returning'
-       && lk != 144389              // Wildcard '}'
-       && lk != 144390              // EQName^Token '}'
-       && lk != 144392              // IntegerLiteral '}'
-       && lk != 144393              // DecimalLiteral '}'
-       && lk != 144394              // DoubleLiteral '}'
-       && lk != 144395              // StringLiteral '}'
-       && lk != 144428              // '.' '}'
-       && lk != 144429              // '..' '}'
-       && lk != 144430              // '/' '}'
-       && lk != 144454              // 'after' '}'
-       && lk != 144456              // 'allowing' '}'
-       && lk != 144457              // 'ancestor' '}'
-       && lk != 144458              // 'ancestor-or-self' '}'
-       && lk != 144459              // 'and' '}'
-       && lk != 144462              // 'array' '}'
-       && lk != 144463              // 'as' '}'
-       && lk != 144464              // 'ascending' '}'
-       && lk != 144465              // 'at' '}'
-       && lk != 144466              // 'attribute' '}'
-       && lk != 144467              // 'base-uri' '}'
-       && lk != 144468              // 'before' '}'
-       && lk != 144469              // 'boundary-space' '}'
-       && lk != 144470              // 'break' '}'
-       && lk != 144472              // 'case' '}'
-       && lk != 144473              // 'cast' '}'
-       && lk != 144474              // 'castable' '}'
-       && lk != 144475              // 'catch' '}'
-       && lk != 144477              // 'child' '}'
-       && lk != 144478              // 'collation' '}'
-       && lk != 144480              // 'comment' '}'
-       && lk != 144481              // 'constraint' '}'
-       && lk != 144482              // 'construction' '}'
-       && lk != 144485              // 'context' '}'
-       && lk != 144486              // 'continue' '}'
-       && lk != 144487              // 'copy' '}'
-       && lk != 144488              // 'copy-namespaces' '}'
-       && lk != 144489              // 'count' '}'
-       && lk != 144490              // 'decimal-format' '}'
-       && lk != 144492              // 'declare' '}'
-       && lk != 144493              // 'default' '}'
-       && lk != 144494              // 'delete' '}'
-       && lk != 144495              // 'descendant' '}'
-       && lk != 144496              // 'descendant-or-self' '}'
-       && lk != 144497              // 'descending' '}'
-       && lk != 144502              // 'div' '}'
-       && lk != 144503              // 'document' '}'
-       && lk != 144504              // 'document-node' '}'
-       && lk != 144505              // 'element' '}'
-       && lk != 144506              // 'else' '}'
-       && lk != 144507              // 'empty' '}'
-       && lk != 144508              // 'empty-sequence' '}'
-       && lk != 144509              // 'encoding' '}'
-       && lk != 144510              // 'end' '}'
-       && lk != 144512              // 'eq' '}'
-       && lk != 144513              // 'every' '}'
-       && lk != 144515              // 'except' '}'
-       && lk != 144516              // 'exit' '}'
-       && lk != 144517              // 'external' '}'
-       && lk != 144518              // 'first' '}'
-       && lk != 144519              // 'following' '}'
-       && lk != 144520              // 'following-sibling' '}'
-       && lk != 144521              // 'for' '}'
-       && lk != 144525              // 'ft-option' '}'
-       && lk != 144529              // 'function' '}'
-       && lk != 144530              // 'ge' '}'
-       && lk != 144532              // 'group' '}'
-       && lk != 144534              // 'gt' '}'
-       && lk != 144535              // 'idiv' '}'
-       && lk != 144536              // 'if' '}'
-       && lk != 144537              // 'import' '}'
-       && lk != 144538              // 'in' '}'
-       && lk != 144539              // 'index' '}'
-       && lk != 144543              // 'insert' '}'
-       && lk != 144544              // 'instance' '}'
-       && lk != 144545              // 'integrity' '}'
-       && lk != 144546              // 'intersect' '}'
-       && lk != 144547              // 'into' '}'
-       && lk != 144548              // 'is' '}'
-       && lk != 144549              // 'item' '}'
-       && lk != 144551              // 'json-item' '}'
-       && lk != 144554              // 'last' '}'
-       && lk != 144555              // 'lax' '}'
-       && lk != 144556              // 'le' '}'
-       && lk != 144558              // 'let' '}'
-       && lk != 144560              // 'loop' '}'
-       && lk != 144562              // 'lt' '}'
-       && lk != 144564              // 'mod' '}'
-       && lk != 144565              // 'modify' '}'
-       && lk != 144566              // 'module' '}'
-       && lk != 144568              // 'namespace' '}'
-       && lk != 144569              // 'namespace-node' '}'
-       && lk != 144570              // 'ne' '}'
-       && lk != 144575              // 'node' '}'
-       && lk != 144576              // 'nodes' '}'
-       && lk != 144578              // 'object' '}'
-       && lk != 144582              // 'only' '}'
-       && lk != 144583              // 'option' '}'
-       && lk != 144584              // 'or' '}'
-       && lk != 144585              // 'order' '}'
-       && lk != 144586              // 'ordered' '}'
-       && lk != 144587              // 'ordering' '}'
-       && lk != 144590              // 'parent' '}'
-       && lk != 144596              // 'preceding' '}'
-       && lk != 144597              // 'preceding-sibling' '}'
-       && lk != 144600              // 'processing-instruction' '}'
-       && lk != 144602              // 'rename' '}'
-       && lk != 144603              // 'replace' '}'
-       && lk != 144604              // 'return' '}'
-       && lk != 144605              // 'returning' '}'
-       && lk != 144606              // 'revalidation' '}'
-       && lk != 144608              // 'satisfies' '}'
-       && lk != 144609              // 'schema' '}'
-       && lk != 144610              // 'schema-attribute' '}'
-       && lk != 144611              // 'schema-element' '}'
-       && lk != 144612              // 'score' '}'
-       && lk != 144613              // 'self' '}'
-       && lk != 144618              // 'sliding' '}'
-       && lk != 144619              // 'some' '}'
-       && lk != 144620              // 'stable' '}'
-       && lk != 144621              // 'start' '}'
-       && lk != 144624              // 'strict' '}'
-       && lk != 144627              // 'switch' '}'
-       && lk != 144628              // 'text' '}'
-       && lk != 144632              // 'to' '}'
-       && lk != 144633              // 'treat' '}'
-       && lk != 144634              // 'try' '}'
-       && lk != 144635              // 'tumbling' '}'
-       && lk != 144636              // 'type' '}'
-       && lk != 144637              // 'typeswitch' '}'
-       && lk != 144638              // 'union' '}'
-       && lk != 144640              // 'unordered' '}'
-       && lk != 144641              // 'updating' '}'
-       && lk != 144644              // 'validate' '}'
-       && lk != 144645              // 'value' '}'
-       && lk != 144646              // 'variable' '}'
-       && lk != 144647              // 'version' '}'
-       && lk != 144650              // 'where' '}'
-       && lk != 144651              // 'while' '}'
-       && lk != 144654              // 'with' '}'
-       && lk != 144658)             // 'xquery' '}'
-      {
-        lk = memoized(6, e0);
-        if (lk == 0)
-        {
-          var b0A = b0; var e0A = e0; var l1A = l1;
-          var b1A = b1; var e1A = e1; var l2A = l2;
-          var b2A = b2; var e2A = e2;
-          try
-          {
-            try_Statement();
-            lk = -1;
-          }
-          catch (p1A)
-          {
-            lk = -2;
-          }
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(6, e0, lk);
-        }
-      }
-      if (lk != -1
-       && lk != 16134               // 'variable' '$'
-       && lk != 27141               // Wildcard ';'
-       && lk != 27142               // EQName^Token ';'
-       && lk != 27144               // IntegerLiteral ';'
-       && lk != 27145               // DecimalLiteral ';'
-       && lk != 27146               // DoubleLiteral ';'
-       && lk != 27147               // StringLiteral ';'
-       && lk != 27180               // '.' ';'
-       && lk != 27181               // '..' ';'
-       && lk != 27182               // '/' ';'
-       && lk != 27206               // 'after' ';'
-       && lk != 27208               // 'allowing' ';'
-       && lk != 27209               // 'ancestor' ';'
-       && lk != 27210               // 'ancestor-or-self' ';'
-       && lk != 27211               // 'and' ';'
-       && lk != 27214               // 'array' ';'
-       && lk != 27215               // 'as' ';'
-       && lk != 27216               // 'ascending' ';'
-       && lk != 27217               // 'at' ';'
-       && lk != 27218               // 'attribute' ';'
-       && lk != 27219               // 'base-uri' ';'
-       && lk != 27220               // 'before' ';'
-       && lk != 27221               // 'boundary-space' ';'
-       && lk != 27222               // 'break' ';'
-       && lk != 27224               // 'case' ';'
-       && lk != 27225               // 'cast' ';'
-       && lk != 27226               // 'castable' ';'
-       && lk != 27227               // 'catch' ';'
-       && lk != 27229               // 'child' ';'
-       && lk != 27230               // 'collation' ';'
-       && lk != 27232               // 'comment' ';'
-       && lk != 27233               // 'constraint' ';'
-       && lk != 27234               // 'construction' ';'
-       && lk != 27237               // 'context' ';'
-       && lk != 27238               // 'continue' ';'
-       && lk != 27239               // 'copy' ';'
-       && lk != 27240               // 'copy-namespaces' ';'
-       && lk != 27241               // 'count' ';'
-       && lk != 27242               // 'decimal-format' ';'
-       && lk != 27244               // 'declare' ';'
-       && lk != 27245               // 'default' ';'
-       && lk != 27246               // 'delete' ';'
-       && lk != 27247               // 'descendant' ';'
-       && lk != 27248               // 'descendant-or-self' ';'
-       && lk != 27249               // 'descending' ';'
-       && lk != 27254               // 'div' ';'
-       && lk != 27255               // 'document' ';'
-       && lk != 27256               // 'document-node' ';'
-       && lk != 27257               // 'element' ';'
-       && lk != 27258               // 'else' ';'
-       && lk != 27259               // 'empty' ';'
-       && lk != 27260               // 'empty-sequence' ';'
-       && lk != 27261               // 'encoding' ';'
-       && lk != 27262               // 'end' ';'
-       && lk != 27264               // 'eq' ';'
-       && lk != 27265               // 'every' ';'
-       && lk != 27267               // 'except' ';'
-       && lk != 27268               // 'exit' ';'
-       && lk != 27269               // 'external' ';'
-       && lk != 27270               // 'first' ';'
-       && lk != 27271               // 'following' ';'
-       && lk != 27272               // 'following-sibling' ';'
-       && lk != 27273               // 'for' ';'
-       && lk != 27277               // 'ft-option' ';'
-       && lk != 27281               // 'function' ';'
-       && lk != 27282               // 'ge' ';'
-       && lk != 27284               // 'group' ';'
-       && lk != 27286               // 'gt' ';'
-       && lk != 27287               // 'idiv' ';'
-       && lk != 27288               // 'if' ';'
-       && lk != 27289               // 'import' ';'
-       && lk != 27290               // 'in' ';'
-       && lk != 27291               // 'index' ';'
-       && lk != 27295               // 'insert' ';'
-       && lk != 27296               // 'instance' ';'
-       && lk != 27297               // 'integrity' ';'
-       && lk != 27298               // 'intersect' ';'
-       && lk != 27299               // 'into' ';'
-       && lk != 27300               // 'is' ';'
-       && lk != 27301               // 'item' ';'
-       && lk != 27303               // 'json-item' ';'
-       && lk != 27306               // 'last' ';'
-       && lk != 27307               // 'lax' ';'
-       && lk != 27308               // 'le' ';'
-       && lk != 27310               // 'let' ';'
-       && lk != 27312               // 'loop' ';'
-       && lk != 27314               // 'lt' ';'
-       && lk != 27316               // 'mod' ';'
-       && lk != 27317               // 'modify' ';'
-       && lk != 27318               // 'module' ';'
-       && lk != 27320               // 'namespace' ';'
-       && lk != 27321               // 'namespace-node' ';'
-       && lk != 27322               // 'ne' ';'
-       && lk != 27327               // 'node' ';'
-       && lk != 27328               // 'nodes' ';'
-       && lk != 27330               // 'object' ';'
-       && lk != 27334               // 'only' ';'
-       && lk != 27335               // 'option' ';'
-       && lk != 27336               // 'or' ';'
-       && lk != 27337               // 'order' ';'
-       && lk != 27338               // 'ordered' ';'
-       && lk != 27339               // 'ordering' ';'
-       && lk != 27342               // 'parent' ';'
-       && lk != 27348               // 'preceding' ';'
-       && lk != 27349               // 'preceding-sibling' ';'
-       && lk != 27352               // 'processing-instruction' ';'
-       && lk != 27354               // 'rename' ';'
-       && lk != 27355               // 'replace' ';'
-       && lk != 27356               // 'return' ';'
-       && lk != 27357               // 'returning' ';'
-       && lk != 27358               // 'revalidation' ';'
-       && lk != 27360               // 'satisfies' ';'
-       && lk != 27361               // 'schema' ';'
-       && lk != 27362               // 'schema-attribute' ';'
-       && lk != 27363               // 'schema-element' ';'
-       && lk != 27364               // 'score' ';'
-       && lk != 27365               // 'self' ';'
-       && lk != 27370               // 'sliding' ';'
-       && lk != 27371               // 'some' ';'
-       && lk != 27372               // 'stable' ';'
-       && lk != 27373               // 'start' ';'
-       && lk != 27376               // 'strict' ';'
-       && lk != 27379               // 'switch' ';'
-       && lk != 27380               // 'text' ';'
-       && lk != 27384               // 'to' ';'
-       && lk != 27385               // 'treat' ';'
-       && lk != 27386               // 'try' ';'
-       && lk != 27387               // 'tumbling' ';'
-       && lk != 27388               // 'type' ';'
-       && lk != 27389               // 'typeswitch' ';'
-       && lk != 27390               // 'union' ';'
-       && lk != 27392               // 'unordered' ';'
-       && lk != 27393               // 'updating' ';'
-       && lk != 27396               // 'validate' ';'
-       && lk != 27397               // 'value' ';'
-       && lk != 27398               // 'variable' ';'
-       && lk != 27399               // 'version' ';'
-       && lk != 27402               // 'where' ';'
-       && lk != 27403               // 'while' ';'
-       && lk != 27406               // 'with' ';'
-       && lk != 27410               // 'xquery' ';'
-       && lk != 90198               // 'break' 'loop'
-       && lk != 90214               // 'continue' 'loop'
-       && lk != 113284)             // 'exit' 'returning'
-      {
-        break;
-      }
-      whitespace();
-      parse_Statement();
-    }
-    eventHandler.endNonterminal("Statements", e0);
-  }
-
-  function try_Statements()
-  {
-    for (;;)
-    {
-      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 34:                      // '('
-        lookahead2W(269);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 35:                      // '(#'
-        lookahead2(250);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |
-        break;
-      case 46:                      // '/'
-        lookahead2W(281);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 47:                      // '//'
-        lookahead2W(263);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 54:                      // '<'
-        lookahead2(4);              // QName
-        break;
-      case 55:                      // '<!--'
-        lookahead2(1);              // DirCommentContents
-        break;
-      case 59:                      // '<?'
-        lookahead2(3);              // PITarget
-        break;
-      case 66:                      // '@'
-        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        break;
-      case 68:                      // '['
-        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 77:                      // 'append'
-        lookahead2W(56);            // S^WS | '(:' | 'json'
-        break;
-      case 82:                      // 'attribute'
-        lookahead2W(278);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |
-        break;
-      case 121:                     // 'element'
-        lookahead2W(277);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |
-        break;
-      case 132:                     // 'exit'
-        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 137:                     // 'for'
-        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      case 174:                     // 'let'
-        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      case 218:                     // 'rename'
-        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 219:                     // 'replace'
-        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 260:                     // 'validate'
-        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 276:                     // '{'
-        lookahead2W(273);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 278:                     // '{|'
-        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 5:                       // Wildcard
-      case 45:                      // '..'
-        lookahead2W(186);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |
-        break;
-      case 31:                      // '$'
-      case 32:                      // '%'
-        lookahead2W(253);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-        break;
-      case 40:                      // '+'
-      case 42:                      // '-'
-        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        break;
-      case 86:                      // 'break'
-      case 102:                     // 'continue'
-        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 110:                     // 'delete'
-      case 159:                     // 'insert'
-        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 124:                     // 'empty-sequence'
-      case 165:                     // 'item'
-        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |
-        break;
-      case 184:                     // 'namespace'
-      case 216:                     // 'processing-instruction'
-        lookahead2W(266);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |
-        break;
-      case 103:                     // 'copy'
-      case 129:                     // 'every'
-      case 235:                     // 'some'
-      case 262:                     // 'variable'
-        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |
-        break;
-      case 8:                       // IntegerLiteral
-      case 9:                       // DecimalLiteral
-      case 10:                      // DoubleLiteral
-      case 11:                      // StringLiteral
-      case 44:                      // '.'
-        lookahead2W(192);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |
-        break;
-      case 96:                      // 'comment'
-      case 119:                     // 'document'
-      case 202:                     // 'ordered'
-      case 244:                     // 'text'
-      case 250:                     // 'try'
-      case 256:                     // 'unordered'
-        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 73:                      // 'ancestor'
-      case 74:                      // 'ancestor-or-self'
-      case 93:                      // 'child'
-      case 111:                     // 'descendant'
-      case 112:                     // 'descendant-or-self'
-      case 135:                     // 'following'
-      case 136:                     // 'following-sibling'
-      case 206:                     // 'parent'
-      case 212:                     // 'preceding'
-      case 213:                     // 'preceding-sibling'
-      case 229:                     // 'self'
-        lookahead2W(198);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      case 6:                       // EQName^Token
-      case 70:                      // 'after'
-      case 72:                      // 'allowing'
-      case 75:                      // 'and'
-      case 78:                      // 'array'
-      case 79:                      // 'as'
-      case 80:                      // 'ascending'
-      case 81:                      // 'at'
-      case 83:                      // 'base-uri'
-      case 84:                      // 'before'
-      case 85:                      // 'boundary-space'
-      case 88:                      // 'case'
-      case 89:                      // 'cast'
-      case 90:                      // 'castable'
-      case 91:                      // 'catch'
-      case 94:                      // 'collation'
-      case 97:                      // 'constraint'
-      case 98:                      // 'construction'
-      case 101:                     // 'context'
-      case 104:                     // 'copy-namespaces'
-      case 105:                     // 'count'
-      case 106:                     // 'decimal-format'
-      case 108:                     // 'declare'
-      case 109:                     // 'default'
-      case 113:                     // 'descending'
-      case 118:                     // 'div'
-      case 120:                     // 'document-node'
-      case 122:                     // 'else'
-      case 123:                     // 'empty'
-      case 125:                     // 'encoding'
-      case 126:                     // 'end'
-      case 128:                     // 'eq'
-      case 131:                     // 'except'
-      case 133:                     // 'external'
-      case 134:                     // 'first'
-      case 141:                     // 'ft-option'
-      case 145:                     // 'function'
-      case 146:                     // 'ge'
-      case 148:                     // 'group'
-      case 150:                     // 'gt'
-      case 151:                     // 'idiv'
-      case 152:                     // 'if'
-      case 153:                     // 'import'
-      case 154:                     // 'in'
-      case 155:                     // 'index'
-      case 160:                     // 'instance'
-      case 161:                     // 'integrity'
-      case 162:                     // 'intersect'
-      case 163:                     // 'into'
-      case 164:                     // 'is'
-      case 167:                     // 'json-item'
-      case 170:                     // 'last'
-      case 171:                     // 'lax'
-      case 172:                     // 'le'
-      case 176:                     // 'loop'
-      case 178:                     // 'lt'
-      case 180:                     // 'mod'
-      case 181:                     // 'modify'
-      case 182:                     // 'module'
-      case 185:                     // 'namespace-node'
-      case 186:                     // 'ne'
-      case 191:                     // 'node'
-      case 192:                     // 'nodes'
-      case 194:                     // 'object'
-      case 198:                     // 'only'
-      case 199:                     // 'option'
-      case 200:                     // 'or'
-      case 201:                     // 'order'
-      case 203:                     // 'ordering'
-      case 220:                     // 'return'
-      case 221:                     // 'returning'
-      case 222:                     // 'revalidation'
-      case 224:                     // 'satisfies'
-      case 225:                     // 'schema'
-      case 226:                     // 'schema-attribute'
-      case 227:                     // 'schema-element'
-      case 228:                     // 'score'
-      case 234:                     // 'sliding'
-      case 236:                     // 'stable'
-      case 237:                     // 'start'
-      case 240:                     // 'strict'
-      case 243:                     // 'switch'
-      case 248:                     // 'to'
-      case 249:                     // 'treat'
-      case 251:                     // 'tumbling'
-      case 252:                     // 'type'
-      case 253:                     // 'typeswitch'
-      case 254:                     // 'union'
-      case 257:                     // 'updating'
-      case 261:                     // 'value'
-      case 263:                     // 'version'
-      case 266:                     // 'where'
-      case 267:                     // 'while'
-      case 270:                     // 'with'
-      case 274:                     // 'xquery'
-        lookahead2W(195);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk != 25                  // EOF
-       && lk != 282                 // '}'
-       && lk != 12805               // Wildcard EOF
-       && lk != 12806               // EQName^Token EOF
-       && lk != 12808               // IntegerLiteral EOF
-       && lk != 12809               // DecimalLiteral EOF
-       && lk != 12810               // DoubleLiteral EOF
-       && lk != 12811               // StringLiteral EOF
-       && lk != 12844               // '.' EOF
-       && lk != 12845               // '..' EOF
-       && lk != 12846               // '/' EOF
-       && lk != 12870               // 'after' EOF
-       && lk != 12872               // 'allowing' EOF
-       && lk != 12873               // 'ancestor' EOF
-       && lk != 12874               // 'ancestor-or-self' EOF
-       && lk != 12875               // 'and' EOF
-       && lk != 12878               // 'array' EOF
-       && lk != 12879               // 'as' EOF
-       && lk != 12880               // 'ascending' EOF
-       && lk != 12881               // 'at' EOF
-       && lk != 12882               // 'attribute' EOF
-       && lk != 12883               // 'base-uri' EOF
-       && lk != 12884               // 'before' EOF
-       && lk != 12885               // 'boundary-space' EOF
-       && lk != 12886               // 'break' EOF
-       && lk != 12888               // 'case' EOF
-       && lk != 12889               // 'cast' EOF
-       && lk != 12890               // 'castable' EOF
-       && lk != 12891               // 'catch' EOF
-       && lk != 12893               // 'child' EOF
-       && lk != 12894               // 'collation' EOF
-       && lk != 12896               // 'comment' EOF
-       && lk != 12897               // 'constraint' EOF
-       && lk != 12898               // 'construction' EOF
-       && lk != 12901               // 'context' EOF
-       && lk != 12902               // 'continue' EOF
-       && lk != 12903               // 'copy' EOF
-       && lk != 12904               // 'copy-namespaces' EOF
-       && lk != 12905               // 'count' EOF
-       && lk != 12906               // 'decimal-format' EOF
-       && lk != 12908               // 'declare' EOF
-       && lk != 12909               // 'default' EOF
-       && lk != 12910               // 'delete' EOF
-       && lk != 12911               // 'descendant' EOF
-       && lk != 12912               // 'descendant-or-self' EOF
-       && lk != 12913               // 'descending' EOF
-       && lk != 12918               // 'div' EOF
-       && lk != 12919               // 'document' EOF
-       && lk != 12920               // 'document-node' EOF
-       && lk != 12921               // 'element' EOF
-       && lk != 12922               // 'else' EOF
-       && lk != 12923               // 'empty' EOF
-       && lk != 12924               // 'empty-sequence' EOF
-       && lk != 12925               // 'encoding' EOF
-       && lk != 12926               // 'end' EOF
-       && lk != 12928               // 'eq' EOF
-       && lk != 12929               // 'every' EOF
-       && lk != 12931               // 'except' EOF
-       && lk != 12932               // 'exit' EOF
-       && lk != 12933               // 'external' EOF
-       && lk != 12934               // 'first' EOF
-       && lk != 12935               // 'following' EOF
-       && lk != 12936               // 'following-sibling' EOF
-       && lk != 12937               // 'for' EOF
-       && lk != 12941               // 'ft-option' EOF
-       && lk != 12945               // 'function' EOF
-       && lk != 12946               // 'ge' EOF
-       && lk != 12948               // 'group' EOF
-       && lk != 12950               // 'gt' EOF
-       && lk != 12951               // 'idiv' EOF
-       && lk != 12952               // 'if' EOF
-       && lk != 12953               // 'import' EOF
-       && lk != 12954               // 'in' EOF
-       && lk != 12955               // 'index' EOF
-       && lk != 12959               // 'insert' EOF
-       && lk != 12960               // 'instance' EOF
-       && lk != 12961               // 'integrity' EOF
-       && lk != 12962               // 'intersect' EOF
-       && lk != 12963               // 'into' EOF
-       && lk != 12964               // 'is' EOF
-       && lk != 12965               // 'item' EOF
-       && lk != 12967               // 'json-item' EOF
-       && lk != 12970               // 'last' EOF
-       && lk != 12971               // 'lax' EOF
-       && lk != 12972               // 'le' EOF
-       && lk != 12974               // 'let' EOF
-       && lk != 12976               // 'loop' EOF
-       && lk != 12978               // 'lt' EOF
-       && lk != 12980               // 'mod' EOF
-       && lk != 12981               // 'modify' EOF
-       && lk != 12982               // 'module' EOF
-       && lk != 12984               // 'namespace' EOF
-       && lk != 12985               // 'namespace-node' EOF
-       && lk != 12986               // 'ne' EOF
-       && lk != 12991               // 'node' EOF
-       && lk != 12992               // 'nodes' EOF
-       && lk != 12994               // 'object' EOF
-       && lk != 12998               // 'only' EOF
-       && lk != 12999               // 'option' EOF
-       && lk != 13000               // 'or' EOF
-       && lk != 13001               // 'order' EOF
-       && lk != 13002               // 'ordered' EOF
-       && lk != 13003               // 'ordering' EOF
-       && lk != 13006               // 'parent' EOF
-       && lk != 13012               // 'preceding' EOF
-       && lk != 13013               // 'preceding-sibling' EOF
-       && lk != 13016               // 'processing-instruction' EOF
-       && lk != 13018               // 'rename' EOF
-       && lk != 13019               // 'replace' EOF
-       && lk != 13020               // 'return' EOF
-       && lk != 13021               // 'returning' EOF
-       && lk != 13022               // 'revalidation' EOF
-       && lk != 13024               // 'satisfies' EOF
-       && lk != 13025               // 'schema' EOF
-       && lk != 13026               // 'schema-attribute' EOF
-       && lk != 13027               // 'schema-element' EOF
-       && lk != 13028               // 'score' EOF
-       && lk != 13029               // 'self' EOF
-       && lk != 13034               // 'sliding' EOF
-       && lk != 13035               // 'some' EOF
-       && lk != 13036               // 'stable' EOF
-       && lk != 13037               // 'start' EOF
-       && lk != 13040               // 'strict' EOF
-       && lk != 13043               // 'switch' EOF
-       && lk != 13044               // 'text' EOF
-       && lk != 13048               // 'to' EOF
-       && lk != 13049               // 'treat' EOF
-       && lk != 13050               // 'try' EOF
-       && lk != 13051               // 'tumbling' EOF
-       && lk != 13052               // 'type' EOF
-       && lk != 13053               // 'typeswitch' EOF
-       && lk != 13054               // 'union' EOF
-       && lk != 13056               // 'unordered' EOF
-       && lk != 13057               // 'updating' EOF
-       && lk != 13060               // 'validate' EOF
-       && lk != 13061               // 'value' EOF
-       && lk != 13062               // 'variable' EOF
-       && lk != 13063               // 'version' EOF
-       && lk != 13066               // 'where' EOF
-       && lk != 13067               // 'while' EOF
-       && lk != 13070               // 'with' EOF
-       && lk != 13074               // 'xquery' EOF
-       && lk != 16134               // 'variable' '$'
-       && lk != 20997               // Wildcard ','
-       && lk != 20998               // EQName^Token ','
-       && lk != 21000               // IntegerLiteral ','
-       && lk != 21001               // DecimalLiteral ','
-       && lk != 21002               // DoubleLiteral ','
-       && lk != 21003               // StringLiteral ','
-       && lk != 21036               // '.' ','
-       && lk != 21037               // '..' ','
-       && lk != 21038               // '/' ','
-       && lk != 21062               // 'after' ','
-       && lk != 21064               // 'allowing' ','
-       && lk != 21065               // 'ancestor' ','
-       && lk != 21066               // 'ancestor-or-self' ','
-       && lk != 21067               // 'and' ','
-       && lk != 21070               // 'array' ','
-       && lk != 21071               // 'as' ','
-       && lk != 21072               // 'ascending' ','
-       && lk != 21073               // 'at' ','
-       && lk != 21074               // 'attribute' ','
-       && lk != 21075               // 'base-uri' ','
-       && lk != 21076               // 'before' ','
-       && lk != 21077               // 'boundary-space' ','
-       && lk != 21078               // 'break' ','
-       && lk != 21080               // 'case' ','
-       && lk != 21081               // 'cast' ','
-       && lk != 21082               // 'castable' ','
-       && lk != 21083               // 'catch' ','
-       && lk != 21085               // 'child' ','
-       && lk != 21086               // 'collation' ','
-       && lk != 21088               // 'comment' ','
-       && lk != 21089               // 'constraint' ','
-       && lk != 21090               // 'construction' ','
-       && lk != 21093               // 'context' ','
-       && lk != 21094               // 'continue' ','
-       && lk != 21095               // 'copy' ','
-       && lk != 21096               // 'copy-namespaces' ','
-       && lk != 21097               // 'count' ','
-       && lk != 21098               // 'decimal-format' ','
-       && lk != 21100               // 'declare' ','
-       && lk != 21101               // 'default' ','
-       && lk != 21102               // 'delete' ','
-       && lk != 21103               // 'descendant' ','
-       && lk != 21104               // 'descendant-or-self' ','
-       && lk != 21105               // 'descending' ','
-       && lk != 21110               // 'div' ','
-       && lk != 21111               // 'document' ','
-       && lk != 21112               // 'document-node' ','
-       && lk != 21113               // 'element' ','
-       && lk != 21114               // 'else' ','
-       && lk != 21115               // 'empty' ','
-       && lk != 21116               // 'empty-sequence' ','
-       && lk != 21117               // 'encoding' ','
-       && lk != 21118               // 'end' ','
-       && lk != 21120               // 'eq' ','
-       && lk != 21121               // 'every' ','
-       && lk != 21123               // 'except' ','
-       && lk != 21124               // 'exit' ','
-       && lk != 21125               // 'external' ','
-       && lk != 21126               // 'first' ','
-       && lk != 21127               // 'following' ','
-       && lk != 21128               // 'following-sibling' ','
-       && lk != 21129               // 'for' ','
-       && lk != 21133               // 'ft-option' ','
-       && lk != 21137               // 'function' ','
-       && lk != 21138               // 'ge' ','
-       && lk != 21140               // 'group' ','
-       && lk != 21142               // 'gt' ','
-       && lk != 21143               // 'idiv' ','
-       && lk != 21144               // 'if' ','
-       && lk != 21145               // 'import' ','
-       && lk != 21146               // 'in' ','
-       && lk != 21147               // 'index' ','
-       && lk != 21151               // 'insert' ','
-       && lk != 21152               // 'instance' ','
-       && lk != 21153               // 'integrity' ','
-       && lk != 21154               // 'intersect' ','
-       && lk != 21155               // 'into' ','
-       && lk != 21156               // 'is' ','
-       && lk != 21157               // 'item' ','
-       && lk != 21159               // 'json-item' ','
-       && lk != 21162               // 'last' ','
-       && lk != 21163               // 'lax' ','
-       && lk != 21164               // 'le' ','
-       && lk != 21166               // 'let' ','
-       && lk != 21168               // 'loop' ','
-       && lk != 21170               // 'lt' ','
-       && lk != 21172               // 'mod' ','
-       && lk != 21173               // 'modify' ','
-       && lk != 21174               // 'module' ','
-       && lk != 21176               // 'namespace' ','
-       && lk != 21177               // 'namespace-node' ','
-       && lk != 21178               // 'ne' ','
-       && lk != 21183               // 'node' ','
-       && lk != 21184               // 'nodes' ','
-       && lk != 21186               // 'object' ','
-       && lk != 21190               // 'only' ','
-       && lk != 21191               // 'option' ','
-       && lk != 21192               // 'or' ','
-       && lk != 21193               // 'order' ','
-       && lk != 21194               // 'ordered' ','
-       && lk != 21195               // 'ordering' ','
-       && lk != 21198               // 'parent' ','
-       && lk != 21204               // 'preceding' ','
-       && lk != 21205               // 'preceding-sibling' ','
-       && lk != 21208               // 'processing-instruction' ','
-       && lk != 21210               // 'rename' ','
-       && lk != 21211               // 'replace' ','
-       && lk != 21212               // 'return' ','
-       && lk != 21213               // 'returning' ','
-       && lk != 21214               // 'revalidation' ','
-       && lk != 21216               // 'satisfies' ','
-       && lk != 21217               // 'schema' ','
-       && lk != 21218               // 'schema-attribute' ','
-       && lk != 21219               // 'schema-element' ','
-       && lk != 21220               // 'score' ','
-       && lk != 21221               // 'self' ','
-       && lk != 21226               // 'sliding' ','
-       && lk != 21227               // 'some' ','
-       && lk != 21228               // 'stable' ','
-       && lk != 21229               // 'start' ','
-       && lk != 21232               // 'strict' ','
-       && lk != 21235               // 'switch' ','
-       && lk != 21236               // 'text' ','
-       && lk != 21240               // 'to' ','
-       && lk != 21241               // 'treat' ','
-       && lk != 21242               // 'try' ','
-       && lk != 21243               // 'tumbling' ','
-       && lk != 21244               // 'type' ','
-       && lk != 21245               // 'typeswitch' ','
-       && lk != 21246               // 'union' ','
-       && lk != 21248               // 'unordered' ','
-       && lk != 21249               // 'updating' ','
-       && lk != 21252               // 'validate' ','
-       && lk != 21253               // 'value' ','
-       && lk != 21254               // 'variable' ','
-       && lk != 21255               // 'version' ','
-       && lk != 21258               // 'where' ','
-       && lk != 21259               // 'while' ','
-       && lk != 21262               // 'with' ','
-       && lk != 21266               // 'xquery' ','
-       && lk != 27141               // Wildcard ';'
-       && lk != 27142               // EQName^Token ';'
-       && lk != 27144               // IntegerLiteral ';'
-       && lk != 27145               // DecimalLiteral ';'
-       && lk != 27146               // DoubleLiteral ';'
-       && lk != 27147               // StringLiteral ';'
-       && lk != 27180               // '.' ';'
-       && lk != 27181               // '..' ';'
-       && lk != 27182               // '/' ';'
-       && lk != 27206               // 'after' ';'
-       && lk != 27208               // 'allowing' ';'
-       && lk != 27209               // 'ancestor' ';'
-       && lk != 27210               // 'ancestor-or-self' ';'
-       && lk != 27211               // 'and' ';'
-       && lk != 27214               // 'array' ';'
-       && lk != 27215               // 'as' ';'
-       && lk != 27216               // 'ascending' ';'
-       && lk != 27217               // 'at' ';'
-       && lk != 27218               // 'attribute' ';'
-       && lk != 27219               // 'base-uri' ';'
-       && lk != 27220               // 'before' ';'
-       && lk != 27221               // 'boundary-space' ';'
-       && lk != 27222               // 'break' ';'
-       && lk != 27224               // 'case' ';'
-       && lk != 27225               // 'cast' ';'
-       && lk != 27226               // 'castable' ';'
-       && lk != 27227               // 'catch' ';'
-       && lk != 27229               // 'child' ';'
-       && lk != 27230               // 'collation' ';'
-       && lk != 27232               // 'comment' ';'
-       && lk != 27233               // 'constraint' ';'
-       && lk != 27234               // 'construction' ';'
-       && lk != 27237               // 'context' ';'
-       && lk != 27238               // 'continue' ';'
-       && lk != 27239               // 'copy' ';'
-       && lk != 27240               // 'copy-namespaces' ';'
-       && lk != 27241               // 'count' ';'
-       && lk != 27242               // 'decimal-format' ';'
-       && lk != 27244               // 'declare' ';'
-       && lk != 27245               // 'default' ';'
-       && lk != 27246               // 'delete' ';'
-       && lk != 27247               // 'descendant' ';'
-       && lk != 27248               // 'descendant-or-self' ';'
-       && lk != 27249               // 'descending' ';'
-       && lk != 27254               // 'div' ';'
-       && lk != 27255               // 'document' ';'
-       && lk != 27256               // 'document-node' ';'
-       && lk != 27257               // 'element' ';'
-       && lk != 27258               // 'else' ';'
-       && lk != 27259               // 'empty' ';'
-       && lk != 27260               // 'empty-sequence' ';'
-       && lk != 27261               // 'encoding' ';'
-       && lk != 27262               // 'end' ';'
-       && lk != 27264               // 'eq' ';'
-       && lk != 27265               // 'every' ';'
-       && lk != 27267               // 'except' ';'
-       && lk != 27268               // 'exit' ';'
-       && lk != 27269               // 'external' ';'
-       && lk != 27270               // 'first' ';'
-       && lk != 27271               // 'following' ';'
-       && lk != 27272               // 'following-sibling' ';'
-       && lk != 27273               // 'for' ';'
-       && lk != 27277               // 'ft-option' ';'
-       && lk != 27281               // 'function' ';'
-       && lk != 27282               // 'ge' ';'
-       && lk != 27284               // 'group' ';'
-       && lk != 27286               // 'gt' ';'
-       && lk != 27287               // 'idiv' ';'
-       && lk != 27288               // 'if' ';'
-       && lk != 27289               // 'import' ';'
-       && lk != 27290               // 'in' ';'
-       && lk != 27291               // 'index' ';'
-       && lk != 27295               // 'insert' ';'
-       && lk != 27296               // 'instance' ';'
-       && lk != 27297               // 'integrity' ';'
-       && lk != 27298               // 'intersect' ';'
-       && lk != 27299               // 'into' ';'
-       && lk != 27300               // 'is' ';'
-       && lk != 27301               // 'item' ';'
-       && lk != 27303               // 'json-item' ';'
-       && lk != 27306               // 'last' ';'
-       && lk != 27307               // 'lax' ';'
-       && lk != 27308               // 'le' ';'
-       && lk != 27310               // 'let' ';'
-       && lk != 27312               // 'loop' ';'
-       && lk != 27314               // 'lt' ';'
-       && lk != 27316               // 'mod' ';'
-       && lk != 27317               // 'modify' ';'
-       && lk != 27318               // 'module' ';'
-       && lk != 27320               // 'namespace' ';'
-       && lk != 27321               // 'namespace-node' ';'
-       && lk != 27322               // 'ne' ';'
-       && lk != 27327               // 'node' ';'
-       && lk != 27328               // 'nodes' ';'
-       && lk != 27330               // 'object' ';'
-       && lk != 27334               // 'only' ';'
-       && lk != 27335               // 'option' ';'
-       && lk != 27336               // 'or' ';'
-       && lk != 27337               // 'order' ';'
-       && lk != 27338               // 'ordered' ';'
-       && lk != 27339               // 'ordering' ';'
-       && lk != 27342               // 'parent' ';'
-       && lk != 27348               // 'preceding' ';'
-       && lk != 27349               // 'preceding-sibling' ';'
-       && lk != 27352               // 'processing-instruction' ';'
-       && lk != 27354               // 'rename' ';'
-       && lk != 27355               // 'replace' ';'
-       && lk != 27356               // 'return' ';'
-       && lk != 27357               // 'returning' ';'
-       && lk != 27358               // 'revalidation' ';'
-       && lk != 27360               // 'satisfies' ';'
-       && lk != 27361               // 'schema' ';'
-       && lk != 27362               // 'schema-attribute' ';'
-       && lk != 27363               // 'schema-element' ';'
-       && lk != 27364               // 'score' ';'
-       && lk != 27365               // 'self' ';'
-       && lk != 27370               // 'sliding' ';'
-       && lk != 27371               // 'some' ';'
-       && lk != 27372               // 'stable' ';'
-       && lk != 27373               // 'start' ';'
-       && lk != 27376               // 'strict' ';'
-       && lk != 27379               // 'switch' ';'
-       && lk != 27380               // 'text' ';'
-       && lk != 27384               // 'to' ';'
-       && lk != 27385               // 'treat' ';'
-       && lk != 27386               // 'try' ';'
-       && lk != 27387               // 'tumbling' ';'
-       && lk != 27388               // 'type' ';'
-       && lk != 27389               // 'typeswitch' ';'
-       && lk != 27390               // 'union' ';'
-       && lk != 27392               // 'unordered' ';'
-       && lk != 27393               // 'updating' ';'
-       && lk != 27396               // 'validate' ';'
-       && lk != 27397               // 'value' ';'
-       && lk != 27398               // 'variable' ';'
-       && lk != 27399               // 'version' ';'
-       && lk != 27402               // 'where' ';'
-       && lk != 27403               // 'while' ';'
-       && lk != 27406               // 'with' ';'
-       && lk != 27410               // 'xquery' ';'
-       && lk != 90198               // 'break' 'loop'
-       && lk != 90214               // 'continue' 'loop'
-       && lk != 113284              // 'exit' 'returning'
-       && lk != 144389              // Wildcard '}'
-       && lk != 144390              // EQName^Token '}'
-       && lk != 144392              // IntegerLiteral '}'
-       && lk != 144393              // DecimalLiteral '}'
-       && lk != 144394              // DoubleLiteral '}'
-       && lk != 144395              // StringLiteral '}'
-       && lk != 144428              // '.' '}'
-       && lk != 144429              // '..' '}'
-       && lk != 144430              // '/' '}'
-       && lk != 144454              // 'after' '}'
-       && lk != 144456              // 'allowing' '}'
-       && lk != 144457              // 'ancestor' '}'
-       && lk != 144458              // 'ancestor-or-self' '}'
-       && lk != 144459              // 'and' '}'
-       && lk != 144462              // 'array' '}'
-       && lk != 144463              // 'as' '}'
-       && lk != 144464              // 'ascending' '}'
-       && lk != 144465              // 'at' '}'
-       && lk != 144466              // 'attribute' '}'
-       && lk != 144467              // 'base-uri' '}'
-       && lk != 144468              // 'before' '}'
-       && lk != 144469              // 'boundary-space' '}'
-       && lk != 144470              // 'break' '}'
-       && lk != 144472              // 'case' '}'
-       && lk != 144473              // 'cast' '}'
-       && lk != 144474              // 'castable' '}'
-       && lk != 144475              // 'catch' '}'
-       && lk != 144477              // 'child' '}'
-       && lk != 144478              // 'collation' '}'
-       && lk != 144480              // 'comment' '}'
-       && lk != 144481              // 'constraint' '}'
-       && lk != 144482              // 'construction' '}'
-       && lk != 144485              // 'context' '}'
-       && lk != 144486              // 'continue' '}'
-       && lk != 144487              // 'copy' '}'
-       && lk != 144488              // 'copy-namespaces' '}'
-       && lk != 144489              // 'count' '}'
-       && lk != 144490              // 'decimal-format' '}'
-       && lk != 144492              // 'declare' '}'
-       && lk != 144493              // 'default' '}'
-       && lk != 144494              // 'delete' '}'
-       && lk != 144495              // 'descendant' '}'
-       && lk != 144496              // 'descendant-or-self' '}'
-       && lk != 144497              // 'descending' '}'
-       && lk != 144502              // 'div' '}'
-       && lk != 144503              // 'document' '}'
-       && lk != 144504              // 'document-node' '}'
-       && lk != 144505              // 'element' '}'
-       && lk != 144506              // 'else' '}'
-       && lk != 144507              // 'empty' '}'
-       && lk != 144508              // 'empty-sequence' '}'
-       && lk != 144509              // 'encoding' '}'
-       && lk != 144510              // 'end' '}'
-       && lk != 144512              // 'eq' '}'
-       && lk != 144513              // 'every' '}'
-       && lk != 144515              // 'except' '}'
-       && lk != 144516              // 'exit' '}'
-       && lk != 144517              // 'external' '}'
-       && lk != 144518              // 'first' '}'
-       && lk != 144519              // 'following' '}'
-       && lk != 144520              // 'following-sibling' '}'
-       && lk != 144521              // 'for' '}'
-       && lk != 144525              // 'ft-option' '}'
-       && lk != 144529              // 'function' '}'
-       && lk != 144530              // 'ge' '}'
-       && lk != 144532              // 'group' '}'
-       && lk != 144534              // 'gt' '}'
-       && lk != 144535              // 'idiv' '}'
-       && lk != 144536              // 'if' '}'
-       && lk != 144537              // 'import' '}'
-       && lk != 144538              // 'in' '}'
-       && lk != 144539              // 'index' '}'
-       && lk != 144543              // 'insert' '}'
-       && lk != 144544              // 'instance' '}'
-       && lk != 144545              // 'integrity' '}'
-       && lk != 144546              // 'intersect' '}'
-       && lk != 144547              // 'into' '}'
-       && lk != 144548              // 'is' '}'
-       && lk != 144549              // 'item' '}'
-       && lk != 144551              // 'json-item' '}'
-       && lk != 144554              // 'last' '}'
-       && lk != 144555              // 'lax' '}'
-       && lk != 144556              // 'le' '}'
-       && lk != 144558              // 'let' '}'
-       && lk != 144560              // 'loop' '}'
-       && lk != 144562              // 'lt' '}'
-       && lk != 144564              // 'mod' '}'
-       && lk != 144565              // 'modify' '}'
-       && lk != 144566              // 'module' '}'
-       && lk != 144568              // 'namespace' '}'
-       && lk != 144569              // 'namespace-node' '}'
-       && lk != 144570              // 'ne' '}'
-       && lk != 144575              // 'node' '}'
-       && lk != 144576              // 'nodes' '}'
-       && lk != 144578              // 'object' '}'
-       && lk != 144582              // 'only' '}'
-       && lk != 144583              // 'option' '}'
-       && lk != 144584              // 'or' '}'
-       && lk != 144585              // 'order' '}'
-       && lk != 144586              // 'ordered' '}'
-       && lk != 144587              // 'ordering' '}'
-       && lk != 144590              // 'parent' '}'
-       && lk != 144596              // 'preceding' '}'
-       && lk != 144597              // 'preceding-sibling' '}'
-       && lk != 144600              // 'processing-instruction' '}'
-       && lk != 144602              // 'rename' '}'
-       && lk != 144603              // 'replace' '}'
-       && lk != 144604              // 'return' '}'
-       && lk != 144605              // 'returning' '}'
-       && lk != 144606              // 'revalidation' '}'
-       && lk != 144608              // 'satisfies' '}'
-       && lk != 144609              // 'schema' '}'
-       && lk != 144610              // 'schema-attribute' '}'
-       && lk != 144611              // 'schema-element' '}'
-       && lk != 144612              // 'score' '}'
-       && lk != 144613              // 'self' '}'
-       && lk != 144618              // 'sliding' '}'
-       && lk != 144619              // 'some' '}'
-       && lk != 144620              // 'stable' '}'
-       && lk != 144621              // 'start' '}'
-       && lk != 144624              // 'strict' '}'
-       && lk != 144627              // 'switch' '}'
-       && lk != 144628              // 'text' '}'
-       && lk != 144632              // 'to' '}'
-       && lk != 144633              // 'treat' '}'
-       && lk != 144634              // 'try' '}'
-       && lk != 144635              // 'tumbling' '}'
-       && lk != 144636              // 'type' '}'
-       && lk != 144637              // 'typeswitch' '}'
-       && lk != 144638              // 'union' '}'
-       && lk != 144640              // 'unordered' '}'
-       && lk != 144641              // 'updating' '}'
-       && lk != 144644              // 'validate' '}'
-       && lk != 144645              // 'value' '}'
-       && lk != 144646              // 'variable' '}'
-       && lk != 144647              // 'version' '}'
-       && lk != 144650              // 'where' '}'
-       && lk != 144651              // 'while' '}'
-       && lk != 144654              // 'with' '}'
-       && lk != 144658)             // 'xquery' '}'
-      {
-        lk = memoized(6, e0);
-        if (lk == 0)
-        {
-          var b0A = b0; var e0A = e0; var l1A = l1;
-          var b1A = b1; var e1A = e1; var l2A = l2;
-          var b2A = b2; var e2A = e2;
-          try
-          {
-            try_Statement();
-            memoize(6, e0A, -1);
-            continue;
-          }
-          catch (p1A)
-          {
-            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-            b2 = b2A; e2 = e2A; end = e2A; }}
-            memoize(6, e0A, -2);
-            break;
-          }
-        }
-      }
-      if (lk != -1
-       && lk != 16134               // 'variable' '$'
-       && lk != 27141               // Wildcard ';'
-       && lk != 27142               // EQName^Token ';'
-       && lk != 27144               // IntegerLiteral ';'
-       && lk != 27145               // DecimalLiteral ';'
-       && lk != 27146               // DoubleLiteral ';'
-       && lk != 27147               // StringLiteral ';'
-       && lk != 27180               // '.' ';'
-       && lk != 27181               // '..' ';'
-       && lk != 27182               // '/' ';'
-       && lk != 27206               // 'after' ';'
-       && lk != 27208               // 'allowing' ';'
-       && lk != 27209               // 'ancestor' ';'
-       && lk != 27210               // 'ancestor-or-self' ';'
-       && lk != 27211               // 'and' ';'
-       && lk != 27214               // 'array' ';'
-       && lk != 27215               // 'as' ';'
-       && lk != 27216               // 'ascending' ';'
-       && lk != 27217               // 'at' ';'
-       && lk != 27218               // 'attribute' ';'
-       && lk != 27219               // 'base-uri' ';'
-       && lk != 27220               // 'before' ';'
-       && lk != 27221               // 'boundary-space' ';'
-       && lk != 27222               // 'break' ';'
-       && lk != 27224               // 'case' ';'
-       && lk != 27225               // 'cast' ';'
-       && lk != 27226               // 'castable' ';'
-       && lk != 27227               // 'catch' ';'
-       && lk != 27229               // 'child' ';'
-       && lk != 27230               // 'collation' ';'
-       && lk != 27232               // 'comment' ';'
-       && lk != 27233               // 'constraint' ';'
-       && lk != 27234               // 'construction' ';'
-       && lk != 27237               // 'context' ';'
-       && lk != 27238               // 'continue' ';'
-       && lk != 27239               // 'copy' ';'
-       && lk != 27240               // 'copy-namespaces' ';'
-       && lk != 27241               // 'count' ';'
-       && lk != 27242               // 'decimal-format' ';'
-       && lk != 27244               // 'declare' ';'
-       && lk != 27245               // 'default' ';'
-       && lk != 27246               // 'delete' ';'
-       && lk != 27247               // 'descendant' ';'
-       && lk != 27248               // 'descendant-or-self' ';'
-       && lk != 27249               // 'descending' ';'
-       && lk != 27254               // 'div' ';'
-       && lk != 27255               // 'document' ';'
-       && lk != 27256               // 'document-node' ';'
-       && lk != 27257               // 'element' ';'
-       && lk != 27258               // 'else' ';'
-       && lk != 27259               // 'empty' ';'
-       && lk != 27260               // 'empty-sequence' ';'
-       && lk != 27261               // 'encoding' ';'
-       && lk != 27262               // 'end' ';'
-       && lk != 27264               // 'eq' ';'
-       && lk != 27265               // 'every' ';'
-       && lk != 27267               // 'except' ';'
-       && lk != 27268               // 'exit' ';'
-       && lk != 27269               // 'external' ';'
-       && lk != 27270               // 'first' ';'
-       && lk != 27271               // 'following' ';'
-       && lk != 27272               // 'following-sibling' ';'
-       && lk != 27273               // 'for' ';'
-       && lk != 27277               // 'ft-option' ';'
-       && lk != 27281               // 'function' ';'
-       && lk != 27282               // 'ge' ';'
-       && lk != 27284               // 'group' ';'
-       && lk != 27286               // 'gt' ';'
-       && lk != 27287               // 'idiv' ';'
-       && lk != 27288               // 'if' ';'
-       && lk != 27289               // 'import' ';'
-       && lk != 27290               // 'in' ';'
-       && lk != 27291               // 'index' ';'
-       && lk != 27295               // 'insert' ';'
-       && lk != 27296               // 'instance' ';'
-       && lk != 27297               // 'integrity' ';'
-       && lk != 27298               // 'intersect' ';'
-       && lk != 27299               // 'into' ';'
-       && lk != 27300               // 'is' ';'
-       && lk != 27301               // 'item' ';'
-       && lk != 27303               // 'json-item' ';'
-       && lk != 27306               // 'last' ';'
-       && lk != 27307               // 'lax' ';'
-       && lk != 27308               // 'le' ';'
-       && lk != 27310               // 'let' ';'
-       && lk != 27312               // 'loop' ';'
-       && lk != 27314               // 'lt' ';'
-       && lk != 27316               // 'mod' ';'
-       && lk != 27317               // 'modify' ';'
-       && lk != 27318               // 'module' ';'
-       && lk != 27320               // 'namespace' ';'
-       && lk != 27321               // 'namespace-node' ';'
-       && lk != 27322               // 'ne' ';'
-       && lk != 27327               // 'node' ';'
-       && lk != 27328               // 'nodes' ';'
-       && lk != 27330               // 'object' ';'
-       && lk != 27334               // 'only' ';'
-       && lk != 27335               // 'option' ';'
-       && lk != 27336               // 'or' ';'
-       && lk != 27337               // 'order' ';'
-       && lk != 27338               // 'ordered' ';'
-       && lk != 27339               // 'ordering' ';'
-       && lk != 27342               // 'parent' ';'
-       && lk != 27348               // 'preceding' ';'
-       && lk != 27349               // 'preceding-sibling' ';'
-       && lk != 27352               // 'processing-instruction' ';'
-       && lk != 27354               // 'rename' ';'
-       && lk != 27355               // 'replace' ';'
-       && lk != 27356               // 'return' ';'
-       && lk != 27357               // 'returning' ';'
-       && lk != 27358               // 'revalidation' ';'
-       && lk != 27360               // 'satisfies' ';'
-       && lk != 27361               // 'schema' ';'
-       && lk != 27362               // 'schema-attribute' ';'
-       && lk != 27363               // 'schema-element' ';'
-       && lk != 27364               // 'score' ';'
-       && lk != 27365               // 'self' ';'
-       && lk != 27370               // 'sliding' ';'
-       && lk != 27371               // 'some' ';'
-       && lk != 27372               // 'stable' ';'
-       && lk != 27373               // 'start' ';'
-       && lk != 27376               // 'strict' ';'
-       && lk != 27379               // 'switch' ';'
-       && lk != 27380               // 'text' ';'
-       && lk != 27384               // 'to' ';'
-       && lk != 27385               // 'treat' ';'
-       && lk != 27386               // 'try' ';'
-       && lk != 27387               // 'tumbling' ';'
-       && lk != 27388               // 'type' ';'
-       && lk != 27389               // 'typeswitch' ';'
-       && lk != 27390               // 'union' ';'
-       && lk != 27392               // 'unordered' ';'
-       && lk != 27393               // 'updating' ';'
-       && lk != 27396               // 'validate' ';'
-       && lk != 27397               // 'value' ';'
-       && lk != 27398               // 'variable' ';'
-       && lk != 27399               // 'version' ';'
-       && lk != 27402               // 'where' ';'
-       && lk != 27403               // 'while' ';'
-       && lk != 27406               // 'with' ';'
-       && lk != 27410               // 'xquery' ';'
-       && lk != 90198               // 'break' 'loop'
-       && lk != 90214               // 'continue' 'loop'
-       && lk != 113284)             // 'exit' 'returning'
-      {
-        break;
-      }
-      try_Statement();
-    }
-  }
-
-  function parse_StatementsAndExpr()
-  {
-    eventHandler.startNonterminal("StatementsAndExpr", e0);
-    parse_Statements();
-    whitespace();
-    parse_Expr();
-    eventHandler.endNonterminal("StatementsAndExpr", e0);
-  }
-
-  function try_StatementsAndExpr()
-  {
-    try_Statements();
-    try_Expr();
-  }
-
-  function parse_StatementsAndOptionalExpr()
-  {
-    eventHandler.startNonterminal("StatementsAndOptionalExpr", e0);
-    parse_Statements();
-    if (l1 != 25                    // EOF
-     && l1 != 282)                  // '}'
-    {
-      whitespace();
-      parse_Expr();
-    }
-    eventHandler.endNonterminal("StatementsAndOptionalExpr", e0);
-  }
-
-  function try_StatementsAndOptionalExpr()
-  {
-    try_Statements();
-    if (l1 != 25                    // EOF
-     && l1 != 282)                  // '}'
-    {
-      try_Expr();
-    }
-  }
-
-  function parse_Statement()
-  {
-    eventHandler.startNonterminal("Statement", e0);
-    switch (l1)
-    {
-    case 132:                       // 'exit'
-      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    case 137:                       // 'for'
-      lookahead2W(196);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |
-      break;
-    case 174:                       // 'let'
-      lookahead2W(193);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |
-      break;
-    case 250:                       // 'try'
-      lookahead2W(190);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    case 262:                       // 'variable'
-      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |
-      break;
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    case 31:                        // '$'
-    case 32:                        // '%'
-      lookahead2W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 86:                        // 'break'
-    case 102:                       // 'continue'
-      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    case 152:                       // 'if'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-    case 267:                       // 'while'
-      lookahead2W(185);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 2836                  // '{' Wildcard
-     || lk == 3103                  // '$' EQName^Token
-     || lk == 3104                  // '%' EQName^Token
-     || lk == 3348                  // '{' EQName^Token
-     || lk == 4372                  // '{' IntegerLiteral
-     || lk == 4884                  // '{' DecimalLiteral
-     || lk == 5396                  // '{' DoubleLiteral
-     || lk == 5908                  // '{' StringLiteral
-     || lk == 16148                 // '{' '$'
-     || lk == 16660                 // '{' '%'
-     || lk == 17675                 // 'while' '('
-     || lk == 17684                 // '{' '('
-     || lk == 18196                 // '{' '(#'
-     || lk == 20756                 // '{' '+'
-     || lk == 21780                 // '{' '-'
-     || lk == 22804                 // '{' '.'
-     || lk == 23316                 // '{' '..'
-     || lk == 23828                 // '{' '/'
-     || lk == 24340                 // '{' '//'
-     || lk == 27924                 // '{' '<'
-     || lk == 28436                 // '{' '<!--'
-     || lk == 30484                 // '{' '<?'
-     || lk == 34068                 // '{' '@'
-     || lk == 35092                 // '{' '['
-     || lk == 35871                 // '$' 'after'
-     || lk == 35872                 // '%' 'after'
-     || lk == 36116                 // '{' 'after'
-     || lk == 36895                 // '$' 'allowing'
-     || lk == 36896                 // '%' 'allowing'
-     || lk == 37140                 // '{' 'allowing'
-     || lk == 37407                 // '$' 'ancestor'
-     || lk == 37408                 // '%' 'ancestor'
-     || lk == 37652                 // '{' 'ancestor'
-     || lk == 37919                 // '$' 'ancestor-or-self'
-     || lk == 37920                 // '%' 'ancestor-or-self'
-     || lk == 38164                 // '{' 'ancestor-or-self'
-     || lk == 38431                 // '$' 'and'
-     || lk == 38432                 // '%' 'and'
-     || lk == 38676                 // '{' 'and'
-     || lk == 39700                 // '{' 'append'
-     || lk == 39967                 // '$' 'array'
-     || lk == 39968                 // '%' 'array'
-     || lk == 40212                 // '{' 'array'
-     || lk == 40479                 // '$' 'as'
-     || lk == 40480                 // '%' 'as'
-     || lk == 40724                 // '{' 'as'
-     || lk == 40991                 // '$' 'ascending'
-     || lk == 40992                 // '%' 'ascending'
-     || lk == 41236                 // '{' 'ascending'
-     || lk == 41503                 // '$' 'at'
-     || lk == 41504                 // '%' 'at'
-     || lk == 41748                 // '{' 'at'
-     || lk == 42015                 // '$' 'attribute'
-     || lk == 42016                 // '%' 'attribute'
-     || lk == 42260                 // '{' 'attribute'
-     || lk == 42527                 // '$' 'base-uri'
-     || lk == 42528                 // '%' 'base-uri'
-     || lk == 42772                 // '{' 'base-uri'
-     || lk == 43039                 // '$' 'before'
-     || lk == 43040                 // '%' 'before'
-     || lk == 43284                 // '{' 'before'
-     || lk == 43551                 // '$' 'boundary-space'
-     || lk == 43552                 // '%' 'boundary-space'
-     || lk == 43796                 // '{' 'boundary-space'
-     || lk == 44063                 // '$' 'break'
-     || lk == 44064                 // '%' 'break'
-     || lk == 44308                 // '{' 'break'
-     || lk == 45087                 // '$' 'case'
-     || lk == 45088                 // '%' 'case'
-     || lk == 45332                 // '{' 'case'
-     || lk == 45599                 // '$' 'cast'
-     || lk == 45600                 // '%' 'cast'
-     || lk == 45844                 // '{' 'cast'
-     || lk == 46111                 // '$' 'castable'
-     || lk == 46112                 // '%' 'castable'
-     || lk == 46356                 // '{' 'castable'
-     || lk == 46623                 // '$' 'catch'
-     || lk == 46624                 // '%' 'catch'
-     || lk == 46868                 // '{' 'catch'
-     || lk == 47647                 // '$' 'child'
-     || lk == 47648                 // '%' 'child'
-     || lk == 47892                 // '{' 'child'
-     || lk == 48159                 // '$' 'collation'
-     || lk == 48160                 // '%' 'collation'
-     || lk == 48404                 // '{' 'collation'
-     || lk == 49183                 // '$' 'comment'
-     || lk == 49184                 // '%' 'comment'
-     || lk == 49428                 // '{' 'comment'
-     || lk == 49695                 // '$' 'constraint'
-     || lk == 49696                 // '%' 'constraint'
-     || lk == 49940                 // '{' 'constraint'
-     || lk == 50207                 // '$' 'construction'
-     || lk == 50208                 // '%' 'construction'
-     || lk == 50452                 // '{' 'construction'
-     || lk == 51743                 // '$' 'context'
-     || lk == 51744                 // '%' 'context'
-     || lk == 51988                 // '{' 'context'
-     || lk == 52255                 // '$' 'continue'
-     || lk == 52256                 // '%' 'continue'
-     || lk == 52500                 // '{' 'continue'
-     || lk == 52767                 // '$' 'copy'
-     || lk == 52768                 // '%' 'copy'
-     || lk == 53012                 // '{' 'copy'
-     || lk == 53279                 // '$' 'copy-namespaces'
-     || lk == 53280                 // '%' 'copy-namespaces'
-     || lk == 53524                 // '{' 'copy-namespaces'
-     || lk == 53791                 // '$' 'count'
-     || lk == 53792                 // '%' 'count'
-     || lk == 54036                 // '{' 'count'
-     || lk == 54303                 // '$' 'decimal-format'
-     || lk == 54304                 // '%' 'decimal-format'
-     || lk == 54548                 // '{' 'decimal-format'
-     || lk == 55327                 // '$' 'declare'
-     || lk == 55328                 // '%' 'declare'
-     || lk == 55572                 // '{' 'declare'
-     || lk == 55839                 // '$' 'default'
-     || lk == 55840                 // '%' 'default'
-     || lk == 56084                 // '{' 'default'
-     || lk == 56351                 // '$' 'delete'
-     || lk == 56352                 // '%' 'delete'
-     || lk == 56596                 // '{' 'delete'
-     || lk == 56863                 // '$' 'descendant'
-     || lk == 56864                 // '%' 'descendant'
-     || lk == 57108                 // '{' 'descendant'
-     || lk == 57375                 // '$' 'descendant-or-self'
-     || lk == 57376                 // '%' 'descendant-or-self'
-     || lk == 57620                 // '{' 'descendant-or-self'
-     || lk == 57887                 // '$' 'descending'
-     || lk == 57888                 // '%' 'descending'
-     || lk == 58132                 // '{' 'descending'
-     || lk == 60447                 // '$' 'div'
-     || lk == 60448                 // '%' 'div'
-     || lk == 60692                 // '{' 'div'
-     || lk == 60959                 // '$' 'document'
-     || lk == 60960                 // '%' 'document'
-     || lk == 61204                 // '{' 'document'
-     || lk == 61471                 // '$' 'document-node'
-     || lk == 61472                 // '%' 'document-node'
-     || lk == 61716                 // '{' 'document-node'
-     || lk == 61983                 // '$' 'element'
-     || lk == 61984                 // '%' 'element'
-     || lk == 62228                 // '{' 'element'
-     || lk == 62495                 // '$' 'else'
-     || lk == 62496                 // '%' 'else'
-     || lk == 62740                 // '{' 'else'
-     || lk == 63007                 // '$' 'empty'
-     || lk == 63008                 // '%' 'empty'
-     || lk == 63252                 // '{' 'empty'
-     || lk == 63519                 // '$' 'empty-sequence'
-     || lk == 63520                 // '%' 'empty-sequence'
-     || lk == 63764                 // '{' 'empty-sequence'
-     || lk == 64031                 // '$' 'encoding'
-     || lk == 64032                 // '%' 'encoding'
-     || lk == 64276                 // '{' 'encoding'
-     || lk == 64543                 // '$' 'end'
-     || lk == 64544                 // '%' 'end'
-     || lk == 64788                 // '{' 'end'
-     || lk == 65567                 // '$' 'eq'
-     || lk == 65568                 // '%' 'eq'
-     || lk == 65812                 // '{' 'eq'
-     || lk == 66079                 // '$' 'every'
-     || lk == 66080                 // '%' 'every'
-     || lk == 66324                 // '{' 'every'
-     || lk == 67103                 // '$' 'except'
-     || lk == 67104                 // '%' 'except'
-     || lk == 67348                 // '{' 'except'
-     || lk == 67615                 // '$' 'exit'
-     || lk == 67616                 // '%' 'exit'
-     || lk == 67860                 // '{' 'exit'
-     || lk == 68127                 // '$' 'external'
-     || lk == 68128                 // '%' 'external'
-     || lk == 68372                 // '{' 'external'
-     || lk == 68639                 // '$' 'first'
-     || lk == 68640                 // '%' 'first'
-     || lk == 68884                 // '{' 'first'
-     || lk == 69151                 // '$' 'following'
-     || lk == 69152                 // '%' 'following'
-     || lk == 69396                 // '{' 'following'
-     || lk == 69663                 // '$' 'following-sibling'
-     || lk == 69664                 // '%' 'following-sibling'
-     || lk == 69908                 // '{' 'following-sibling'
-     || lk == 70175                 // '$' 'for'
-     || lk == 70176                 // '%' 'for'
-     || lk == 70420                 // '{' 'for'
-     || lk == 72223                 // '$' 'ft-option'
-     || lk == 72224                 // '%' 'ft-option'
-     || lk == 72468                 // '{' 'ft-option'
-     || lk == 74271                 // '$' 'function'
-     || lk == 74272                 // '%' 'function'
-     || lk == 74516                 // '{' 'function'
-     || lk == 74783                 // '$' 'ge'
-     || lk == 74784                 // '%' 'ge'
-     || lk == 75028                 // '{' 'ge'
-     || lk == 75807                 // '$' 'group'
-     || lk == 75808                 // '%' 'group'
-     || lk == 76052                 // '{' 'group'
-     || lk == 76831                 // '$' 'gt'
-     || lk == 76832                 // '%' 'gt'
-     || lk == 77076                 // '{' 'gt'
-     || lk == 77343                 // '$' 'idiv'
-     || lk == 77344                 // '%' 'idiv'
-     || lk == 77588                 // '{' 'idiv'
-     || lk == 77855                 // '$' 'if'
-     || lk == 77856                 // '%' 'if'
-     || lk == 78100                 // '{' 'if'
-     || lk == 78367                 // '$' 'import'
-     || lk == 78368                 // '%' 'import'
-     || lk == 78612                 // '{' 'import'
-     || lk == 78879                 // '$' 'in'
-     || lk == 78880                 // '%' 'in'
-     || lk == 79124                 // '{' 'in'
-     || lk == 79391                 // '$' 'index'
-     || lk == 79392                 // '%' 'index'
-     || lk == 79636                 // '{' 'index'
-     || lk == 81439                 // '$' 'insert'
-     || lk == 81440                 // '%' 'insert'
-     || lk == 81684                 // '{' 'insert'
-     || lk == 81951                 // '$' 'instance'
-     || lk == 81952                 // '%' 'instance'
-     || lk == 82196                 // '{' 'instance'
-     || lk == 82463                 // '$' 'integrity'
-     || lk == 82464                 // '%' 'integrity'
-     || lk == 82708                 // '{' 'integrity'
-     || lk == 82975                 // '$' 'intersect'
-     || lk == 82976                 // '%' 'intersect'
-     || lk == 83220                 // '{' 'intersect'
-     || lk == 83487                 // '$' 'into'
-     || lk == 83488                 // '%' 'into'
-     || lk == 83732                 // '{' 'into'
-     || lk == 83999                 // '$' 'is'
-     || lk == 84000                 // '%' 'is'
-     || lk == 84244                 // '{' 'is'
-     || lk == 84511                 // '$' 'item'
-     || lk == 84512                 // '%' 'item'
-     || lk == 84756                 // '{' 'item'
-     || lk == 85535                 // '$' 'json-item'
-     || lk == 85536                 // '%' 'json-item'
-     || lk == 85780                 // '{' 'json-item'
-     || lk == 87071                 // '$' 'last'
-     || lk == 87072                 // '%' 'last'
-     || lk == 87316                 // '{' 'last'
-     || lk == 87583                 // '$' 'lax'
-     || lk == 87584                 // '%' 'lax'
-     || lk == 87828                 // '{' 'lax'
-     || lk == 88095                 // '$' 'le'
-     || lk == 88096                 // '%' 'le'
-     || lk == 88340                 // '{' 'le'
-     || lk == 89119                 // '$' 'let'
-     || lk == 89120                 // '%' 'let'
-     || lk == 89364                 // '{' 'let'
-     || lk == 90143                 // '$' 'loop'
-     || lk == 90144                 // '%' 'loop'
-     || lk == 90388                 // '{' 'loop'
-     || lk == 91167                 // '$' 'lt'
-     || lk == 91168                 // '%' 'lt'
-     || lk == 91412                 // '{' 'lt'
-     || lk == 92191                 // '$' 'mod'
-     || lk == 92192                 // '%' 'mod'
-     || lk == 92436                 // '{' 'mod'
-     || lk == 92703                 // '$' 'modify'
-     || lk == 92704                 // '%' 'modify'
-     || lk == 92948                 // '{' 'modify'
-     || lk == 93215                 // '$' 'module'
-     || lk == 93216                 // '%' 'module'
-     || lk == 93460                 // '{' 'module'
-     || lk == 94239                 // '$' 'namespace'
-     || lk == 94240                 // '%' 'namespace'
-     || lk == 94484                 // '{' 'namespace'
-     || lk == 94751                 // '$' 'namespace-node'
-     || lk == 94752                 // '%' 'namespace-node'
-     || lk == 94996                 // '{' 'namespace-node'
-     || lk == 95263                 // '$' 'ne'
-     || lk == 95264                 // '%' 'ne'
-     || lk == 95508                 // '{' 'ne'
-     || lk == 97823                 // '$' 'node'
-     || lk == 97824                 // '%' 'node'
-     || lk == 98068                 // '{' 'node'
-     || lk == 98335                 // '$' 'nodes'
-     || lk == 98336                 // '%' 'nodes'
-     || lk == 98580                 // '{' 'nodes'
-     || lk == 99359                 // '$' 'object'
-     || lk == 99360                 // '%' 'object'
-     || lk == 99604                 // '{' 'object'
-     || lk == 101407                // '$' 'only'
-     || lk == 101408                // '%' 'only'
-     || lk == 101652                // '{' 'only'
-     || lk == 101919                // '$' 'option'
-     || lk == 101920                // '%' 'option'
-     || lk == 102164                // '{' 'option'
-     || lk == 102431                // '$' 'or'
-     || lk == 102432                // '%' 'or'
-     || lk == 102676                // '{' 'or'
-     || lk == 102943                // '$' 'order'
-     || lk == 102944                // '%' 'order'
-     || lk == 103188                // '{' 'order'
-     || lk == 103455                // '$' 'ordered'
-     || lk == 103456                // '%' 'ordered'
-     || lk == 103700                // '{' 'ordered'
-     || lk == 103967                // '$' 'ordering'
-     || lk == 103968                // '%' 'ordering'
-     || lk == 104212                // '{' 'ordering'
-     || lk == 105503                // '$' 'parent'
-     || lk == 105504                // '%' 'parent'
-     || lk == 105748                // '{' 'parent'
-     || lk == 108575                // '$' 'preceding'
-     || lk == 108576                // '%' 'preceding'
-     || lk == 108820                // '{' 'preceding'
-     || lk == 109087                // '$' 'preceding-sibling'
-     || lk == 109088                // '%' 'preceding-sibling'
-     || lk == 109332                // '{' 'preceding-sibling'
-     || lk == 110623                // '$' 'processing-instruction'
-     || lk == 110624                // '%' 'processing-instruction'
-     || lk == 110868                // '{' 'processing-instruction'
-     || lk == 111647                // '$' 'rename'
-     || lk == 111648                // '%' 'rename'
-     || lk == 111892                // '{' 'rename'
-     || lk == 112159                // '$' 'replace'
-     || lk == 112160                // '%' 'replace'
-     || lk == 112404                // '{' 'replace'
-     || lk == 112671                // '$' 'return'
-     || lk == 112672                // '%' 'return'
-     || lk == 112916                // '{' 'return'
-     || lk == 113183                // '$' 'returning'
-     || lk == 113184                // '%' 'returning'
-     || lk == 113428                // '{' 'returning'
-     || lk == 113695                // '$' 'revalidation'
-     || lk == 113696                // '%' 'revalidation'
-     || lk == 113940                // '{' 'revalidation'
-     || lk == 114719                // '$' 'satisfies'
-     || lk == 114720                // '%' 'satisfies'
-     || lk == 114964                // '{' 'satisfies'
-     || lk == 115231                // '$' 'schema'
-     || lk == 115232                // '%' 'schema'
-     || lk == 115476                // '{' 'schema'
-     || lk == 115743                // '$' 'schema-attribute'
-     || lk == 115744                // '%' 'schema-attribute'
-     || lk == 115988                // '{' 'schema-attribute'
-     || lk == 116255                // '$' 'schema-element'
-     || lk == 116256                // '%' 'schema-element'
-     || lk == 116500                // '{' 'schema-element'
-     || lk == 116767                // '$' 'score'
-     || lk == 116768                // '%' 'score'
-     || lk == 117012                // '{' 'score'
-     || lk == 117279                // '$' 'self'
-     || lk == 117280                // '%' 'self'
-     || lk == 117524                // '{' 'self'
-     || lk == 119839                // '$' 'sliding'
-     || lk == 119840                // '%' 'sliding'
-     || lk == 120084                // '{' 'sliding'
-     || lk == 120351                // '$' 'some'
-     || lk == 120352                // '%' 'some'
-     || lk == 120596                // '{' 'some'
-     || lk == 120863                // '$' 'stable'
-     || lk == 120864                // '%' 'stable'
-     || lk == 121108                // '{' 'stable'
-     || lk == 121375                // '$' 'start'
-     || lk == 121376                // '%' 'start'
-     || lk == 121620                // '{' 'start'
-     || lk == 122911                // '$' 'strict'
-     || lk == 122912                // '%' 'strict'
-     || lk == 123156                // '{' 'strict'
-     || lk == 124447                // '$' 'switch'
-     || lk == 124448                // '%' 'switch'
-     || lk == 124692                // '{' 'switch'
-     || lk == 124959                // '$' 'text'
-     || lk == 124960                // '%' 'text'
-     || lk == 125204                // '{' 'text'
-     || lk == 127007                // '$' 'to'
-     || lk == 127008                // '%' 'to'
-     || lk == 127252                // '{' 'to'
-     || lk == 127519                // '$' 'treat'
-     || lk == 127520                // '%' 'treat'
-     || lk == 127764                // '{' 'treat'
-     || lk == 128031                // '$' 'try'
-     || lk == 128032                // '%' 'try'
-     || lk == 128276                // '{' 'try'
-     || lk == 128543                // '$' 'tumbling'
-     || lk == 128544                // '%' 'tumbling'
-     || lk == 128788                // '{' 'tumbling'
-     || lk == 129055                // '$' 'type'
-     || lk == 129056                // '%' 'type'
-     || lk == 129300                // '{' 'type'
-     || lk == 129567                // '$' 'typeswitch'
-     || lk == 129568                // '%' 'typeswitch'
-     || lk == 129812                // '{' 'typeswitch'
-     || lk == 130079                // '$' 'union'
-     || lk == 130080                // '%' 'union'
-     || lk == 130324                // '{' 'union'
-     || lk == 131103                // '$' 'unordered'
-     || lk == 131104                // '%' 'unordered'
-     || lk == 131348                // '{' 'unordered'
-     || lk == 131615                // '$' 'updating'
-     || lk == 131616                // '%' 'updating'
-     || lk == 131860                // '{' 'updating'
-     || lk == 133151                // '$' 'validate'
-     || lk == 133152                // '%' 'validate'
-     || lk == 133396                // '{' 'validate'
-     || lk == 133663                // '$' 'value'
-     || lk == 133664                // '%' 'value'
-     || lk == 133908                // '{' 'value'
-     || lk == 134175                // '$' 'variable'
-     || lk == 134176                // '%' 'variable'
-     || lk == 134420                // '{' 'variable'
-     || lk == 134687                // '$' 'version'
-     || lk == 134688                // '%' 'version'
-     || lk == 134932                // '{' 'version'
-     || lk == 136223                // '$' 'where'
-     || lk == 136224                // '%' 'where'
-     || lk == 136468                // '{' 'where'
-     || lk == 136735                // '$' 'while'
-     || lk == 136736                // '%' 'while'
-     || lk == 136980                // '{' 'while'
-     || lk == 138271                // '$' 'with'
-     || lk == 138272                // '%' 'with'
-     || lk == 138516                // '{' 'with'
-     || lk == 140319                // '$' 'xquery'
-     || lk == 140320                // '%' 'xquery'
-     || lk == 140564                // '{' 'xquery'
-     || lk == 141588                // '{' '{'
-     || lk == 142612                // '{' '{|'
-     || lk == 144660)               // '{' '}'
-    {
-      lk = memoized(7, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_ApplyStatement();
-          lk = -1;
-        }
-        catch (p1A)
-        {
-          try
-          {
-            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-            b2 = b2A; e2 = e2A; end = e2A; }}
-            try_AssignStatement();
-            lk = -2;
-          }
-          catch (p2A)
-          {
-            try
-            {
-              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-              b2 = b2A; e2 = e2A; end = e2A; }}
-              try_BlockStatement();
-              lk = -3;
-            }
-            catch (p3A)
-            {
-              try
-              {
-                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-                b2 = b2A; e2 = e2A; end = e2A; }}
-                try_VarDeclStatement();
-                lk = -12;
-              }
-              catch (p12A)
-              {
-                lk = -13;
-              }
-            }
-          }
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(7, e0, lk);
-      }
-    }
-    switch (lk)
-    {
-    case -2:
-      parse_AssignStatement();
-      break;
-    case -3:
-      parse_BlockStatement();
-      break;
-    case 90198:                     // 'break' 'loop'
-      parse_BreakStatement();
-      break;
-    case 90214:                     // 'continue' 'loop'
-      parse_ContinueStatement();
-      break;
-    case 113284:                    // 'exit' 'returning'
-      parse_ExitStatement();
-      break;
-    case 16009:                     // 'for' '$'
-    case 16046:                     // 'let' '$'
-    case 116910:                    // 'let' 'score'
-    case 119945:                    // 'for' 'sliding'
-    case 128649:                    // 'for' 'tumbling'
-      parse_FLWORStatement();
-      break;
-    case 17560:                     // 'if' '('
-      parse_IfStatement();
-      break;
-    case 17651:                     // 'switch' '('
-      parse_SwitchStatement();
-      break;
-    case 141562:                    // 'try' '{'
-      parse_TryCatchStatement();
-      break;
-    case 17661:                     // 'typeswitch' '('
-      parse_TypeswitchStatement();
-      break;
-    case -12:
-    case 16134:                     // 'variable' '$'
-      parse_VarDeclStatement();
-      break;
-    case -13:
-      parse_WhileStatement();
-      break;
-    default:
-      parse_ApplyStatement();
-    }
-    eventHandler.endNonterminal("Statement", e0);
-  }
-
-  function try_Statement()
-  {
-    switch (l1)
-    {
-    case 132:                       // 'exit'
-      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    case 137:                       // 'for'
-      lookahead2W(196);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |
-      break;
-    case 174:                       // 'let'
-      lookahead2W(193);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |
-      break;
-    case 250:                       // 'try'
-      lookahead2W(190);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    case 262:                       // 'variable'
-      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |
-      break;
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    case 31:                        // '$'
-    case 32:                        // '%'
-      lookahead2W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 86:                        // 'break'
-    case 102:                       // 'continue'
-      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    case 152:                       // 'if'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-    case 267:                       // 'while'
-      lookahead2W(185);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 2836                  // '{' Wildcard
-     || lk == 3103                  // '$' EQName^Token
-     || lk == 3104                  // '%' EQName^Token
-     || lk == 3348                  // '{' EQName^Token
-     || lk == 4372                  // '{' IntegerLiteral
-     || lk == 4884                  // '{' DecimalLiteral
-     || lk == 5396                  // '{' DoubleLiteral
-     || lk == 5908                  // '{' StringLiteral
-     || lk == 16148                 // '{' '$'
-     || lk == 16660                 // '{' '%'
-     || lk == 17675                 // 'while' '('
-     || lk == 17684                 // '{' '('
-     || lk == 18196                 // '{' '(#'
-     || lk == 20756                 // '{' '+'
-     || lk == 21780                 // '{' '-'
-     || lk == 22804                 // '{' '.'
-     || lk == 23316                 // '{' '..'
-     || lk == 23828                 // '{' '/'
-     || lk == 24340                 // '{' '//'
-     || lk == 27924                 // '{' '<'
-     || lk == 28436                 // '{' '<!--'
-     || lk == 30484                 // '{' '<?'
-     || lk == 34068                 // '{' '@'
-     || lk == 35092                 // '{' '['
-     || lk == 35871                 // '$' 'after'
-     || lk == 35872                 // '%' 'after'
-     || lk == 36116                 // '{' 'after'
-     || lk == 36895                 // '$' 'allowing'
-     || lk == 36896                 // '%' 'allowing'
-     || lk == 37140                 // '{' 'allowing'
-     || lk == 37407                 // '$' 'ancestor'
-     || lk == 37408                 // '%' 'ancestor'
-     || lk == 37652                 // '{' 'ancestor'
-     || lk == 37919                 // '$' 'ancestor-or-self'
-     || lk == 37920                 // '%' 'ancestor-or-self'
-     || lk == 38164                 // '{' 'ancestor-or-self'
-     || lk == 38431                 // '$' 'and'
-     || lk == 38432                 // '%' 'and'
-     || lk == 38676                 // '{' 'and'
-     || lk == 39700                 // '{' 'append'
-     || lk == 39967                 // '$' 'array'
-     || lk == 39968                 // '%' 'array'
-     || lk == 40212                 // '{' 'array'
-     || lk == 40479                 // '$' 'as'
-     || lk == 40480                 // '%' 'as'
-     || lk == 40724                 // '{' 'as'
-     || lk == 40991                 // '$' 'ascending'
-     || lk == 40992                 // '%' 'ascending'
-     || lk == 41236                 // '{' 'ascending'
-     || lk == 41503                 // '$' 'at'
-     || lk == 41504                 // '%' 'at'
-     || lk == 41748                 // '{' 'at'
-     || lk == 42015                 // '$' 'attribute'
-     || lk == 42016                 // '%' 'attribute'
-     || lk == 42260                 // '{' 'attribute'
-     || lk == 42527                 // '$' 'base-uri'
-     || lk == 42528                 // '%' 'base-uri'
-     || lk == 42772                 // '{' 'base-uri'
-     || lk == 43039                 // '$' 'before'
-     || lk == 43040                 // '%' 'before'
-     || lk == 43284                 // '{' 'before'
-     || lk == 43551                 // '$' 'boundary-space'
-     || lk == 43552                 // '%' 'boundary-space'
-     || lk == 43796                 // '{' 'boundary-space'
-     || lk == 44063                 // '$' 'break'
-     || lk == 44064                 // '%' 'break'
-     || lk == 44308                 // '{' 'break'
-     || lk == 45087                 // '$' 'case'
-     || lk == 45088                 // '%' 'case'
-     || lk == 45332                 // '{' 'case'
-     || lk == 45599                 // '$' 'cast'
-     || lk == 45600                 // '%' 'cast'
-     || lk == 45844                 // '{' 'cast'
-     || lk == 46111                 // '$' 'castable'
-     || lk == 46112                 // '%' 'castable'
-     || lk == 46356                 // '{' 'castable'
-     || lk == 46623                 // '$' 'catch'
-     || lk == 46624                 // '%' 'catch'
-     || lk == 46868                 // '{' 'catch'
-     || lk == 47647                 // '$' 'child'
-     || lk == 47648                 // '%' 'child'
-     || lk == 47892                 // '{' 'child'
-     || lk == 48159                 // '$' 'collation'
-     || lk == 48160                 // '%' 'collation'
-     || lk == 48404                 // '{' 'collation'
-     || lk == 49183                 // '$' 'comment'
-     || lk == 49184                 // '%' 'comment'
-     || lk == 49428                 // '{' 'comment'
-     || lk == 49695                 // '$' 'constraint'
-     || lk == 49696                 // '%' 'constraint'
-     || lk == 49940                 // '{' 'constraint'
-     || lk == 50207                 // '$' 'construction'
-     || lk == 50208                 // '%' 'construction'
-     || lk == 50452                 // '{' 'construction'
-     || lk == 51743                 // '$' 'context'
-     || lk == 51744                 // '%' 'context'
-     || lk == 51988                 // '{' 'context'
-     || lk == 52255                 // '$' 'continue'
-     || lk == 52256                 // '%' 'continue'
-     || lk == 52500                 // '{' 'continue'
-     || lk == 52767                 // '$' 'copy'
-     || lk == 52768                 // '%' 'copy'
-     || lk == 53012                 // '{' 'copy'
-     || lk == 53279                 // '$' 'copy-namespaces'
-     || lk == 53280                 // '%' 'copy-namespaces'
-     || lk == 53524                 // '{' 'copy-namespaces'
-     || lk == 53791                 // '$' 'count'
-     || lk == 53792                 // '%' 'count'
-     || lk == 54036                 // '{' 'count'
-     || lk == 54303                 // '$' 'decimal-format'
-     || lk == 54304                 // '%' 'decimal-format'
-     || lk == 54548                 // '{' 'decimal-format'
-     || lk == 55327                 // '$' 'declare'
-     || lk == 55328                 // '%' 'declare'
-     || lk == 55572                 // '{' 'declare'
-     || lk == 55839                 // '$' 'default'
-     || lk == 55840                 // '%' 'default'
-     || lk == 56084                 // '{' 'default'
-     || lk == 56351                 // '$' 'delete'
-     || lk == 56352                 // '%' 'delete'
-     || lk == 56596                 // '{' 'delete'
-     || lk == 56863                 // '$' 'descendant'
-     || lk == 56864                 // '%' 'descendant'
-     || lk == 57108                 // '{' 'descendant'
-     || lk == 57375                 // '$' 'descendant-or-self'
-     || lk == 57376                 // '%' 'descendant-or-self'
-     || lk == 57620                 // '{' 'descendant-or-self'
-     || lk == 57887                 // '$' 'descending'
-     || lk == 57888                 // '%' 'descending'
-     || lk == 58132                 // '{' 'descending'
-     || lk == 60447                 // '$' 'div'
-     || lk == 60448                 // '%' 'div'
-     || lk == 60692                 // '{' 'div'
-     || lk == 60959                 // '$' 'document'
-     || lk == 60960                 // '%' 'document'
-     || lk == 61204                 // '{' 'document'
-     || lk == 61471                 // '$' 'document-node'
-     || lk == 61472                 // '%' 'document-node'
-     || lk == 61716                 // '{' 'document-node'
-     || lk == 61983                 // '$' 'element'
-     || lk == 61984                 // '%' 'element'
-     || lk == 62228                 // '{' 'element'
-     || lk == 62495                 // '$' 'else'
-     || lk == 62496                 // '%' 'else'
-     || lk == 62740                 // '{' 'else'
-     || lk == 63007                 // '$' 'empty'
-     || lk == 63008                 // '%' 'empty'
-     || lk == 63252                 // '{' 'empty'
-     || lk == 63519                 // '$' 'empty-sequence'
-     || lk == 63520                 // '%' 'empty-sequence'
-     || lk == 63764                 // '{' 'empty-sequence'
-     || lk == 64031                 // '$' 'encoding'
-     || lk == 64032                 // '%' 'encoding'
-     || lk == 64276                 // '{' 'encoding'
-     || lk == 64543                 // '$' 'end'
-     || lk == 64544                 // '%' 'end'
-     || lk == 64788                 // '{' 'end'
-     || lk == 65567                 // '$' 'eq'
-     || lk == 65568                 // '%' 'eq'
-     || lk == 65812                 // '{' 'eq'
-     || lk == 66079                 // '$' 'every'
-     || lk == 66080                 // '%' 'every'
-     || lk == 66324                 // '{' 'every'
-     || lk == 67103                 // '$' 'except'
-     || lk == 67104                 // '%' 'except'
-     || lk == 67348                 // '{' 'except'
-     || lk == 67615                 // '$' 'exit'
-     || lk == 67616                 // '%' 'exit'
-     || lk == 67860                 // '{' 'exit'
-     || lk == 68127                 // '$' 'external'
-     || lk == 68128                 // '%' 'external'
-     || lk == 68372                 // '{' 'external'
-     || lk == 68639                 // '$' 'first'
-     || lk == 68640                 // '%' 'first'
-     || lk == 68884                 // '{' 'first'
-     || lk == 69151                 // '$' 'following'
-     || lk == 69152                 // '%' 'following'
-     || lk == 69396                 // '{' 'following'
-     || lk == 69663                 // '$' 'following-sibling'
-     || lk == 69664                 // '%' 'following-sibling'
-     || lk == 69908                 // '{' 'following-sibling'
-     || lk == 70175                 // '$' 'for'
-     || lk == 70176                 // '%' 'for'
-     || lk == 70420                 // '{' 'for'
-     || lk == 72223                 // '$' 'ft-option'
-     || lk == 72224                 // '%' 'ft-option'
-     || lk == 72468                 // '{' 'ft-option'
-     || lk == 74271                 // '$' 'function'
-     || lk == 74272                 // '%' 'function'
-     || lk == 74516                 // '{' 'function'
-     || lk == 74783                 // '$' 'ge'
-     || lk == 74784                 // '%' 'ge'
-     || lk == 75028                 // '{' 'ge'
-     || lk == 75807                 // '$' 'group'
-     || lk == 75808                 // '%' 'group'
-     || lk == 76052                 // '{' 'group'
-     || lk == 76831                 // '$' 'gt'
-     || lk == 76832                 // '%' 'gt'
-     || lk == 77076                 // '{' 'gt'
-     || lk == 77343                 // '$' 'idiv'
-     || lk == 77344                 // '%' 'idiv'
-     || lk == 77588                 // '{' 'idiv'
-     || lk == 77855                 // '$' 'if'
-     || lk == 77856                 // '%' 'if'
-     || lk == 78100                 // '{' 'if'
-     || lk == 78367                 // '$' 'import'
-     || lk == 78368                 // '%' 'import'
-     || lk == 78612                 // '{' 'import'
-     || lk == 78879                 // '$' 'in'
-     || lk == 78880                 // '%' 'in'
-     || lk == 79124                 // '{' 'in'
-     || lk == 79391                 // '$' 'index'
-     || lk == 79392                 // '%' 'index'
-     || lk == 79636                 // '{' 'index'
-     || lk == 81439                 // '$' 'insert'
-     || lk == 81440                 // '%' 'insert'
-     || lk == 81684                 // '{' 'insert'
-     || lk == 81951                 // '$' 'instance'
-     || lk == 81952                 // '%' 'instance'
-     || lk == 82196                 // '{' 'instance'
-     || lk == 82463                 // '$' 'integrity'
-     || lk == 82464                 // '%' 'integrity'
-     || lk == 82708                 // '{' 'integrity'
-     || lk == 82975                 // '$' 'intersect'
-     || lk == 82976                 // '%' 'intersect'
-     || lk == 83220                 // '{' 'intersect'
-     || lk == 83487                 // '$' 'into'
-     || lk == 83488                 // '%' 'into'
-     || lk == 83732                 // '{' 'into'
-     || lk == 83999                 // '$' 'is'
-     || lk == 84000                 // '%' 'is'
-     || lk == 84244                 // '{' 'is'
-     || lk == 84511                 // '$' 'item'
-     || lk == 84512                 // '%' 'item'
-     || lk == 84756                 // '{' 'item'
-     || lk == 85535                 // '$' 'json-item'
-     || lk == 85536                 // '%' 'json-item'
-     || lk == 85780                 // '{' 'json-item'
-     || lk == 87071                 // '$' 'last'
-     || lk == 87072                 // '%' 'last'
-     || lk == 87316                 // '{' 'last'
-     || lk == 87583                 // '$' 'lax'
-     || lk == 87584                 // '%' 'lax'
-     || lk == 87828                 // '{' 'lax'
-     || lk == 88095                 // '$' 'le'
-     || lk == 88096                 // '%' 'le'
-     || lk == 88340                 // '{' 'le'
-     || lk == 89119                 // '$' 'let'
-     || lk == 89120                 // '%' 'let'
-     || lk == 89364                 // '{' 'let'
-     || lk == 90143                 // '$' 'loop'
-     || lk == 90144                 // '%' 'loop'
-     || lk == 90388                 // '{' 'loop'
-     || lk == 91167                 // '$' 'lt'
-     || lk == 91168                 // '%' 'lt'
-     || lk == 91412                 // '{' 'lt'
-     || lk == 92191                 // '$' 'mod'
-     || lk == 92192                 // '%' 'mod'
-     || lk == 92436                 // '{' 'mod'
-     || lk == 92703                 // '$' 'modify'
-     || lk == 92704                 // '%' 'modify'
-     || lk == 92948                 // '{' 'modify'
-     || lk == 93215                 // '$' 'module'
-     || lk == 93216                 // '%' 'module'
-     || lk == 93460                 // '{' 'module'
-     || lk == 94239                 // '$' 'namespace'
-     || lk == 94240                 // '%' 'namespace'
-     || lk == 94484                 // '{' 'namespace'
-     || lk == 94751                 // '$' 'namespace-node'
-     || lk == 94752                 // '%' 'namespace-node'
-     || lk == 94996                 // '{' 'namespace-node'
-     || lk == 95263                 // '$' 'ne'
-     || lk == 95264                 // '%' 'ne'
-     || lk == 95508                 // '{' 'ne'
-     || lk == 97823                 // '$' 'node'
-     || lk == 97824                 // '%' 'node'
-     || lk == 98068                 // '{' 'node'
-     || lk == 98335                 // '$' 'nodes'
-     || lk == 98336                 // '%' 'nodes'
-     || lk == 98580                 // '{' 'nodes'
-     || lk == 99359                 // '$' 'object'
-     || lk == 99360                 // '%' 'object'
-     || lk == 99604                 // '{' 'object'
-     || lk == 101407                // '$' 'only'
-     || lk == 101408                // '%' 'only'
-     || lk == 101652                // '{' 'only'
-     || lk == 101919                // '$' 'option'
-     || lk == 101920                // '%' 'option'
-     || lk == 102164                // '{' 'option'
-     || lk == 102431                // '$' 'or'
-     || lk == 102432                // '%' 'or'
-     || lk == 102676                // '{' 'or'
-     || lk == 102943                // '$' 'order'
-     || lk == 102944                // '%' 'order'
-     || lk == 103188                // '{' 'order'
-     || lk == 103455                // '$' 'ordered'
-     || lk == 103456                // '%' 'ordered'
-     || lk == 103700                // '{' 'ordered'
-     || lk == 103967                // '$' 'ordering'
-     || lk == 103968                // '%' 'ordering'
-     || lk == 104212                // '{' 'ordering'
-     || lk == 105503                // '$' 'parent'
-     || lk == 105504                // '%' 'parent'
-     || lk == 105748                // '{' 'parent'
-     || lk == 108575                // '$' 'preceding'
-     || lk == 108576                // '%' 'preceding'
-     || lk == 108820                // '{' 'preceding'
-     || lk == 109087                // '$' 'preceding-sibling'
-     || lk == 109088                // '%' 'preceding-sibling'
-     || lk == 109332                // '{' 'preceding-sibling'
-     || lk == 110623                // '$' 'processing-instruction'
-     || lk == 110624                // '%' 'processing-instruction'
-     || lk == 110868                // '{' 'processing-instruction'
-     || lk == 111647                // '$' 'rename'
-     || lk == 111648                // '%' 'rename'
-     || lk == 111892                // '{' 'rename'
-     || lk == 112159                // '$' 'replace'
-     || lk == 112160                // '%' 'replace'
-     || lk == 112404                // '{' 'replace'
-     || lk == 112671                // '$' 'return'
-     || lk == 112672                // '%' 'return'
-     || lk == 112916                // '{' 'return'
-     || lk == 113183                // '$' 'returning'
-     || lk == 113184                // '%' 'returning'
-     || lk == 113428                // '{' 'returning'
-     || lk == 113695                // '$' 'revalidation'
-     || lk == 113696                // '%' 'revalidation'
-     || lk == 113940                // '{' 'revalidation'
-     || lk == 114719                // '$' 'satisfies'
-     || lk == 114720                // '%' 'satisfies'
-     || lk == 114964                // '{' 'satisfies'
-     || lk == 115231                // '$' 'schema'
-     || lk == 115232                // '%' 'schema'
-     || lk == 115476                // '{' 'schema'
-     || lk == 115743                // '$' 'schema-attribute'
-     || lk == 115744                // '%' 'schema-attribute'
-     || lk == 115988                // '{' 'schema-attribute'
-     || lk == 116255                // '$' 'schema-element'
-     || lk == 116256                // '%' 'schema-element'
-     || lk == 116500                // '{' 'schema-element'
-     || lk == 116767                // '$' 'score'
-     || lk == 116768                // '%' 'score'
-     || lk == 117012                // '{' 'score'
-     || lk == 117279                // '$' 'self'
-     || lk == 117280                // '%' 'self'
-     || lk == 117524                // '{' 'self'
-     || lk == 119839                // '$' 'sliding'
-     || lk == 119840                // '%' 'sliding'
-     || lk == 120084                // '{' 'sliding'
-     || lk == 120351                // '$' 'some'
-     || lk == 120352                // '%' 'some'
-     || lk == 120596                // '{' 'some'
-     || lk == 120863                // '$' 'stable'
-     || lk == 120864                // '%' 'stable'
-     || lk == 121108                // '{' 'stable'
-     || lk == 121375                // '$' 'start'
-     || lk == 121376                // '%' 'start'
-     || lk == 121620                // '{' 'start'
-     || lk == 122911                // '$' 'strict'
-     || lk == 122912                // '%' 'strict'
-     || lk == 123156                // '{' 'strict'
-     || lk == 124447                // '$' 'switch'
-     || lk == 124448                // '%' 'switch'
-     || lk == 124692                // '{' 'switch'
-     || lk == 124959                // '$' 'text'
-     || lk == 124960                // '%' 'text'
-     || lk == 125204                // '{' 'text'
-     || lk == 127007                // '$' 'to'
-     || lk == 127008                // '%' 'to'
-     || lk == 127252                // '{' 'to'
-     || lk == 127519                // '$' 'treat'
-     || lk == 127520                // '%' 'treat'
-     || lk == 127764                // '{' 'treat'
-     || lk == 128031                // '$' 'try'
-     || lk == 128032                // '%' 'try'
-     || lk == 128276                // '{' 'try'
-     || lk == 128543                // '$' 'tumbling'
-     || lk == 128544                // '%' 'tumbling'
-     || lk == 128788                // '{' 'tumbling'
-     || lk == 129055                // '$' 'type'
-     || lk == 129056                // '%' 'type'
-     || lk == 129300                // '{' 'type'
-     || lk == 129567                // '$' 'typeswitch'
-     || lk == 129568                // '%' 'typeswitch'
-     || lk == 129812                // '{' 'typeswitch'
-     || lk == 130079                // '$' 'union'
-     || lk == 130080                // '%' 'union'
-     || lk == 130324                // '{' 'union'
-     || lk == 131103                // '$' 'unordered'
-     || lk == 131104                // '%' 'unordered'
-     || lk == 131348                // '{' 'unordered'
-     || lk == 131615                // '$' 'updating'
-     || lk == 131616                // '%' 'updating'
-     || lk == 131860                // '{' 'updating'
-     || lk == 133151                // '$' 'validate'
-     || lk == 133152                // '%' 'validate'
-     || lk == 133396                // '{' 'validate'
-     || lk == 133663                // '$' 'value'
-     || lk == 133664                // '%' 'value'
-     || lk == 133908                // '{' 'value'
-     || lk == 134175                // '$' 'variable'
-     || lk == 134176                // '%' 'variable'
-     || lk == 134420                // '{' 'variable'
-     || lk == 134687                // '$' 'version'
-     || lk == 134688                // '%' 'version'
-     || lk == 134932                // '{' 'version'
-     || lk == 136223                // '$' 'where'
-     || lk == 136224                // '%' 'where'
-     || lk == 136468                // '{' 'where'
-     || lk == 136735                // '$' 'while'
-     || lk == 136736                // '%' 'while'
-     || lk == 136980                // '{' 'while'
-     || lk == 138271                // '$' 'with'
-     || lk == 138272                // '%' 'with'
-     || lk == 138516                // '{' 'with'
-     || lk == 140319                // '$' 'xquery'
-     || lk == 140320                // '%' 'xquery'
-     || lk == 140564                // '{' 'xquery'
-     || lk == 141588                // '{' '{'
-     || lk == 142612                // '{' '{|'
-     || lk == 144660)               // '{' '}'
-    {
-      lk = memoized(7, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_ApplyStatement();
-          memoize(7, e0A, -1);
-          lk = -14;
-        }
-        catch (p1A)
-        {
-          try
-          {
-            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-            b2 = b2A; e2 = e2A; end = e2A; }}
-            try_AssignStatement();
-            memoize(7, e0A, -2);
-            lk = -14;
-          }
-          catch (p2A)
-          {
-            try
-            {
-              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-              b2 = b2A; e2 = e2A; end = e2A; }}
-              try_BlockStatement();
-              memoize(7, e0A, -3);
-              lk = -14;
-            }
-            catch (p3A)
-            {
-              try
-              {
-                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-                b2 = b2A; e2 = e2A; end = e2A; }}
-                try_VarDeclStatement();
-                memoize(7, e0A, -12);
-                lk = -14;
-              }
-              catch (p12A)
-              {
-                lk = -13;
-                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-                b2 = b2A; e2 = e2A; end = e2A; }}
-                memoize(7, e0A, -13);
-              }
-            }
-          }
-        }
-      }
-    }
-    switch (lk)
-    {
-    case -2:
-      try_AssignStatement();
-      break;
-    case -3:
-      try_BlockStatement();
-      break;
-    case 90198:                     // 'break' 'loop'
-      try_BreakStatement();
-      break;
-    case 90214:                     // 'continue' 'loop'
-      try_ContinueStatement();
-      break;
-    case 113284:                    // 'exit' 'returning'
-      try_ExitStatement();
-      break;
-    case 16009:                     // 'for' '$'
-    case 16046:                     // 'let' '$'
-    case 116910:                    // 'let' 'score'
-    case 119945:                    // 'for' 'sliding'
-    case 128649:                    // 'for' 'tumbling'
-      try_FLWORStatement();
-      break;
-    case 17560:                     // 'if' '('
-      try_IfStatement();
-      break;
-    case 17651:                     // 'switch' '('
-      try_SwitchStatement();
-      break;
-    case 141562:                    // 'try' '{'
-      try_TryCatchStatement();
-      break;
-    case 17661:                     // 'typeswitch' '('
-      try_TypeswitchStatement();
-      break;
-    case -12:
-    case 16134:                     // 'variable' '$'
-      try_VarDeclStatement();
-      break;
-    case -13:
-      try_WhileStatement();
-      break;
-    case -14:
-      break;
-    default:
-      try_ApplyStatement();
-    }
-  }
-
-  function parse_ApplyStatement()
-  {
-    eventHandler.startNonterminal("ApplyStatement", e0);
-    parse_ExprSimple();
-    shift(53);                      // ';'
-    eventHandler.endNonterminal("ApplyStatement", e0);
-  }
-
-  function try_ApplyStatement()
-  {
-    try_ExprSimple();
-    shiftT(53);                     // ';'
-  }
-
-  function parse_AssignStatement()
-  {
-    eventHandler.startNonterminal("AssignStatement", e0);
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(27);                // S^WS | '(:' | ':='
-    shift(52);                      // ':='
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    shift(53);                      // ';'
-    eventHandler.endNonterminal("AssignStatement", e0);
-  }
-
-  function try_AssignStatement()
-  {
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-    lookahead1W(27);                // S^WS | '(:' | ':='
-    shiftT(52);                     // ':='
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    shiftT(53);                     // ';'
-  }
-
-  function parse_BlockStatement()
-  {
-    eventHandler.startNonterminal("BlockStatement", e0);
-    shift(276);                     // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statements();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("BlockStatement", e0);
-  }
-
-  function try_BlockStatement()
-  {
-    shiftT(276);                    // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statements();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_BreakStatement()
-  {
-    eventHandler.startNonterminal("BreakStatement", e0);
-    shift(86);                      // 'break'
-    lookahead1W(59);                // S^WS | '(:' | 'loop'
-    shift(176);                     // 'loop'
-    lookahead1W(28);                // S^WS | '(:' | ';'
-    shift(53);                      // ';'
-    eventHandler.endNonterminal("BreakStatement", e0);
-  }
-
-  function try_BreakStatement()
-  {
-    shiftT(86);                     // 'break'
-    lookahead1W(59);                // S^WS | '(:' | 'loop'
-    shiftT(176);                    // 'loop'
-    lookahead1W(28);                // S^WS | '(:' | ';'
-    shiftT(53);                     // ';'
-  }
-
-  function parse_ContinueStatement()
-  {
-    eventHandler.startNonterminal("ContinueStatement", e0);
-    shift(102);                     // 'continue'
-    lookahead1W(59);                // S^WS | '(:' | 'loop'
-    shift(176);                     // 'loop'
-    lookahead1W(28);                // S^WS | '(:' | ';'
-    shift(53);                      // ';'
-    eventHandler.endNonterminal("ContinueStatement", e0);
-  }
-
-  function try_ContinueStatement()
-  {
-    shiftT(102);                    // 'continue'
-    lookahead1W(59);                // S^WS | '(:' | 'loop'
-    shiftT(176);                    // 'loop'
-    lookahead1W(28);                // S^WS | '(:' | ';'
-    shiftT(53);                     // ';'
-  }
-
-  function parse_ExitStatement()
-  {
-    eventHandler.startNonterminal("ExitStatement", e0);
-    shift(132);                     // 'exit'
-    lookahead1W(71);                // S^WS | '(:' | 'returning'
-    shift(221);                     // 'returning'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    shift(53);                      // ';'
-    eventHandler.endNonterminal("ExitStatement", e0);
-  }
-
-  function try_ExitStatement()
-  {
-    shiftT(132);                    // 'exit'
-    lookahead1W(71);                // S^WS | '(:' | 'returning'
-    shiftT(221);                    // 'returning'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    shiftT(53);                     // ';'
-  }
-
-  function parse_FLWORStatement()
-  {
-    eventHandler.startNonterminal("FLWORStatement", e0);
-    parse_InitialClause();
-    for (;;)
-    {
-      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |
-      if (l1 == 220)                // 'return'
-      {
-        break;
-      }
-      whitespace();
-      parse_IntermediateClause();
-    }
-    whitespace();
-    parse_ReturnStatement();
-    eventHandler.endNonterminal("FLWORStatement", e0);
-  }
-
-  function try_FLWORStatement()
-  {
-    try_InitialClause();
-    for (;;)
-    {
-      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |
-      if (l1 == 220)                // 'return'
-      {
-        break;
-      }
-      try_IntermediateClause();
-    }
-    try_ReturnStatement();
-  }
-
-  function parse_ReturnStatement()
-  {
-    eventHandler.startNonterminal("ReturnStatement", e0);
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    eventHandler.endNonterminal("ReturnStatement", e0);
-  }
-
-  function try_ReturnStatement()
-  {
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-  }
-
-  function parse_IfStatement()
-  {
-    eventHandler.startNonterminal("IfStatement", e0);
-    shift(152);                     // 'if'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(37);                      // ')'
-    lookahead1W(77);                // S^WS | '(:' | 'then'
-    shift(245);                     // 'then'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    lookahead1W(48);                // S^WS | '(:' | 'else'
-    shift(122);                     // 'else'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    eventHandler.endNonterminal("IfStatement", e0);
-  }
-
-  function try_IfStatement()
-  {
-    shiftT(152);                    // 'if'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(37);                     // ')'
-    lookahead1W(77);                // S^WS | '(:' | 'then'
-    shiftT(245);                    // 'then'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-    lookahead1W(48);                // S^WS | '(:' | 'else'
-    shiftT(122);                    // 'else'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-  }
-
-  function parse_SwitchStatement()
-  {
-    eventHandler.startNonterminal("SwitchStatement", e0);
-    shift(243);                     // 'switch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(37);                      // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      whitespace();
-      parse_SwitchCaseStatement();
-      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shift(109);                     // 'default'
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    eventHandler.endNonterminal("SwitchStatement", e0);
-  }
-
-  function try_SwitchStatement()
-  {
-    shiftT(243);                    // 'switch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(37);                     // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      try_SwitchCaseStatement();
-      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shiftT(109);                    // 'default'
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-  }
-
-  function parse_SwitchCaseStatement()
-  {
-    eventHandler.startNonterminal("SwitchCaseStatement", e0);
-    for (;;)
-    {
-      shift(88);                    // 'case'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_SwitchCaseOperand();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    eventHandler.endNonterminal("SwitchCaseStatement", e0);
-  }
-
-  function try_SwitchCaseStatement()
-  {
-    for (;;)
-    {
-      shiftT(88);                   // 'case'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_SwitchCaseOperand();
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-  }
-
-  function parse_TryCatchStatement()
-  {
-    eventHandler.startNonterminal("TryCatchStatement", e0);
-    shift(250);                     // 'try'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    whitespace();
-    parse_BlockStatement();
-    for (;;)
-    {
-      lookahead1W(36);              // S^WS | '(:' | 'catch'
-      shift(91);                    // 'catch'
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_CatchErrorList();
-      whitespace();
-      parse_BlockStatement();
-      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 91:                      // 'catch'
-        lookahead2W(276);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk == 38491               // 'catch' 'and'
-       || lk == 45659               // 'catch' 'cast'
-       || lk == 46171               // 'catch' 'castable'
-       || lk == 60507               // 'catch' 'div'
-       || lk == 65627               // 'catch' 'eq'
-       || lk == 67163               // 'catch' 'except'
-       || lk == 74843               // 'catch' 'ge'
-       || lk == 76891               // 'catch' 'gt'
-       || lk == 77403               // 'catch' 'idiv'
-       || lk == 82011               // 'catch' 'instance'
-       || lk == 83035               // 'catch' 'intersect'
-       || lk == 84059               // 'catch' 'is'
-       || lk == 88155               // 'catch' 'le'
-       || lk == 91227               // 'catch' 'lt'
-       || lk == 92251               // 'catch' 'mod'
-       || lk == 95323               // 'catch' 'ne'
-       || lk == 102491              // 'catch' 'or'
-       || lk == 127067              // 'catch' 'to'
-       || lk == 127579              // 'catch' 'treat'
-       || lk == 130139)             // 'catch' 'union'
-      {
-        lk = memoized(8, e0);
-        if (lk == 0)
-        {
-          var b0A = b0; var e0A = e0; var l1A = l1;
-          var b1A = b1; var e1A = e1; var l2A = l2;
-          var b2A = b2; var e2A = e2;
-          try
-          {
-            lookahead1W(36);        // S^WS | '(:' | 'catch'
-            shiftT(91);             // 'catch'
-            lookahead1W(255);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-            try_CatchErrorList();
-            try_BlockStatement();
-            lk = -1;
-          }
-          catch (p1A)
-          {
-            lk = -2;
-          }
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(8, e0, lk);
-        }
-      }
-      if (lk != -1
-       && lk != 2651                // 'catch' Wildcard
-       && lk != 3163                // 'catch' EQName^Token
-       && lk != 35931               // 'catch' 'after'
-       && lk != 36955               // 'catch' 'allowing'
-       && lk != 37467               // 'catch' 'ancestor'
-       && lk != 37979               // 'catch' 'ancestor-or-self'
-       && lk != 40027               // 'catch' 'array'
-       && lk != 40539               // 'catch' 'as'
-       && lk != 41051               // 'catch' 'ascending'
-       && lk != 41563               // 'catch' 'at'
-       && lk != 42075               // 'catch' 'attribute'
-       && lk != 42587               // 'catch' 'base-uri'
-       && lk != 43099               // 'catch' 'before'
-       && lk != 43611               // 'catch' 'boundary-space'
-       && lk != 44123               // 'catch' 'break'
-       && lk != 45147               // 'catch' 'case'
-       && lk != 46683               // 'catch' 'catch'
-       && lk != 47707               // 'catch' 'child'
-       && lk != 48219               // 'catch' 'collation'
-       && lk != 49243               // 'catch' 'comment'
-       && lk != 49755               // 'catch' 'constraint'
-       && lk != 50267               // 'catch' 'construction'
-       && lk != 51803               // 'catch' 'context'
-       && lk != 52315               // 'catch' 'continue'
-       && lk != 52827               // 'catch' 'copy'
-       && lk != 53339               // 'catch' 'copy-namespaces'
-       && lk != 53851               // 'catch' 'count'
-       && lk != 54363               // 'catch' 'decimal-format'
-       && lk != 55387               // 'catch' 'declare'
-       && lk != 55899               // 'catch' 'default'
-       && lk != 56411               // 'catch' 'delete'
-       && lk != 56923               // 'catch' 'descendant'
-       && lk != 57435               // 'catch' 'descendant-or-self'
-       && lk != 57947               // 'catch' 'descending'
-       && lk != 61019               // 'catch' 'document'
-       && lk != 61531               // 'catch' 'document-node'
-       && lk != 62043               // 'catch' 'element'
-       && lk != 62555               // 'catch' 'else'
-       && lk != 63067               // 'catch' 'empty'
-       && lk != 63579               // 'catch' 'empty-sequence'
-       && lk != 64091               // 'catch' 'encoding'
-       && lk != 64603               // 'catch' 'end'
-       && lk != 66139               // 'catch' 'every'
-       && lk != 67675               // 'catch' 'exit'
-       && lk != 68187               // 'catch' 'external'
-       && lk != 68699               // 'catch' 'first'
-       && lk != 69211               // 'catch' 'following'
-       && lk != 69723               // 'catch' 'following-sibling'
-       && lk != 70235               // 'catch' 'for'
-       && lk != 72283               // 'catch' 'ft-option'
-       && lk != 74331               // 'catch' 'function'
-       && lk != 75867               // 'catch' 'group'
-       && lk != 77915               // 'catch' 'if'
-       && lk != 78427               // 'catch' 'import'
-       && lk != 78939               // 'catch' 'in'
-       && lk != 79451               // 'catch' 'index'
-       && lk != 81499               // 'catch' 'insert'
-       && lk != 82523               // 'catch' 'integrity'
-       && lk != 83547               // 'catch' 'into'
-       && lk != 84571               // 'catch' 'item'
-       && lk != 85595               // 'catch' 'json-item'
-       && lk != 87131               // 'catch' 'last'
-       && lk != 87643               // 'catch' 'lax'
-       && lk != 89179               // 'catch' 'let'
-       && lk != 90203               // 'catch' 'loop'
-       && lk != 92763               // 'catch' 'modify'
-       && lk != 93275               // 'catch' 'module'
-       && lk != 94299               // 'catch' 'namespace'
-       && lk != 94811               // 'catch' 'namespace-node'
-       && lk != 97883               // 'catch' 'node'
-       && lk != 98395               // 'catch' 'nodes'
-       && lk != 99419               // 'catch' 'object'
-       && lk != 101467              // 'catch' 'only'
-       && lk != 101979              // 'catch' 'option'
-       && lk != 103003              // 'catch' 'order'
-       && lk != 103515              // 'catch' 'ordered'
-       && lk != 104027              // 'catch' 'ordering'
-       && lk != 105563              // 'catch' 'parent'
-       && lk != 108635              // 'catch' 'preceding'
-       && lk != 109147              // 'catch' 'preceding-sibling'
-       && lk != 110683              // 'catch' 'processing-instruction'
-       && lk != 111707              // 'catch' 'rename'
-       && lk != 112219              // 'catch' 'replace'
-       && lk != 112731              // 'catch' 'return'
-       && lk != 113243              // 'catch' 'returning'
-       && lk != 113755              // 'catch' 'revalidation'
-       && lk != 114779              // 'catch' 'satisfies'
-       && lk != 115291              // 'catch' 'schema'
-       && lk != 115803              // 'catch' 'schema-attribute'
-       && lk != 116315              // 'catch' 'schema-element'
-       && lk != 116827              // 'catch' 'score'
-       && lk != 117339              // 'catch' 'self'
-       && lk != 119899              // 'catch' 'sliding'
-       && lk != 120411              // 'catch' 'some'
-       && lk != 120923              // 'catch' 'stable'
-       && lk != 121435              // 'catch' 'start'
-       && lk != 122971              // 'catch' 'strict'
-       && lk != 124507              // 'catch' 'switch'
-       && lk != 125019              // 'catch' 'text'
-       && lk != 128091              // 'catch' 'try'
-       && lk != 128603              // 'catch' 'tumbling'
-       && lk != 129115              // 'catch' 'type'
-       && lk != 129627              // 'catch' 'typeswitch'
-       && lk != 131163              // 'catch' 'unordered'
-       && lk != 131675              // 'catch' 'updating'
-       && lk != 133211              // 'catch' 'validate'
-       && lk != 133723              // 'catch' 'value'
-       && lk != 134235              // 'catch' 'variable'
-       && lk != 134747              // 'catch' 'version'
-       && lk != 136283              // 'catch' 'where'
-       && lk != 136795              // 'catch' 'while'
-       && lk != 138331              // 'catch' 'with'
-       && lk != 140379)             // 'catch' 'xquery'
-      {
-        break;
-      }
-    }
-    eventHandler.endNonterminal("TryCatchStatement", e0);
-  }
-
-  function try_TryCatchStatement()
-  {
-    shiftT(250);                    // 'try'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    try_BlockStatement();
-    lookahead1W(36);                // S^WS | '(:' | 'catch'
-    shiftT(91);                     // 'catch'
-    lookahead1W(255);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_CatchErrorList();
-    try_BlockStatement();
-    for (;;)
-    {
-      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      switch (l1)
-      {
-      case 91:                      // 'catch'
-        lookahead2W(276);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |
-        break;
-      default:
-        lk = l1;
-      }
-      if (lk == 38491               // 'catch' 'and'
-       || lk == 45659               // 'catch' 'cast'
-       || lk == 46171               // 'catch' 'castable'
-       || lk == 60507               // 'catch' 'div'
-       || lk == 65627               // 'catch' 'eq'
-       || lk == 67163               // 'catch' 'except'
-       || lk == 74843               // 'catch' 'ge'
-       || lk == 76891               // 'catch' 'gt'
-       || lk == 77403               // 'catch' 'idiv'
-       || lk == 82011               // 'catch' 'instance'
-       || lk == 83035               // 'catch' 'intersect'
-       || lk == 84059               // 'catch' 'is'
-       || lk == 88155               // 'catch' 'le'
-       || lk == 91227               // 'catch' 'lt'
-       || lk == 92251               // 'catch' 'mod'
-       || lk == 95323               // 'catch' 'ne'
-       || lk == 102491              // 'catch' 'or'
-       || lk == 127067              // 'catch' 'to'
-       || lk == 127579              // 'catch' 'treat'
-       || lk == 130139)             // 'catch' 'union'
-      {
-        lk = memoized(8, e0);
-        if (lk == 0)
-        {
-          var b0A = b0; var e0A = e0; var l1A = l1;
-          var b1A = b1; var e1A = e1; var l2A = l2;
-          var b2A = b2; var e2A = e2;
-          try
-          {
-            lookahead1W(36);        // S^WS | '(:' | 'catch'
-            shiftT(91);             // 'catch'
-            lookahead1W(255);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-            try_CatchErrorList();
-            try_BlockStatement();
-            memoize(8, e0A, -1);
-            continue;
-          }
-          catch (p1A)
-          {
-            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-            b2 = b2A; e2 = e2A; end = e2A; }}
-            memoize(8, e0A, -2);
-            break;
-          }
-        }
-      }
-      if (lk != -1
-       && lk != 2651                // 'catch' Wildcard
-       && lk != 3163                // 'catch' EQName^Token
-       && lk != 35931               // 'catch' 'after'
-       && lk != 36955               // 'catch' 'allowing'
-       && lk != 37467               // 'catch' 'ancestor'
-       && lk != 37979               // 'catch' 'ancestor-or-self'
-       && lk != 40027               // 'catch' 'array'
-       && lk != 40539               // 'catch' 'as'
-       && lk != 41051               // 'catch' 'ascending'
-       && lk != 41563               // 'catch' 'at'
-       && lk != 42075               // 'catch' 'attribute'
-       && lk != 42587               // 'catch' 'base-uri'
-       && lk != 43099               // 'catch' 'before'
-       && lk != 43611               // 'catch' 'boundary-space'
-       && lk != 44123               // 'catch' 'break'
-       && lk != 45147               // 'catch' 'case'
-       && lk != 46683               // 'catch' 'catch'
-       && lk != 47707               // 'catch' 'child'
-       && lk != 48219               // 'catch' 'collation'
-       && lk != 49243               // 'catch' 'comment'
-       && lk != 49755               // 'catch' 'constraint'
-       && lk != 50267               // 'catch' 'construction'
-       && lk != 51803               // 'catch' 'context'
-       && lk != 52315               // 'catch' 'continue'
-       && lk != 52827               // 'catch' 'copy'
-       && lk != 53339               // 'catch' 'copy-namespaces'
-       && lk != 53851               // 'catch' 'count'
-       && lk != 54363               // 'catch' 'decimal-format'
-       && lk != 55387               // 'catch' 'declare'
-       && lk != 55899               // 'catch' 'default'
-       && lk != 56411               // 'catch' 'delete'
-       && lk != 56923               // 'catch' 'descendant'
-       && lk != 57435               // 'catch' 'descendant-or-self'
-       && lk != 57947               // 'catch' 'descending'
-       && lk != 61019               // 'catch' 'document'
-       && lk != 61531               // 'catch' 'document-node'
-       && lk != 62043               // 'catch' 'element'
-       && lk != 62555               // 'catch' 'else'
-       && lk != 63067               // 'catch' 'empty'
-       && lk != 63579               // 'catch' 'empty-sequence'
-       && lk != 64091               // 'catch' 'encoding'
-       && lk != 64603               // 'catch' 'end'
-       && lk != 66139               // 'catch' 'every'
-       && lk != 67675               // 'catch' 'exit'
-       && lk != 68187               // 'catch' 'external'
-       && lk != 68699               // 'catch' 'first'
-       && lk != 69211               // 'catch' 'following'
-       && lk != 69723               // 'catch' 'following-sibling'
-       && lk != 70235               // 'catch' 'for'
-       && lk != 72283               // 'catch' 'ft-option'
-       && lk != 74331               // 'catch' 'function'
-       && lk != 75867               // 'catch' 'group'
-       && lk != 77915               // 'catch' 'if'
-       && lk != 78427               // 'catch' 'import'
-       && lk != 78939               // 'catch' 'in'
-       && lk != 79451               // 'catch' 'index'
-       && lk != 81499               // 'catch' 'insert'
-       && lk != 82523               // 'catch' 'integrity'
-       && lk != 83547               // 'catch' 'into'
-       && lk != 84571               // 'catch' 'item'
-       && lk != 85595               // 'catch' 'json-item'
-       && lk != 87131               // 'catch' 'last'
-       && lk != 87643               // 'catch' 'lax'
-       && lk != 89179               // 'catch' 'let'
-       && lk != 90203               // 'catch' 'loop'
-       && lk != 92763               // 'catch' 'modify'
-       && lk != 93275               // 'catch' 'module'
-       && lk != 94299               // 'catch' 'namespace'
-       && lk != 94811               // 'catch' 'namespace-node'
-       && lk != 97883               // 'catch' 'node'
-       && lk != 98395               // 'catch' 'nodes'
-       && lk != 99419               // 'catch' 'object'
-       && lk != 101467              // 'catch' 'only'
-       && lk != 101979              // 'catch' 'option'
-       && lk != 103003              // 'catch' 'order'
-       && lk != 103515              // 'catch' 'ordered'
-       && lk != 104027              // 'catch' 'ordering'
-       && lk != 105563              // 'catch' 'parent'
-       && lk != 108635              // 'catch' 'preceding'
-       && lk != 109147              // 'catch' 'preceding-sibling'
-       && lk != 110683              // 'catch' 'processing-instruction'
-       && lk != 111707              // 'catch' 'rename'
-       && lk != 112219              // 'catch' 'replace'
-       && lk != 112731              // 'catch' 'return'
-       && lk != 113243              // 'catch' 'returning'
-       && lk != 113755              // 'catch' 'revalidation'
-       && lk != 114779              // 'catch' 'satisfies'
-       && lk != 115291              // 'catch' 'schema'
-       && lk != 115803              // 'catch' 'schema-attribute'
-       && lk != 116315              // 'catch' 'schema-element'
-       && lk != 116827              // 'catch' 'score'
-       && lk != 117339              // 'catch' 'self'
-       && lk != 119899              // 'catch' 'sliding'
-       && lk != 120411              // 'catch' 'some'
-       && lk != 120923              // 'catch' 'stable'
-       && lk != 121435              // 'catch' 'start'
-       && lk != 122971              // 'catch' 'strict'
-       && lk != 124507              // 'catch' 'switch'
-       && lk != 125019              // 'catch' 'text'
-       && lk != 128091              // 'catch' 'try'
-       && lk != 128603              // 'catch' 'tumbling'
-       && lk != 129115              // 'catch' 'type'
-       && lk != 129627              // 'catch' 'typeswitch'
-       && lk != 131163              // 'catch' 'unordered'
-       && lk != 131675              // 'catch' 'updating'
-       && lk != 133211              // 'catch' 'validate'
-       && lk != 133723              // 'catch' 'value'
-       && lk != 134235              // 'catch' 'variable'
-       && lk != 134747              // 'catch' 'version'
-       && lk != 136283              // 'catch' 'where'
-       && lk != 136795              // 'catch' 'while'
-       && lk != 138331              // 'catch' 'with'
-       && lk != 140379)             // 'catch' 'xquery'
-      {
-        break;
-      }
-      lookahead1W(36);              // S^WS | '(:' | 'catch'
-      shiftT(91);                   // 'catch'
-      lookahead1W(255);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_CatchErrorList();
-      try_BlockStatement();
-    }
-  }
-
-  function parse_TypeswitchStatement()
-  {
-    eventHandler.startNonterminal("TypeswitchStatement", e0);
-    shift(253);                     // 'typeswitch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(37);                      // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      whitespace();
-      parse_CaseStatement();
-      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shift(109);                     // 'default'
-    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'
-    if (l1 == 31)                   // '$'
-    {
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-    }
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    eventHandler.endNonterminal("TypeswitchStatement", e0);
-  }
-
-  function try_TypeswitchStatement()
-  {
-    shiftT(253);                    // 'typeswitch'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(37);                     // ')'
-    for (;;)
-    {
-      lookahead1W(35);              // S^WS | '(:' | 'case'
-      try_CaseStatement();
-      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'
-      if (l1 != 88)                 // 'case'
-      {
-        break;
-      }
-    }
-    shiftT(109);                    // 'default'
-    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'
-    if (l1 == 31)                   // '$'
-    {
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-    }
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-  }
-
-  function parse_CaseStatement()
-  {
-    eventHandler.startNonterminal("CaseStatement", e0);
-    shift(88);                      // 'case'
-    lookahead1W(260);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |
-    if (l1 == 31)                   // '$'
-    {
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shift(79);                    // 'as'
-    }
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_SequenceType();
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shift(220);                     // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    eventHandler.endNonterminal("CaseStatement", e0);
-  }
-
-  function try_CaseStatement()
-  {
-    shiftT(88);                     // 'case'
-    lookahead1W(260);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |
-    if (l1 == 31)                   // '$'
-    {
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-      lookahead1W(30);              // S^WS | '(:' | 'as'
-      shiftT(79);                   // 'as'
-    }
-    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_SequenceType();
-    lookahead1W(70);                // S^WS | '(:' | 'return'
-    shiftT(220);                    // 'return'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-  }
-
-  function parse_VarDeclStatement()
-  {
-    eventHandler.startNonterminal("VarDeclStatement", e0);
-    for (;;)
-    {
-      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'
-      if (l1 != 32)                 // '%'
-      {
-        break;
-      }
-      whitespace();
-      parse_Annotation();
-    }
-    shift(262);                     // 'variable'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shift(31);                      // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_VarName();
-    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'
-    if (l1 == 79)                   // 'as'
-    {
-      whitespace();
-      parse_TypeDeclaration();
-    }
-    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'
-    if (l1 == 52)                   // ':='
-    {
-      shift(52);                    // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_ExprSingle();
-    }
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shift(41);                    // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shift(31);                    // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_VarName();
-      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'
-      if (l1 == 79)                 // 'as'
-      {
-        whitespace();
-        parse_TypeDeclaration();
-      }
-      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'
-      if (l1 == 52)                 // ':='
-      {
-        shift(52);                  // ':='
-        lookahead1W(267);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        whitespace();
-        parse_ExprSingle();
-      }
-    }
-    shift(53);                      // ';'
-    eventHandler.endNonterminal("VarDeclStatement", e0);
-  }
-
-  function try_VarDeclStatement()
-  {
-    for (;;)
-    {
-      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'
-      if (l1 != 32)                 // '%'
-      {
-        break;
-      }
-      try_Annotation();
-    }
-    shiftT(262);                    // 'variable'
-    lookahead1W(21);                // S^WS | '$' | '(:'
-    shiftT(31);                     // '$'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    try_VarName();
-    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'
-    if (l1 == 79)                   // 'as'
-    {
-      try_TypeDeclaration();
-    }
-    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'
-    if (l1 == 52)                   // ':='
-    {
-      shiftT(52);                   // ':='
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_ExprSingle();
-    }
-    for (;;)
-    {
-      if (l1 != 41)                 // ','
-      {
-        break;
-      }
-      shiftT(41);                   // ','
-      lookahead1W(21);              // S^WS | '$' | '(:'
-      shiftT(31);                   // '$'
-      lookahead1W(253);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-      try_VarName();
-      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'
-      if (l1 == 79)                 // 'as'
-      {
-        try_TypeDeclaration();
-      }
-      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'
-      if (l1 == 52)                 // ':='
-      {
-        shiftT(52);                 // ':='
-        lookahead1W(267);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        try_ExprSingle();
-      }
-    }
-    shiftT(53);                     // ';'
-  }
-
-  function parse_WhileStatement()
-  {
-    eventHandler.startNonterminal("WhileStatement", e0);
-    shift(267);                     // 'while'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Expr();
-    shift(37);                      // ')'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_Statement();
-    eventHandler.endNonterminal("WhileStatement", e0);
-  }
-
-  function try_WhileStatement()
-  {
-    shiftT(267);                    // 'while'
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shiftT(34);                     // '('
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Expr();
-    shiftT(37);                     // ')'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_Statement();
-  }
-
-  function parse_ExprSingle()
-  {
-    eventHandler.startNonterminal("ExprSingle", e0);
-    switch (l1)
-    {
-    case 137:                       // 'for'
-      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |
-      break;
-    case 174:                       // 'let'
-      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |
-      break;
-    case 250:                       // 'try'
-      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 152:                       // 'if'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 16009:                     // 'for' '$'
-    case 16046:                     // 'let' '$'
-    case 116910:                    // 'let' 'score'
-    case 119945:                    // 'for' 'sliding'
-    case 128649:                    // 'for' 'tumbling'
-      parse_FLWORExpr();
-      break;
-    case 17560:                     // 'if' '('
-      parse_IfExpr();
-      break;
-    case 17651:                     // 'switch' '('
-      parse_SwitchExpr();
-      break;
-    case 141562:                    // 'try' '{'
-      parse_TryCatchExpr();
-      break;
-    case 17661:                     // 'typeswitch' '('
-      parse_TypeswitchExpr();
-      break;
-    default:
-      parse_ExprSimple();
-    }
-    eventHandler.endNonterminal("ExprSingle", e0);
-  }
-
-  function try_ExprSingle()
-  {
-    switch (l1)
-    {
-    case 137:                       // 'for'
-      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |
-      break;
-    case 174:                       // 'let'
-      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |
-      break;
-    case 250:                       // 'try'
-      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 152:                       // 'if'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 16009:                     // 'for' '$'
-    case 16046:                     // 'let' '$'
-    case 116910:                    // 'let' 'score'
-    case 119945:                    // 'for' 'sliding'
-    case 128649:                    // 'for' 'tumbling'
-      try_FLWORExpr();
-      break;
-    case 17560:                     // 'if' '('
-      try_IfExpr();
-      break;
-    case 17651:                     // 'switch' '('
-      try_SwitchExpr();
-      break;
-    case 141562:                    // 'try' '{'
-      try_TryCatchExpr();
-      break;
-    case 17661:                     // 'typeswitch' '('
-      try_TypeswitchExpr();
-      break;
-    default:
-      try_ExprSimple();
-    }
-  }
-
-  function parse_ExprSimple()
-  {
-    eventHandler.startNonterminal("ExprSimple", e0);
-    switch (l1)
-    {
-    case 218:                       // 'rename'
-      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 219:                       // 'replace'
-      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 110:                       // 'delete'
-    case 159:                       // 'insert'
-      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 103:                       // 'copy'
-    case 129:                       // 'every'
-    case 235:                       // 'some'
-      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 16001:                     // 'every' '$'
-    case 16107:                     // 'some' '$'
-      parse_QuantifiedExpr();
-      break;
-    case 97951:                     // 'insert' 'node'
-    case 98463:                     // 'insert' 'nodes'
-      parse_InsertExpr();
-      break;
-    case 97902:                     // 'delete' 'node'
-    case 98414:                     // 'delete' 'nodes'
-      parse_DeleteExpr();
-      break;
-    case 98010:                     // 'rename' 'node'
-      parse_RenameExpr();
-      break;
-    case 98011:                     // 'replace' 'node'
-    case 133851:                    // 'replace' 'value'
-      parse_ReplaceExpr();
-      break;
-    case 15975:                     // 'copy' '$'
-      parse_TransformExpr();
-      break;
-    case 85102:                     // 'delete' 'json'
-      parse_JSONDeleteExpr();
-      break;
-    case 85151:                     // 'insert' 'json'
-      parse_JSONInsertExpr();
-      break;
-    case 85210:                     // 'rename' 'json'
-      parse_JSONRenameExpr();
-      break;
-    case 85211:                     // 'replace' 'json'
-      parse_JSONReplaceExpr();
-      break;
-    case 77:                        // 'append'
-      parse_JSONAppendExpr();
-      break;
-    default:
-      parse_OrExpr();
-    }
-    eventHandler.endNonterminal("ExprSimple", e0);
-  }
-
-  function try_ExprSimple()
-  {
-    switch (l1)
-    {
-    case 218:                       // 'rename'
-      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 219:                       // 'replace'
-      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 110:                       // 'delete'
-    case 159:                       // 'insert'
-      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |
-      break;
-    case 103:                       // 'copy'
-    case 129:                       // 'every'
-    case 235:                       // 'some'
-      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |
-      break;
-    default:
-      lk = l1;
-    }
-    switch (lk)
-    {
-    case 16001:                     // 'every' '$'
-    case 16107:                     // 'some' '$'
-      try_QuantifiedExpr();
-      break;
-    case 97951:                     // 'insert' 'node'
-    case 98463:                     // 'insert' 'nodes'
-      try_InsertExpr();
-      break;
-    case 97902:                     // 'delete' 'node'
-    case 98414:                     // 'delete' 'nodes'
-      try_DeleteExpr();
-      break;
-    case 98010:                     // 'rename' 'node'
-      try_RenameExpr();
-      break;
-    case 98011:                     // 'replace' 'node'
-    case 133851:                    // 'replace' 'value'
-      try_ReplaceExpr();
-      break;
-    case 15975:                     // 'copy' '$'
-      try_TransformExpr();
-      break;
-    case 85102:                     // 'delete' 'json'
-      try_JSONDeleteExpr();
-      break;
-    case 85151:                     // 'insert' 'json'
-      try_JSONInsertExpr();
-      break;
-    case 85210:                     // 'rename' 'json'
-      try_JSONRenameExpr();
-      break;
-    case 85211:                     // 'replace' 'json'
-      try_JSONReplaceExpr();
-      break;
-    case 77:                        // 'append'
-      try_JSONAppendExpr();
-      break;
-    default:
-      try_OrExpr();
-    }
-  }
-
-  function parse_JSONDeleteExpr()
-  {
-    eventHandler.startNonterminal("JSONDeleteExpr", e0);
-    shift(110);                     // 'delete'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shift(166);                     // 'json'
-    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
-    whitespace();
-    parse_PostfixExpr();
-    eventHandler.endNonterminal("JSONDeleteExpr", e0);
-  }
-
-  function try_JSONDeleteExpr()
-  {
-    shiftT(110);                    // 'delete'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shiftT(166);                    // 'json'
-    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
-    try_PostfixExpr();
-  }
-
-  function parse_JSONInsertExpr()
-  {
-    eventHandler.startNonterminal("JSONInsertExpr", e0);
-    shift(159);                     // 'insert'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shift(166);                     // 'json'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    shift(163);                     // 'into'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      lookahead2W(69);              // S^WS | '(:' | 'position'
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 108113)               // 'at' 'position'
-    {
-      lk = memoized(9, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          shiftT(81);               // 'at'
-          lookahead1W(69);          // S^WS | '(:' | 'position'
-          shiftT(211);              // 'position'
-          lookahead1W(267);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-          try_ExprSingle();
-          lk = -1;
-        }
-        catch (p1A)
-        {
-          lk = -2;
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(9, e0, lk);
-      }
-    }
-    if (lk == -1)
-    {
-      shift(81);                    // 'at'
-      lookahead1W(69);              // S^WS | '(:' | 'position'
-      shift(211);                   // 'position'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_ExprSingle();
-    }
-    eventHandler.endNonterminal("JSONInsertExpr", e0);
-  }
-
-  function try_JSONInsertExpr()
-  {
-    shiftT(159);                    // 'insert'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shiftT(166);                    // 'json'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    shiftT(163);                    // 'into'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    switch (l1)
-    {
-    case 81:                        // 'at'
-      lookahead2W(69);              // S^WS | '(:' | 'position'
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 108113)               // 'at' 'position'
-    {
-      lk = memoized(9, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          shiftT(81);               // 'at'
-          lookahead1W(69);          // S^WS | '(:' | 'position'
-          shiftT(211);              // 'position'
-          lookahead1W(267);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-          try_ExprSingle();
-          memoize(9, e0A, -1);
-        }
-        catch (p1A)
-        {
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(9, e0A, -2);
-        }
-        lk = -2;
-      }
-    }
-    if (lk == -1)
-    {
-      shiftT(81);                   // 'at'
-      lookahead1W(69);              // S^WS | '(:' | 'position'
-      shiftT(211);                  // 'position'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_ExprSingle();
-    }
-  }
-
-  function parse_JSONRenameExpr()
-  {
-    eventHandler.startNonterminal("JSONRenameExpr", e0);
-    shift(218);                     // 'rename'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shift(166);                     // 'json'
-    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
-    whitespace();
-    parse_PostfixExpr();
-    shift(79);                      // 'as'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("JSONRenameExpr", e0);
-  }
-
-  function try_JSONRenameExpr()
-  {
-    shiftT(218);                    // 'rename'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shiftT(166);                    // 'json'
-    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
-    try_PostfixExpr();
-    shiftT(79);                     // 'as'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_JSONReplaceExpr()
-  {
-    eventHandler.startNonterminal("JSONReplaceExpr", e0);
-    shift(219);                     // 'replace'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shift(166);                     // 'json'
-    lookahead1W(82);                // S^WS | '(:' | 'value'
-    shift(261);                     // 'value'
-    lookahead1W(64);                // S^WS | '(:' | 'of'
-    shift(196);                     // 'of'
-    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
-    whitespace();
-    parse_PostfixExpr();
-    shift(270);                     // 'with'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("JSONReplaceExpr", e0);
-  }
-
-  function try_JSONReplaceExpr()
-  {
-    shiftT(219);                    // 'replace'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shiftT(166);                    // 'json'
-    lookahead1W(82);                // S^WS | '(:' | 'value'
-    shiftT(261);                    // 'value'
-    lookahead1W(64);                // S^WS | '(:' | 'of'
-    shiftT(196);                    // 'of'
-    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
-    try_PostfixExpr();
-    shiftT(270);                    // 'with'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_JSONAppendExpr()
-  {
-    eventHandler.startNonterminal("JSONAppendExpr", e0);
-    shift(77);                      // 'append'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shift(166);                     // 'json'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    shift(163);                     // 'into'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("JSONAppendExpr", e0);
-  }
-
-  function try_JSONAppendExpr()
-  {
-    shiftT(77);                     // 'append'
-    lookahead1W(56);                // S^WS | '(:' | 'json'
-    shiftT(166);                    // 'json'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-    shiftT(163);                    // 'into'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_CommonContent()
-  {
-    eventHandler.startNonterminal("CommonContent", e0);
-    switch (l1)
-    {
-    case 12:                        // PredefinedEntityRef
-      shift(12);                    // PredefinedEntityRef
-      break;
-    case 23:                        // CharRef
-      shift(23);                    // CharRef
-      break;
-    case 277:                       // '{{'
-      shift(277);                   // '{{'
-      break;
-    case 283:                       // '}}'
-      shift(283);                   // '}}'
-      break;
-    default:
-      parse_BlockExpr();
-    }
-    eventHandler.endNonterminal("CommonContent", e0);
-  }
-
-  function try_CommonContent()
-  {
-    switch (l1)
-    {
-    case 12:                        // PredefinedEntityRef
-      shiftT(12);                   // PredefinedEntityRef
-      break;
-    case 23:                        // CharRef
-      shiftT(23);                   // CharRef
-      break;
-    case 277:                       // '{{'
-      shiftT(277);                  // '{{'
-      break;
-    case 283:                       // '}}'
-      shiftT(283);                  // '}}'
-      break;
-    default:
-      try_BlockExpr();
-    }
-  }
-
-  function parse_ContentExpr()
-  {
-    eventHandler.startNonterminal("ContentExpr", e0);
-    parse_StatementsAndExpr();
-    eventHandler.endNonterminal("ContentExpr", e0);
-  }
-
-  function try_ContentExpr()
-  {
-    try_StatementsAndExpr();
-  }
-
-  function parse_CompDocConstructor()
-  {
-    eventHandler.startNonterminal("CompDocConstructor", e0);
-    shift(119);                     // 'document'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    whitespace();
-    parse_BlockExpr();
-    eventHandler.endNonterminal("CompDocConstructor", e0);
-  }
-
-  function try_CompDocConstructor()
-  {
-    shiftT(119);                    // 'document'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    try_BlockExpr();
-  }
-
-  function parse_CompAttrConstructor()
-  {
-    eventHandler.startNonterminal("CompAttrConstructor", e0);
-    shift(82);                      // 'attribute'
-    lookahead1W(256);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shift(276);                   // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_Expr();
-      shift(282);                   // '}'
-      break;
-    default:
-      whitespace();
-      parse_EQName();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    switch (l1)
-    {
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 144660)               // '{' '}'
-    {
-      lk = memoized(10, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          shiftT(276);              // '{'
-          lookahead1W(88);          // S^WS | '(:' | '}'
-          shiftT(282);              // '}'
-          lk = -1;
-        }
-        catch (p1A)
-        {
-          lk = -2;
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(10, e0, lk);
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-      shift(276);                   // '{'
-      lookahead1W(88);              // S^WS | '(:' | '}'
-      shift(282);                   // '}'
-      break;
-    default:
-      whitespace();
-      parse_BlockExpr();
-    }
-    eventHandler.endNonterminal("CompAttrConstructor", e0);
-  }
-
-  function try_CompAttrConstructor()
-  {
-    shiftT(82);                     // 'attribute'
-    lookahead1W(256);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shiftT(276);                  // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_Expr();
-      shiftT(282);                  // '}'
-      break;
-    default:
-      try_EQName();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    switch (l1)
-    {
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 144660)               // '{' '}'
-    {
-      lk = memoized(10, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          shiftT(276);              // '{'
-          lookahead1W(88);          // S^WS | '(:' | '}'
-          shiftT(282);              // '}'
-          memoize(10, e0A, -1);
-          lk = -3;
-        }
-        catch (p1A)
-        {
-          lk = -2;
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(10, e0A, -2);
-        }
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-      shiftT(276);                  // '{'
-      lookahead1W(88);              // S^WS | '(:' | '}'
-      shiftT(282);                  // '}'
-      break;
-    case -3:
-      break;
-    default:
-      try_BlockExpr();
-    }
-  }
-
-  function parse_CompPIConstructor()
-  {
-    eventHandler.startNonterminal("CompPIConstructor", e0);
-    shift(216);                     // 'processing-instruction'
-    lookahead1W(249);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shift(276);                   // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_Expr();
-      shift(282);                   // '}'
-      break;
-    default:
-      whitespace();
-      parse_NCName();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    switch (l1)
-    {
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 144660)               // '{' '}'
-    {
-      lk = memoized(11, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          shiftT(276);              // '{'
-          lookahead1W(88);          // S^WS | '(:' | '}'
-          shiftT(282);              // '}'
-          lk = -1;
-        }
-        catch (p1A)
-        {
-          lk = -2;
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(11, e0, lk);
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-      shift(276);                   // '{'
-      lookahead1W(88);              // S^WS | '(:' | '}'
-      shift(282);                   // '}'
-      break;
-    default:
-      whitespace();
-      parse_BlockExpr();
-    }
-    eventHandler.endNonterminal("CompPIConstructor", e0);
-  }
-
-  function try_CompPIConstructor()
-  {
-    shiftT(216);                    // 'processing-instruction'
-    lookahead1W(249);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shiftT(276);                  // '{'
-      lookahead1W(267);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      try_Expr();
-      shiftT(282);                  // '}'
-      break;
-    default:
-      try_NCName();
-    }
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    switch (l1)
-    {
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 144660)               // '{' '}'
-    {
-      lk = memoized(11, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          shiftT(276);              // '{'
-          lookahead1W(88);          // S^WS | '(:' | '}'
-          shiftT(282);              // '}'
-          memoize(11, e0A, -1);
-          lk = -3;
-        }
-        catch (p1A)
-        {
-          lk = -2;
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(11, e0A, -2);
-        }
-      }
-    }
-    switch (lk)
-    {
-    case -1:
-      shiftT(276);                  // '{'
-      lookahead1W(88);              // S^WS | '(:' | '}'
-      shiftT(282);                  // '}'
-      break;
-    case -3:
-      break;
-    default:
-      try_BlockExpr();
-    }
-  }
-
-  function parse_CompCommentConstructor()
-  {
-    eventHandler.startNonterminal("CompCommentConstructor", e0);
-    shift(96);                      // 'comment'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    whitespace();
-    parse_BlockExpr();
-    eventHandler.endNonterminal("CompCommentConstructor", e0);
-  }
-
-  function try_CompCommentConstructor()
-  {
-    shiftT(96);                     // 'comment'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    try_BlockExpr();
-  }
-
-  function parse_CompTextConstructor()
-  {
-    eventHandler.startNonterminal("CompTextConstructor", e0);
-    shift(244);                     // 'text'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    whitespace();
-    parse_BlockExpr();
-    eventHandler.endNonterminal("CompTextConstructor", e0);
-  }
-
-  function try_CompTextConstructor()
-  {
-    shiftT(244);                    // 'text'
-    lookahead1W(87);                // S^WS | '(:' | '{'
-    try_BlockExpr();
-  }
-
-  function parse_PrimaryExpr()
-  {
-    eventHandler.startNonterminal("PrimaryExpr", e0);
-    switch (l1)
-    {
-    case 184:                       // 'namespace'
-      lookahead2W(254);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 216:                       // 'processing-instruction'
-      lookahead2W(252);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    case 82:                        // 'attribute'
-    case 121:                       // 'element'
-      lookahead2W(257);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 96:                        // 'comment'
-    case 244:                       // 'text'
-      lookahead2W(93);              // S^WS | '#' | '(:' | '{'
-      break;
-    case 119:                       // 'document'
-    case 202:                       // 'ordered'
-    case 256:                       // 'unordered'
-      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'
-      break;
-    case 6:                         // EQName^Token
-    case 70:                        // 'after'
-    case 72:                        // 'allowing'
-    case 73:                        // 'ancestor'
-    case 74:                        // 'ancestor-or-self'
-    case 75:                        // 'and'
-    case 78:                        // 'array'
-    case 79:                        // 'as'
-    case 80:                        // 'ascending'
-    case 81:                        // 'at'
-    case 83:                        // 'base-uri'
-    case 84:                        // 'before'
-    case 85:                        // 'boundary-space'
-    case 86:                        // 'break'
-    case 88:                        // 'case'
-    case 89:                        // 'cast'
-    case 90:                        // 'castable'
-    case 91:                        // 'catch'
-    case 93:                        // 'child'
-    case 94:                        // 'collation'
-    case 97:                        // 'constraint'
-    case 98:                        // 'construction'
-    case 101:                       // 'context'
-    case 102:                       // 'continue'
-    case 103:                       // 'copy'
-    case 104:                       // 'copy-namespaces'
-    case 105:                       // 'count'
-    case 106:                       // 'decimal-format'
-    case 108:                       // 'declare'
-    case 109:                       // 'default'
-    case 110:                       // 'delete'
-    case 111:                       // 'descendant'
-    case 112:                       // 'descendant-or-self'
-    case 113:                       // 'descending'
-    case 118:                       // 'div'
-    case 122:                       // 'else'
-    case 123:                       // 'empty'
-    case 125:                       // 'encoding'
-    case 126:                       // 'end'
-    case 128:                       // 'eq'
-    case 129:                       // 'every'
-    case 131:                       // 'except'
-    case 132:                       // 'exit'
-    case 133:                       // 'external'
-    case 134:                       // 'first'
-    case 135:                       // 'following'
-    case 136:                       // 'following-sibling'
-    case 137:                       // 'for'
-    case 141:                       // 'ft-option'
-    case 146:                       // 'ge'
-    case 148:                       // 'group'
-    case 150:                       // 'gt'
-    case 151:                       // 'idiv'
-    case 153:                       // 'import'
-    case 154:                       // 'in'
-    case 155:                       // 'index'
-    case 159:                       // 'insert'
-    case 160:                       // 'instance'
-    case 161:                       // 'integrity'
-    case 162:                       // 'intersect'
-    case 163:                       // 'into'
-    case 164:                       // 'is'
-    case 167:                       // 'json-item'
-    case 170:                       // 'last'
-    case 171:                       // 'lax'
-    case 172:                       // 'le'
-    case 174:                       // 'let'
-    case 176:                       // 'loop'
-    case 178:                       // 'lt'
-    case 180:                       // 'mod'
-    case 181:                       // 'modify'
-    case 182:                       // 'module'
-    case 186:                       // 'ne'
-    case 192:                       // 'nodes'
-    case 194:                       // 'object'
-    case 198:                       // 'only'
-    case 199:                       // 'option'
-    case 200:                       // 'or'
-    case 201:                       // 'order'
-    case 203:                       // 'ordering'
-    case 206:                       // 'parent'
-    case 212:                       // 'preceding'
-    case 213:                       // 'preceding-sibling'
-    case 218:                       // 'rename'
-    case 219:                       // 'replace'
-    case 220:                       // 'return'
-    case 221:                       // 'returning'
-    case 222:                       // 'revalidation'
-    case 224:                       // 'satisfies'
-    case 225:                       // 'schema'
-    case 228:                       // 'score'
-    case 229:                       // 'self'
-    case 234:                       // 'sliding'
-    case 235:                       // 'some'
-    case 236:                       // 'stable'
-    case 237:                       // 'start'
-    case 240:                       // 'strict'
-    case 248:                       // 'to'
-    case 249:                       // 'treat'
-    case 250:                       // 'try'
-    case 251:                       // 'tumbling'
-    case 252:                       // 'type'
-    case 254:                       // 'union'
-    case 257:                       // 'updating'
-    case 260:                       // 'validate'
-    case 261:                       // 'value'
-    case 262:                       // 'variable'
-    case 263:                       // 'version'
-    case 266:                       // 'where'
-    case 267:                       // 'while'
-    case 270:                       // 'with'
-    case 274:                       // 'xquery'
-      lookahead2W(92);              // S^WS | '#' | '(' | '(:'
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 2836                  // '{' Wildcard
-     || lk == 3348                  // '{' EQName^Token
-     || lk == 4372                  // '{' IntegerLiteral
-     || lk == 4884                  // '{' DecimalLiteral
-     || lk == 5396                  // '{' DoubleLiteral
-     || lk == 5908                  // '{' StringLiteral
-     || lk == 16148                 // '{' '$'
-     || lk == 16660                 // '{' '%'
-     || lk == 17684                 // '{' '('
-     || lk == 18196                 // '{' '(#'
-     || lk == 20756                 // '{' '+'
-     || lk == 21780                 // '{' '-'
-     || lk == 22804                 // '{' '.'
-     || lk == 23316                 // '{' '..'
-     || lk == 23828                 // '{' '/'
-     || lk == 24340                 // '{' '//'
-     || lk == 27924                 // '{' '<'
-     || lk == 28436                 // '{' '<!--'
-     || lk == 30484                 // '{' '<?'
-     || lk == 34068                 // '{' '@'
-     || lk == 35092                 // '{' '['
-     || lk == 36116                 // '{' 'after'
-     || lk == 37140                 // '{' 'allowing'
-     || lk == 37652                 // '{' 'ancestor'
-     || lk == 38164                 // '{' 'ancestor-or-self'
-     || lk == 38676                 // '{' 'and'
-     || lk == 39700                 // '{' 'append'
-     || lk == 40212                 // '{' 'array'
-     || lk == 40724                 // '{' 'as'
-     || lk == 41236                 // '{' 'ascending'
-     || lk == 41748                 // '{' 'at'
-     || lk == 42260                 // '{' 'attribute'
-     || lk == 42772                 // '{' 'base-uri'
-     || lk == 43284                 // '{' 'before'
-     || lk == 43796                 // '{' 'boundary-space'
-     || lk == 44308                 // '{' 'break'
-     || lk == 45332                 // '{' 'case'
-     || lk == 45844                 // '{' 'cast'
-     || lk == 46356                 // '{' 'castable'
-     || lk == 46868                 // '{' 'catch'
-     || lk == 47892                 // '{' 'child'
-     || lk == 48404                 // '{' 'collation'
-     || lk == 49428                 // '{' 'comment'
-     || lk == 49940                 // '{' 'constraint'
-     || lk == 50452                 // '{' 'construction'
-     || lk == 51988                 // '{' 'context'
-     || lk == 52500                 // '{' 'continue'
-     || lk == 53012                 // '{' 'copy'
-     || lk == 53524                 // '{' 'copy-namespaces'
-     || lk == 54036                 // '{' 'count'
-     || lk == 54548                 // '{' 'decimal-format'
-     || lk == 55572                 // '{' 'declare'
-     || lk == 56084                 // '{' 'default'
-     || lk == 56596                 // '{' 'delete'
-     || lk == 57108                 // '{' 'descendant'
-     || lk == 57620                 // '{' 'descendant-or-self'
-     || lk == 58132                 // '{' 'descending'
-     || lk == 60692                 // '{' 'div'
-     || lk == 61204                 // '{' 'document'
-     || lk == 61716                 // '{' 'document-node'
-     || lk == 62228                 // '{' 'element'
-     || lk == 62740                 // '{' 'else'
-     || lk == 63252                 // '{' 'empty'
-     || lk == 63764                 // '{' 'empty-sequence'
-     || lk == 64276                 // '{' 'encoding'
-     || lk == 64788                 // '{' 'end'
-     || lk == 65812                 // '{' 'eq'
-     || lk == 66324                 // '{' 'every'
-     || lk == 67348                 // '{' 'except'
-     || lk == 67860                 // '{' 'exit'
-     || lk == 68372                 // '{' 'external'
-     || lk == 68884                 // '{' 'first'
-     || lk == 69396                 // '{' 'following'
-     || lk == 69908                 // '{' 'following-sibling'
-     || lk == 70420                 // '{' 'for'
-     || lk == 72468                 // '{' 'ft-option'
-     || lk == 74516                 // '{' 'function'
-     || lk == 75028                 // '{' 'ge'
-     || lk == 76052                 // '{' 'group'
-     || lk == 77076                 // '{' 'gt'
-     || lk == 77588                 // '{' 'idiv'
-     || lk == 78100                 // '{' 'if'
-     || lk == 78612                 // '{' 'import'
-     || lk == 79124                 // '{' 'in'
-     || lk == 79636                 // '{' 'index'
-     || lk == 81684                 // '{' 'insert'
-     || lk == 82196                 // '{' 'instance'
-     || lk == 82708                 // '{' 'integrity'
-     || lk == 83220                 // '{' 'intersect'
-     || lk == 83732                 // '{' 'into'
-     || lk == 84244                 // '{' 'is'
-     || lk == 84756                 // '{' 'item'
-     || lk == 85780                 // '{' 'json-item'
-     || lk == 87316                 // '{' 'last'
-     || lk == 87828                 // '{' 'lax'
-     || lk == 88340                 // '{' 'le'
-     || lk == 89364                 // '{' 'let'
-     || lk == 90388                 // '{' 'loop'
-     || lk == 91412                 // '{' 'lt'
-     || lk == 92436                 // '{' 'mod'
-     || lk == 92948                 // '{' 'modify'
-     || lk == 93460                 // '{' 'module'
-     || lk == 94484                 // '{' 'namespace'
-     || lk == 94996                 // '{' 'namespace-node'
-     || lk == 95508                 // '{' 'ne'
-     || lk == 98068                 // '{' 'node'
-     || lk == 98580                 // '{' 'nodes'
-     || lk == 99604                 // '{' 'object'
-     || lk == 101652                // '{' 'only'
-     || lk == 102164                // '{' 'option'
-     || lk == 102676                // '{' 'or'
-     || lk == 103188                // '{' 'order'
-     || lk == 103700                // '{' 'ordered'
-     || lk == 104212                // '{' 'ordering'
-     || lk == 105748                // '{' 'parent'
-     || lk == 108820                // '{' 'preceding'
-     || lk == 109332                // '{' 'preceding-sibling'
-     || lk == 110868                // '{' 'processing-instruction'
-     || lk == 111892                // '{' 'rename'
-     || lk == 112404                // '{' 'replace'
-     || lk == 112916                // '{' 'return'
-     || lk == 113428                // '{' 'returning'
-     || lk == 113940                // '{' 'revalidation'
-     || lk == 114964                // '{' 'satisfies'
-     || lk == 115476                // '{' 'schema'
-     || lk == 115988                // '{' 'schema-attribute'
-     || lk == 116500                // '{' 'schema-element'
-     || lk == 117012                // '{' 'score'
-     || lk == 117524                // '{' 'self'
-     || lk == 120084                // '{' 'sliding'
-     || lk == 120596                // '{' 'some'
-     || lk == 121108                // '{' 'stable'
-     || lk == 121620                // '{' 'start'
-     || lk == 123156                // '{' 'strict'
-     || lk == 124692                // '{' 'switch'
-     || lk == 125204                // '{' 'text'
-     || lk == 127252                // '{' 'to'
-     || lk == 127764                // '{' 'treat'
-     || lk == 128276                // '{' 'try'
-     || lk == 128788                // '{' 'tumbling'
-     || lk == 129300                // '{' 'type'
-     || lk == 129812                // '{' 'typeswitch'
-     || lk == 130324                // '{' 'union'
-     || lk == 131348                // '{' 'unordered'
-     || lk == 131860                // '{' 'updating'
-     || lk == 133396                // '{' 'validate'
-     || lk == 133908                // '{' 'value'
-     || lk == 134420                // '{' 'variable'
-     || lk == 134932                // '{' 'version'
-     || lk == 136468                // '{' 'where'
-     || lk == 136980                // '{' 'while'
-     || lk == 138516                // '{' 'with'
-     || lk == 140564                // '{' 'xquery'
-     || lk == 141588                // '{' '{'
-     || lk == 142612                // '{' '{|'
-     || lk == 144660)               // '{' '}'
-    {
-      lk = memoized(12, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_BlockExpr();
-          lk = -10;
-        }
-        catch (p10A)
-        {
-          lk = -11;
-        }
-        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-        b2 = b2A; e2 = e2A; end = e2A; }}
-        memoize(12, e0, lk);
-      }
-    }
-    switch (lk)
-    {
-    case 8:                         // IntegerLiteral
-    case 9:                         // DecimalLiteral
-    case 10:                        // DoubleLiteral
-    case 11:                        // StringLiteral
-      parse_Literal();
-      break;
-    case 31:                        // '$'
-      parse_VarRef();
-      break;
-    case 34:                        // '('
-      parse_ParenthesizedExpr();
-      break;
-    case 44:                        // '.'
-      parse_ContextItemExpr();
-      break;
-    case 17414:                     // EQName^Token '('
-    case 17478:                     // 'after' '('
-    case 17480:                     // 'allowing' '('
-    case 17481:                     // 'ancestor' '('
-    case 17482:                     // 'ancestor-or-self' '('
-    case 17483:                     // 'and' '('
-    case 17486:                     // 'array' '('
-    case 17487:                     // 'as' '('
-    case 17488:                     // 'ascending' '('
-    case 17489:                     // 'at' '('
-    case 17491:                     // 'base-uri' '('
-    case 17492:                     // 'before' '('
-    case 17493:                     // 'boundary-space' '('
-    case 17494:                     // 'break' '('
-    case 17496:                     // 'case' '('
-    case 17497:                     // 'cast' '('
-    case 17498:                     // 'castable' '('
-    case 17499:                     // 'catch' '('
-    case 17501:                     // 'child' '('
-    case 17502:                     // 'collation' '('
-    case 17505:                     // 'constraint' '('
-    case 17506:                     // 'construction' '('
-    case 17509:                     // 'context' '('
-    case 17510:                     // 'continue' '('
-    case 17511:                     // 'copy' '('
-    case 17512:                     // 'copy-namespaces' '('
-    case 17513:                     // 'count' '('
-    case 17514:                     // 'decimal-format' '('
-    case 17516:                     // 'declare' '('
-    case 17517:                     // 'default' '('
-    case 17518:                     // 'delete' '('
-    case 17519:                     // 'descendant' '('
-    case 17520:                     // 'descendant-or-self' '('
-    case 17521:                     // 'descending' '('
-    case 17526:                     // 'div' '('
-    case 17527:                     // 'document' '('
-    case 17530:                     // 'else' '('
-    case 17531:                     // 'empty' '('
-    case 17533:                     // 'encoding' '('
-    case 17534:                     // 'end' '('
-    case 17536:                     // 'eq' '('
-    case 17537:                     // 'every' '('
-    case 17539:                     // 'except' '('
-    case 17540:                     // 'exit' '('
-    case 17541:                     // 'external' '('
-    case 17542:                     // 'first' '('
-    case 17543:                     // 'following' '('
-    case 17544:                     // 'following-sibling' '('
-    case 17545:                     // 'for' '('
-    case 17549:                     // 'ft-option' '('
-    case 17554:                     // 'ge' '('
-    case 17556:                     // 'group' '('
-    case 17558:                     // 'gt' '('
-    case 17559:                     // 'idiv' '('
-    case 17561:                     // 'import' '('
-    case 17562:                     // 'in' '('
-    case 17563:                     // 'index' '('
-    case 17567:                     // 'insert' '('
-    case 17568:                     // 'instance' '('
-    case 17569:                     // 'integrity' '('
-    case 17570:                     // 'intersect' '('
-    case 17571:                     // 'into' '('
-    case 17572:                     // 'is' '('
-    case 17575:                     // 'json-item' '('
-    case 17578:                     // 'last' '('
-    case 17579:                     // 'lax' '('
-    case 17580:                     // 'le' '('
-    case 17582:                     // 'let' '('
-    case 17584:                     // 'loop' '('
-    case 17586:                     // 'lt' '('
-    case 17588:                     // 'mod' '('
-    case 17589:                     // 'modify' '('
-    case 17590:                     // 'module' '('
-    case 17592:                     // 'namespace' '('
-    case 17594:                     // 'ne' '('
-    case 17600:                     // 'nodes' '('
-    case 17602:                     // 'object' '('
-    case 17606:                     // 'only' '('
-    case 17607:                     // 'option' '('
-    case 17608:                     // 'or' '('
-    case 17609:                     // 'order' '('
-    case 17610:                     // 'ordered' '('
-    case 17611:                     // 'ordering' '('
-    case 17614:                     // 'parent' '('
-    case 17620:                     // 'preceding' '('
-    case 17621:                     // 'preceding-sibling' '('
-    case 17626:                     // 'rename' '('
-    case 17627:                     // 'replace' '('
-    case 17628:                     // 'return' '('
-    case 17629:                     // 'returning' '('
-    case 17630:                     // 'revalidation' '('
-    case 17632:                     // 'satisfies' '('
-    case 17633:                     // 'schema' '('
-    case 17636:                     // 'score' '('
-    case 17637:                     // 'self' '('
-    case 17642:                     // 'sliding' '('
-    case 17643:                     // 'some' '('
-    case 17644:                     // 'stable' '('
-    case 17645:                     // 'start' '('
-    case 17648:                     // 'strict' '('
-    case 17656:                     // 'to' '('
-    case 17657:                     // 'treat' '('
-    case 17658:                     // 'try' '('
-    case 17659:                     // 'tumbling' '('
-    case 17660:                     // 'type' '('
-    case 17662:                     // 'union' '('
-    case 17664:                     // 'unordered' '('
-    case 17665:                     // 'updating' '('
-    case 17668:                     // 'validate' '('
-    case 17669:                     // 'value' '('
-    case 17670:                     // 'variable' '('
-    case 17671:                     // 'version' '('
-    case 17674:                     // 'where' '('
-    case 17675:                     // 'while' '('
-    case 17678:                     // 'with' '('
-    case 17682:                     // 'xquery' '('
-      parse_FunctionCall();
-      break;
-    case 141514:                    // 'ordered' '{'
-      parse_OrderedExpr();
-      break;
-    case 141568:                    // 'unordered' '{'
-      parse_UnorderedExpr();
-      break;
-    case 32:                        // '%'
-    case 120:                       // 'document-node'
-    case 124:                       // 'empty-sequence'
-    case 145:                       // 'function'
-    case 152:                       // 'if'
-    case 165:                       // 'item'
-    case 185:                       // 'namespace-node'
-    case 191:                       // 'node'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-    case 14854:                     // EQName^Token '#'
-    case 14918:                     // 'after' '#'
-    case 14920:                     // 'allowing' '#'
-    case 14921:                     // 'ancestor' '#'
-    case 14922:                     // 'ancestor-or-self' '#'
-    case 14923:                     // 'and' '#'
-    case 14926:                     // 'array' '#'
-    case 14927:                     // 'as' '#'
-    case 14928:                     // 'ascending' '#'
-    case 14929:                     // 'at' '#'
-    case 14930:                     // 'attribute' '#'
-    case 14931:                     // 'base-uri' '#'
-    case 14932:                     // 'before' '#'
-    case 14933:                     // 'boundary-space' '#'
-    case 14934:                     // 'break' '#'
-    case 14936:                     // 'case' '#'
-    case 14937:                     // 'cast' '#'
-    case 14938:                     // 'castable' '#'
-    case 14939:                     // 'catch' '#'
-    case 14941:                     // 'child' '#'
-    case 14942:                     // 'collation' '#'
-    case 14944:                     // 'comment' '#'
-    case 14945:                     // 'constraint' '#'
-    case 14946:                     // 'construction' '#'
-    case 14949:                     // 'context' '#'
-    case 14950:                     // 'continue' '#'
-    case 14951:                     // 'copy' '#'
-    case 14952:                     // 'copy-namespaces' '#'
-    case 14953:                     // 'count' '#'
-    case 14954:                     // 'decimal-format' '#'
-    case 14956:                     // 'declare' '#'
-    case 14957:                     // 'default' '#'
-    case 14958:                     // 'delete' '#'
-    case 14959:                     // 'descendant' '#'
-    case 14960:                     // 'descendant-or-self' '#'
-    case 14961:                     // 'descending' '#'
-    case 14966:                     // 'div' '#'
-    case 14967:                     // 'document' '#'
-    case 14969:                     // 'element' '#'
-    case 14970:                     // 'else' '#'
-    case 14971:                     // 'empty' '#'
-    case 14973:                     // 'encoding' '#'
-    case 14974:                     // 'end' '#'
-    case 14976:                     // 'eq' '#'
-    case 14977:                     // 'every' '#'
-    case 14979:                     // 'except' '#'
-    case 14980:                     // 'exit' '#'
-    case 14981:                     // 'external' '#'
-    case 14982:                     // 'first' '#'
-    case 14983:                     // 'following' '#'
-    case 14984:                     // 'following-sibling' '#'
-    case 14985:                     // 'for' '#'
-    case 14989:                     // 'ft-option' '#'
-    case 14994:                     // 'ge' '#'
-    case 14996:                     // 'group' '#'
-    case 14998:                     // 'gt' '#'
-    case 14999:                     // 'idiv' '#'
-    case 15001:                     // 'import' '#'
-    case 15002:                     // 'in' '#'
-    case 15003:                     // 'index' '#'
-    case 15007:                     // 'insert' '#'
-    case 15008:                     // 'instance' '#'
-    case 15009:                     // 'integrity' '#'
-    case 15010:                     // 'intersect' '#'
-    case 15011:                     // 'into' '#'
-    case 15012:                     // 'is' '#'
-    case 15015:                     // 'json-item' '#'
-    case 15018:                     // 'last' '#'
-    case 15019:                     // 'lax' '#'
-    case 15020:                     // 'le' '#'
-    case 15022:                     // 'let' '#'
-    case 15024:                     // 'loop' '#'
-    case 15026:                     // 'lt' '#'
-    case 15028:                     // 'mod' '#'
-    case 15029:                     // 'modify' '#'
-    case 15030:                     // 'module' '#'
-    case 15032:                     // 'namespace' '#'
-    case 15034:                     // 'ne' '#'
-    case 15040:                     // 'nodes' '#'
-    case 15042:                     // 'object' '#'
-    case 15046:                     // 'only' '#'
-    case 15047:                     // 'option' '#'
-    case 15048:                     // 'or' '#'
-    case 15049:                     // 'order' '#'
-    case 15050:                     // 'ordered' '#'
-    case 15051:                     // 'ordering' '#'
-    case 15054:                     // 'parent' '#'
-    case 15060:                     // 'preceding' '#'
-    case 15061:                     // 'preceding-sibling' '#'
-    case 15064:                     // 'processing-instruction' '#'
-    case 15066:                     // 'rename' '#'
-    case 15067:                     // 'replace' '#'
-    case 15068:                     // 'return' '#'
-    case 15069:                     // 'returning' '#'
-    case 15070:                     // 'revalidation' '#'
-    case 15072:                     // 'satisfies' '#'
-    case 15073:                     // 'schema' '#'
-    case 15076:                     // 'score' '#'
-    case 15077:                     // 'self' '#'
-    case 15082:                     // 'sliding' '#'
-    case 15083:                     // 'some' '#'
-    case 15084:                     // 'stable' '#'
-    case 15085:                     // 'start' '#'
-    case 15088:                     // 'strict' '#'
-    case 15092:                     // 'text' '#'
-    case 15096:                     // 'to' '#'
-    case 15097:                     // 'treat' '#'
-    case 15098:                     // 'try' '#'
-    case 15099:                     // 'tumbling' '#'
-    case 15100:                     // 'type' '#'
-    case 15102:                     // 'union' '#'
-    case 15104:                     // 'unordered' '#'
-    case 15105:                     // 'updating' '#'
-    case 15108:                     // 'validate' '#'
-    case 15109:                     // 'value' '#'
-    case 15110:                     // 'variable' '#'
-    case 15111:                     // 'version' '#'
-    case 15114:                     // 'where' '#'
-    case 15115:                     // 'while' '#'
-    case 15118:                     // 'with' '#'
-    case 15122:                     // 'xquery' '#'
-      parse_FunctionItemExpr();
-      break;
-    case -10:
-      parse_BlockExpr();
-      break;
-    case -11:
-      parse_ObjectConstructor();
-      break;
-    case 68:                        // '['
-      parse_ArrayConstructor();
-      break;
-    case 278:                       // '{|'
-      parse_JSONSimpleObjectUnion();
-      break;
-    default:
-      parse_Constructor();
-    }
-    eventHandler.endNonterminal("PrimaryExpr", e0);
-  }
-
-  function try_PrimaryExpr()
-  {
-    switch (l1)
-    {
-    case 184:                       // 'namespace'
-      lookahead2W(254);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 216:                       // 'processing-instruction'
-      lookahead2W(252);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 276:                       // '{'
-      lookahead2W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      break;
-    case 82:                        // 'attribute'
-    case 121:                       // 'element'
-      lookahead2W(257);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      break;
-    case 96:                        // 'comment'
-    case 244:                       // 'text'
-      lookahead2W(93);              // S^WS | '#' | '(:' | '{'
-      break;
-    case 119:                       // 'document'
-    case 202:                       // 'ordered'
-    case 256:                       // 'unordered'
-      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'
-      break;
-    case 6:                         // EQName^Token
-    case 70:                        // 'after'
-    case 72:                        // 'allowing'
-    case 73:                        // 'ancestor'
-    case 74:                        // 'ancestor-or-self'
-    case 75:                        // 'and'
-    case 78:                        // 'array'
-    case 79:                        // 'as'
-    case 80:                        // 'ascending'
-    case 81:                        // 'at'
-    case 83:                        // 'base-uri'
-    case 84:                        // 'before'
-    case 85:                        // 'boundary-space'
-    case 86:                        // 'break'
-    case 88:                        // 'case'
-    case 89:                        // 'cast'
-    case 90:                        // 'castable'
-    case 91:                        // 'catch'
-    case 93:                        // 'child'
-    case 94:                        // 'collation'
-    case 97:                        // 'constraint'
-    case 98:                        // 'construction'
-    case 101:                       // 'context'
-    case 102:                       // 'continue'
-    case 103:                       // 'copy'
-    case 104:                       // 'copy-namespaces'
-    case 105:                       // 'count'
-    case 106:                       // 'decimal-format'
-    case 108:                       // 'declare'
-    case 109:                       // 'default'
-    case 110:                       // 'delete'
-    case 111:                       // 'descendant'
-    case 112:                       // 'descendant-or-self'
-    case 113:                       // 'descending'
-    case 118:                       // 'div'
-    case 122:                       // 'else'
-    case 123:                       // 'empty'
-    case 125:                       // 'encoding'
-    case 126:                       // 'end'
-    case 128:                       // 'eq'
-    case 129:                       // 'every'
-    case 131:                       // 'except'
-    case 132:                       // 'exit'
-    case 133:                       // 'external'
-    case 134:                       // 'first'
-    case 135:                       // 'following'
-    case 136:                       // 'following-sibling'
-    case 137:                       // 'for'
-    case 141:                       // 'ft-option'
-    case 146:                       // 'ge'
-    case 148:                       // 'group'
-    case 150:                       // 'gt'
-    case 151:                       // 'idiv'
-    case 153:                       // 'import'
-    case 154:                       // 'in'
-    case 155:                       // 'index'
-    case 159:                       // 'insert'
-    case 160:                       // 'instance'
-    case 161:                       // 'integrity'
-    case 162:                       // 'intersect'
-    case 163:                       // 'into'
-    case 164:                       // 'is'
-    case 167:                       // 'json-item'
-    case 170:                       // 'last'
-    case 171:                       // 'lax'
-    case 172:                       // 'le'
-    case 174:                       // 'let'
-    case 176:                       // 'loop'
-    case 178:                       // 'lt'
-    case 180:                       // 'mod'
-    case 181:                       // 'modify'
-    case 182:                       // 'module'
-    case 186:                       // 'ne'
-    case 192:                       // 'nodes'
-    case 194:                       // 'object'
-    case 198:                       // 'only'
-    case 199:                       // 'option'
-    case 200:                       // 'or'
-    case 201:                       // 'order'
-    case 203:                       // 'ordering'
-    case 206:                       // 'parent'
-    case 212:                       // 'preceding'
-    case 213:                       // 'preceding-sibling'
-    case 218:                       // 'rename'
-    case 219:                       // 'replace'
-    case 220:                       // 'return'
-    case 221:                       // 'returning'
-    case 222:                       // 'revalidation'
-    case 224:                       // 'satisfies'
-    case 225:                       // 'schema'
-    case 228:                       // 'score'
-    case 229:                       // 'self'
-    case 234:                       // 'sliding'
-    case 235:                       // 'some'
-    case 236:                       // 'stable'
-    case 237:                       // 'start'
-    case 240:                       // 'strict'
-    case 248:                       // 'to'
-    case 249:                       // 'treat'
-    case 250:                       // 'try'
-    case 251:                       // 'tumbling'
-    case 252:                       // 'type'
-    case 254:                       // 'union'
-    case 257:                       // 'updating'
-    case 260:                       // 'validate'
-    case 261:                       // 'value'
-    case 262:                       // 'variable'
-    case 263:                       // 'version'
-    case 266:                       // 'where'
-    case 267:                       // 'while'
-    case 270:                       // 'with'
-    case 274:                       // 'xquery'
-      lookahead2W(92);              // S^WS | '#' | '(' | '(:'
-      break;
-    default:
-      lk = l1;
-    }
-    if (lk == 2836                  // '{' Wildcard
-     || lk == 3348                  // '{' EQName^Token
-     || lk == 4372                  // '{' IntegerLiteral
-     || lk == 4884                  // '{' DecimalLiteral
-     || lk == 5396                  // '{' DoubleLiteral
-     || lk == 5908                  // '{' StringLiteral
-     || lk == 16148                 // '{' '$'
-     || lk == 16660                 // '{' '%'
-     || lk == 17684                 // '{' '('
-     || lk == 18196                 // '{' '(#'
-     || lk == 20756                 // '{' '+'
-     || lk == 21780                 // '{' '-'
-     || lk == 22804                 // '{' '.'
-     || lk == 23316                 // '{' '..'
-     || lk == 23828                 // '{' '/'
-     || lk == 24340                 // '{' '//'
-     || lk == 27924                 // '{' '<'
-     || lk == 28436                 // '{' '<!--'
-     || lk == 30484                 // '{' '<?'
-     || lk == 34068                 // '{' '@'
-     || lk == 35092                 // '{' '['
-     || lk == 36116                 // '{' 'after'
-     || lk == 37140                 // '{' 'allowing'
-     || lk == 37652                 // '{' 'ancestor'
-     || lk == 38164                 // '{' 'ancestor-or-self'
-     || lk == 38676                 // '{' 'and'
-     || lk == 39700                 // '{' 'append'
-     || lk == 40212                 // '{' 'array'
-     || lk == 40724                 // '{' 'as'
-     || lk == 41236                 // '{' 'ascending'
-     || lk == 41748                 // '{' 'at'
-     || lk == 42260                 // '{' 'attribute'
-     || lk == 42772                 // '{' 'base-uri'
-     || lk == 43284                 // '{' 'before'
-     || lk == 43796                 // '{' 'boundary-space'
-     || lk == 44308                 // '{' 'break'
-     || lk == 45332                 // '{' 'case'
-     || lk == 45844                 // '{' 'cast'
-     || lk == 46356                 // '{' 'castable'
-     || lk == 46868                 // '{' 'catch'
-     || lk == 47892                 // '{' 'child'
-     || lk == 48404                 // '{' 'collation'
-     || lk == 49428                 // '{' 'comment'
-     || lk == 49940                 // '{' 'constraint'
-     || lk == 50452                 // '{' 'construction'
-     || lk == 51988                 // '{' 'context'
-     || lk == 52500                 // '{' 'continue'
-     || lk == 53012                 // '{' 'copy'
-     || lk == 53524                 // '{' 'copy-namespaces'
-     || lk == 54036                 // '{' 'count'
-     || lk == 54548                 // '{' 'decimal-format'
-     || lk == 55572                 // '{' 'declare'
-     || lk == 56084                 // '{' 'default'
-     || lk == 56596                 // '{' 'delete'
-     || lk == 57108                 // '{' 'descendant'
-     || lk == 57620                 // '{' 'descendant-or-self'
-     || lk == 58132                 // '{' 'descending'
-     || lk == 60692                 // '{' 'div'
-     || lk == 61204                 // '{' 'document'
-     || lk == 61716                 // '{' 'document-node'
-     || lk == 62228                 // '{' 'element'
-     || lk == 62740                 // '{' 'else'
-     || lk == 63252                 // '{' 'empty'
-     || lk == 63764                 // '{' 'empty-sequence'
-     || lk == 64276                 // '{' 'encoding'
-     || lk == 64788                 // '{' 'end'
-     || lk == 65812                 // '{' 'eq'
-     || lk == 66324                 // '{' 'every'
-     || lk == 67348                 // '{' 'except'
-     || lk == 67860                 // '{' 'exit'
-     || lk == 68372                 // '{' 'external'
-     || lk == 68884                 // '{' 'first'
-     || lk == 69396                 // '{' 'following'
-     || lk == 69908                 // '{' 'following-sibling'
-     || lk == 70420                 // '{' 'for'
-     || lk == 72468                 // '{' 'ft-option'
-     || lk == 74516                 // '{' 'function'
-     || lk == 75028                 // '{' 'ge'
-     || lk == 76052                 // '{' 'group'
-     || lk == 77076                 // '{' 'gt'
-     || lk == 77588                 // '{' 'idiv'
-     || lk == 78100                 // '{' 'if'
-     || lk == 78612                 // '{' 'import'
-     || lk == 79124                 // '{' 'in'
-     || lk == 79636                 // '{' 'index'
-     || lk == 81684                 // '{' 'insert'
-     || lk == 82196                 // '{' 'instance'
-     || lk == 82708                 // '{' 'integrity'
-     || lk == 83220                 // '{' 'intersect'
-     || lk == 83732                 // '{' 'into'
-     || lk == 84244                 // '{' 'is'
-     || lk == 84756                 // '{' 'item'
-     || lk == 85780                 // '{' 'json-item'
-     || lk == 87316                 // '{' 'last'
-     || lk == 87828                 // '{' 'lax'
-     || lk == 88340                 // '{' 'le'
-     || lk == 89364                 // '{' 'let'
-     || lk == 90388                 // '{' 'loop'
-     || lk == 91412                 // '{' 'lt'
-     || lk == 92436                 // '{' 'mod'
-     || lk == 92948                 // '{' 'modify'
-     || lk == 93460                 // '{' 'module'
-     || lk == 94484                 // '{' 'namespace'
-     || lk == 94996                 // '{' 'namespace-node'
-     || lk == 95508                 // '{' 'ne'
-     || lk == 98068                 // '{' 'node'
-     || lk == 98580                 // '{' 'nodes'
-     || lk == 99604                 // '{' 'object'
-     || lk == 101652                // '{' 'only'
-     || lk == 102164                // '{' 'option'
-     || lk == 102676                // '{' 'or'
-     || lk == 103188                // '{' 'order'
-     || lk == 103700                // '{' 'ordered'
-     || lk == 104212                // '{' 'ordering'
-     || lk == 105748                // '{' 'parent'
-     || lk == 108820                // '{' 'preceding'
-     || lk == 109332                // '{' 'preceding-sibling'
-     || lk == 110868                // '{' 'processing-instruction'
-     || lk == 111892                // '{' 'rename'
-     || lk == 112404                // '{' 'replace'
-     || lk == 112916                // '{' 'return'
-     || lk == 113428                // '{' 'returning'
-     || lk == 113940                // '{' 'revalidation'
-     || lk == 114964                // '{' 'satisfies'
-     || lk == 115476                // '{' 'schema'
-     || lk == 115988                // '{' 'schema-attribute'
-     || lk == 116500                // '{' 'schema-element'
-     || lk == 117012                // '{' 'score'
-     || lk == 117524                // '{' 'self'
-     || lk == 120084                // '{' 'sliding'
-     || lk == 120596                // '{' 'some'
-     || lk == 121108                // '{' 'stable'
-     || lk == 121620                // '{' 'start'
-     || lk == 123156                // '{' 'strict'
-     || lk == 124692                // '{' 'switch'
-     || lk == 125204                // '{' 'text'
-     || lk == 127252                // '{' 'to'
-     || lk == 127764                // '{' 'treat'
-     || lk == 128276                // '{' 'try'
-     || lk == 128788                // '{' 'tumbling'
-     || lk == 129300                // '{' 'type'
-     || lk == 129812                // '{' 'typeswitch'
-     || lk == 130324                // '{' 'union'
-     || lk == 131348                // '{' 'unordered'
-     || lk == 131860                // '{' 'updating'
-     || lk == 133396                // '{' 'validate'
-     || lk == 133908                // '{' 'value'
-     || lk == 134420                // '{' 'variable'
-     || lk == 134932                // '{' 'version'
-     || lk == 136468                // '{' 'where'
-     || lk == 136980                // '{' 'while'
-     || lk == 138516                // '{' 'with'
-     || lk == 140564                // '{' 'xquery'
-     || lk == 141588                // '{' '{'
-     || lk == 142612                // '{' '{|'
-     || lk == 144660)               // '{' '}'
-    {
-      lk = memoized(12, e0);
-      if (lk == 0)
-      {
-        var b0A = b0; var e0A = e0; var l1A = l1;
-        var b1A = b1; var e1A = e1; var l2A = l2;
-        var b2A = b2; var e2A = e2;
-        try
-        {
-          try_BlockExpr();
-          memoize(12, e0A, -10);
-          lk = -14;
-        }
-        catch (p10A)
-        {
-          lk = -11;
-          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {
-          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {
-          b2 = b2A; e2 = e2A; end = e2A; }}
-          memoize(12, e0A, -11);
-        }
-      }
-    }
-    switch (lk)
-    {
-    case 8:                         // IntegerLiteral
-    case 9:                         // DecimalLiteral
-    case 10:                        // DoubleLiteral
-    case 11:                        // StringLiteral
-      try_Literal();
-      break;
-    case 31:                        // '$'
-      try_VarRef();
-      break;
-    case 34:                        // '('
-      try_ParenthesizedExpr();
-      break;
-    case 44:                        // '.'
-      try_ContextItemExpr();
-      break;
-    case 17414:                     // EQName^Token '('
-    case 17478:                     // 'after' '('
-    case 17480:                     // 'allowing' '('
-    case 17481:                     // 'ancestor' '('
-    case 17482:                     // 'ancestor-or-self' '('
-    case 17483:                     // 'and' '('
-    case 17486:                     // 'array' '('
-    case 17487:                     // 'as' '('
-    case 17488:                     // 'ascending' '('
-    case 17489:                     // 'at' '('
-    case 17491:                     // 'base-uri' '('
-    case 17492:                     // 'before' '('
-    case 17493:                     // 'boundary-space' '('
-    case 17494:                     // 'break' '('
-    case 17496:                     // 'case' '('
-    case 17497:                     // 'cast' '('
-    case 17498:                     // 'castable' '('
-    case 17499:                     // 'catch' '('
-    case 17501:                     // 'child' '('
-    case 17502:                     // 'collation' '('
-    case 17505:                     // 'constraint' '('
-    case 17506:                     // 'construction' '('
-    case 17509:                     // 'context' '('
-    case 17510:                     // 'continue' '('
-    case 17511:                     // 'copy' '('
-    case 17512:                     // 'copy-namespaces' '('
-    case 17513:                     // 'count' '('
-    case 17514:                     // 'decimal-format' '('
-    case 17516:                     // 'declare' '('
-    case 17517:                     // 'default' '('
-    case 17518:                     // 'delete' '('
-    case 17519:                     // 'descendant' '('
-    case 17520:                     // 'descendant-or-self' '('
-    case 17521:                     // 'descending' '('
-    case 17526:                     // 'div' '('
-    case 17527:                     // 'document' '('
-    case 17530:                     // 'else' '('
-    case 17531:                     // 'empty' '('
-    case 17533:                     // 'encoding' '('
-    case 17534:                     // 'end' '('
-    case 17536:                     // 'eq' '('
-    case 17537:                     // 'every' '('
-    case 17539:                     // 'except' '('
-    case 17540:                     // 'exit' '('
-    case 17541:                     // 'external' '('
-    case 17542:                     // 'first' '('
-    case 17543:                     // 'following' '('
-    case 17544:                     // 'following-sibling' '('
-    case 17545:                     // 'for' '('
-    case 17549:                     // 'ft-option' '('
-    case 17554:                     // 'ge' '('
-    case 17556:                     // 'group' '('
-    case 17558:                     // 'gt' '('
-    case 17559:                     // 'idiv' '('
-    case 17561:                     // 'import' '('
-    case 17562:                     // 'in' '('
-    case 17563:                     // 'index' '('
-    case 17567:                     // 'insert' '('
-    case 17568:                     // 'instance' '('
-    case 17569:                     // 'integrity' '('
-    case 17570:                     // 'intersect' '('
-    case 17571:                     // 'into' '('
-    case 17572:                     // 'is' '('
-    case 17575:                     // 'json-item' '('
-    case 17578:                     // 'last' '('
-    case 17579:                     // 'lax' '('
-    case 17580:                     // 'le' '('
-    case 17582:                     // 'let' '('
-    case 17584:                     // 'loop' '('
-    case 17586:                     // 'lt' '('
-    case 17588:                     // 'mod' '('
-    case 17589:                     // 'modify' '('
-    case 17590:                     // 'module' '('
-    case 17592:                     // 'namespace' '('
-    case 17594:                     // 'ne' '('
-    case 17600:                     // 'nodes' '('
-    case 17602:                     // 'object' '('
-    case 17606:                     // 'only' '('
-    case 17607:                     // 'option' '('
-    case 17608:                     // 'or' '('
-    case 17609:                     // 'order' '('
-    case 17610:                     // 'ordered' '('
-    case 17611:                     // 'ordering' '('
-    case 17614:                     // 'parent' '('
-    case 17620:                     // 'preceding' '('
-    case 17621:                     // 'preceding-sibling' '('
-    case 17626:                     // 'rename' '('
-    case 17627:                     // 'replace' '('
-    case 17628:                     // 'return' '('
-    case 17629:                     // 'returning' '('
-    case 17630:                     // 'revalidation' '('
-    case 17632:                     // 'satisfies' '('
-    case 17633:                     // 'schema' '('
-    case 17636:                     // 'score' '('
-    case 17637:                     // 'self' '('
-    case 17642:                     // 'sliding' '('
-    case 17643:                     // 'some' '('
-    case 17644:                     // 'stable' '('
-    case 17645:                     // 'start' '('
-    case 17648:                     // 'strict' '('
-    case 17656:                     // 'to' '('
-    case 17657:                     // 'treat' '('
-    case 17658:                     // 'try' '('
-    case 17659:                     // 'tumbling' '('
-    case 17660:                     // 'type' '('
-    case 17662:                     // 'union' '('
-    case 17664:                     // 'unordered' '('
-    case 17665:                     // 'updating' '('
-    case 17668:                     // 'validate' '('
-    case 17669:                     // 'value' '('
-    case 17670:                     // 'variable' '('
-    case 17671:                     // 'version' '('
-    case 17674:                     // 'where' '('
-    case 17675:                     // 'while' '('
-    case 17678:                     // 'with' '('
-    case 17682:                     // 'xquery' '('
-      try_FunctionCall();
-      break;
-    case 141514:                    // 'ordered' '{'
-      try_OrderedExpr();
-      break;
-    case 141568:                    // 'unordered' '{'
-      try_UnorderedExpr();
-      break;
-    case 32:                        // '%'
-    case 120:                       // 'document-node'
-    case 124:                       // 'empty-sequence'
-    case 145:                       // 'function'
-    case 152:                       // 'if'
-    case 165:                       // 'item'
-    case 185:                       // 'namespace-node'
-    case 191:                       // 'node'
-    case 226:                       // 'schema-attribute'
-    case 227:                       // 'schema-element'
-    case 243:                       // 'switch'
-    case 253:                       // 'typeswitch'
-    case 14854:                     // EQName^Token '#'
-    case 14918:                     // 'after' '#'
-    case 14920:                     // 'allowing' '#'
-    case 14921:                     // 'ancestor' '#'
-    case 14922:                     // 'ancestor-or-self' '#'
-    case 14923:                     // 'and' '#'
-    case 14926:                     // 'array' '#'
-    case 14927:                     // 'as' '#'
-    case 14928:                     // 'ascending' '#'
-    case 14929:                     // 'at' '#'
-    case 14930:                     // 'attribute' '#'
-    case 14931:                     // 'base-uri' '#'
-    case 14932:                     // 'before' '#'
-    case 14933:                     // 'boundary-space' '#'
-    case 14934:                     // 'break' '#'
-    case 14936:                     // 'case' '#'
-    case 14937:                     // 'cast' '#'
-    case 14938:                     // 'castable' '#'
-    case 14939:                     // 'catch' '#'
-    case 14941:                     // 'child' '#'
-    case 14942:                     // 'collation' '#'
-    case 14944:                     // 'comment' '#'
-    case 14945:                     // 'constraint' '#'
-    case 14946:                     // 'construction' '#'
-    case 14949:                     // 'context' '#'
-    case 14950:                     // 'continue' '#'
-    case 14951:                     // 'copy' '#'
-    case 14952:                     // 'copy-namespaces' '#'
-    case 14953:                     // 'count' '#'
-    case 14954:                     // 'decimal-format' '#'
-    case 14956:                     // 'declare' '#'
-    case 14957:                     // 'default' '#'
-    case 14958:                     // 'delete' '#'
-    case 14959:                     // 'descendant' '#'
-    case 14960:                     // 'descendant-or-self' '#'
-    case 14961:                     // 'descending' '#'
-    case 14966:                     // 'div' '#'
-    case 14967:                     // 'document' '#'
-    case 14969:                     // 'element' '#'
-    case 14970:                     // 'else' '#'
-    case 14971:                     // 'empty' '#'
-    case 14973:                     // 'encoding' '#'
-    case 14974:                     // 'end' '#'
-    case 14976:                     // 'eq' '#'
-    case 14977:                     // 'every' '#'
-    case 14979:                     // 'except' '#'
-    case 14980:                     // 'exit' '#'
-    case 14981:                     // 'external' '#'
-    case 14982:                     // 'first' '#'
-    case 14983:                     // 'following' '#'
-    case 14984:                     // 'following-sibling' '#'
-    case 14985:                     // 'for' '#'
-    case 14989:                     // 'ft-option' '#'
-    case 14994:                     // 'ge' '#'
-    case 14996:                     // 'group' '#'
-    case 14998:                     // 'gt' '#'
-    case 14999:                     // 'idiv' '#'
-    case 15001:                     // 'import' '#'
-    case 15002:                     // 'in' '#'
-    case 15003:                     // 'index' '#'
-    case 15007:                     // 'insert' '#'
-    case 15008:                     // 'instance' '#'
-    case 15009:                     // 'integrity' '#'
-    case 15010:                     // 'intersect' '#'
-    case 15011:                     // 'into' '#'
-    case 15012:                     // 'is' '#'
-    case 15015:                     // 'json-item' '#'
-    case 15018:                     // 'last' '#'
-    case 15019:                     // 'lax' '#'
-    case 15020:                     // 'le' '#'
-    case 15022:                     // 'let' '#'
-    case 15024:                     // 'loop' '#'
-    case 15026:                     // 'lt' '#'
-    case 15028:                     // 'mod' '#'
-    case 15029:                     // 'modify' '#'
-    case 15030:                     // 'module' '#'
-    case 15032:                     // 'namespace' '#'
-    case 15034:                     // 'ne' '#'
-    case 15040:                     // 'nodes' '#'
-    case 15042:                     // 'object' '#'
-    case 15046:                     // 'only' '#'
-    case 15047:                     // 'option' '#'
-    case 15048:                     // 'or' '#'
-    case 15049:                     // 'order' '#'
-    case 15050:                     // 'ordered' '#'
-    case 15051:                     // 'ordering' '#'
-    case 15054:                     // 'parent' '#'
-    case 15060:                     // 'preceding' '#'
-    case 15061:                     // 'preceding-sibling' '#'
-    case 15064:                     // 'processing-instruction' '#'
-    case 15066:                     // 'rename' '#'
-    case 15067:                     // 'replace' '#'
-    case 15068:                     // 'return' '#'
-    case 15069:                     // 'returning' '#'
-    case 15070:                     // 'revalidation' '#'
-    case 15072:                     // 'satisfies' '#'
-    case 15073:                     // 'schema' '#'
-    case 15076:                     // 'score' '#'
-    case 15077:                     // 'self' '#'
-    case 15082:                     // 'sliding' '#'
-    case 15083:                     // 'some' '#'
-    case 15084:                     // 'stable' '#'
-    case 15085:                     // 'start' '#'
-    case 15088:                     // 'strict' '#'
-    case 15092:                     // 'text' '#'
-    case 15096:                     // 'to' '#'
-    case 15097:                     // 'treat' '#'
-    case 15098:                     // 'try' '#'
-    case 15099:                     // 'tumbling' '#'
-    case 15100:                     // 'type' '#'
-    case 15102:                     // 'union' '#'
-    case 15104:                     // 'unordered' '#'
-    case 15105:                     // 'updating' '#'
-    case 15108:                     // 'validate' '#'
-    case 15109:                     // 'value' '#'
-    case 15110:                     // 'variable' '#'
-    case 15111:                     // 'version' '#'
-    case 15114:                     // 'where' '#'
-    case 15115:                     // 'while' '#'
-    case 15118:                     // 'with' '#'
-    case 15122:                     // 'xquery' '#'
-      try_FunctionItemExpr();
-      break;
-    case -10:
-      try_BlockExpr();
-      break;
-    case -11:
-      try_ObjectConstructor();
-      break;
-    case 68:                        // '['
-      try_ArrayConstructor();
-      break;
-    case 278:                       // '{|'
-      try_JSONSimpleObjectUnion();
-      break;
-    case -14:
-      break;
-    default:
-      try_Constructor();
-    }
-  }
-
-  function parse_JSONSimpleObjectUnion()
-  {
-    eventHandler.startNonterminal("JSONSimpleObjectUnion", e0);
-    shift(278);                     // '{|'
-    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 281)                  // '|}'
-    {
-      whitespace();
-      parse_Expr();
-    }
-    shift(281);                     // '|}'
-    eventHandler.endNonterminal("JSONSimpleObjectUnion", e0);
-  }
-
-  function try_JSONSimpleObjectUnion()
-  {
-    shiftT(278);                    // '{|'
-    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 281)                  // '|}'
-    {
-      try_Expr();
-    }
-    shiftT(281);                    // '|}'
-  }
-
-  function parse_ObjectConstructor()
-  {
-    eventHandler.startNonterminal("ObjectConstructor", e0);
-    shift(276);                     // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 282)                  // '}'
-    {
-      whitespace();
-      parse_PairConstructor();
-      for (;;)
-      {
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shift(41);                  // ','
-        lookahead1W(267);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        whitespace();
-        parse_PairConstructor();
-      }
-    }
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("ObjectConstructor", e0);
-  }
-
-  function try_ObjectConstructor()
-  {
-    shiftT(276);                    // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 282)                  // '}'
-    {
-      try_PairConstructor();
-      for (;;)
-      {
-        if (l1 != 41)               // ','
-        {
-          break;
-        }
-        shiftT(41);                 // ','
-        lookahead1W(267);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-        try_PairConstructor();
-      }
-    }
-    shiftT(282);                    // '}'
-  }
-
-  function parse_PairConstructor()
-  {
-    eventHandler.startNonterminal("PairConstructor", e0);
-    parse_ExprSingle();
-    shift(49);                      // ':'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_ExprSingle();
-    eventHandler.endNonterminal("PairConstructor", e0);
-  }
-
-  function try_PairConstructor()
-  {
-    try_ExprSingle();
-    shiftT(49);                     // ':'
-    lookahead1W(267);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_ExprSingle();
-  }
-
-  function parse_ArrayConstructor()
-  {
-    eventHandler.startNonterminal("ArrayConstructor", e0);
-    shift(68);                      // '['
-    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 69)                   // ']'
-    {
-      whitespace();
-      parse_Expr();
-    }
-    shift(69);                      // ']'
-    eventHandler.endNonterminal("ArrayConstructor", e0);
-  }
-
-  function try_ArrayConstructor()
-  {
-    shiftT(68);                     // '['
-    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    if (l1 != 69)                   // ']'
-    {
-      try_Expr();
-    }
-    shiftT(69);                     // ']'
-  }
-
-  function parse_BlockExpr()
-  {
-    eventHandler.startNonterminal("BlockExpr", e0);
-    shift(276);                     // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    whitespace();
-    parse_StatementsAndOptionalExpr();
-    shift(282);                     // '}'
-    eventHandler.endNonterminal("BlockExpr", e0);
-  }
-
-  function try_BlockExpr()
-  {
-    shiftT(276);                    // '{'
-    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-    try_StatementsAndOptionalExpr();
-    shiftT(282);                    // '}'
-  }
-
-  function parse_FunctionDecl()
-  {
-    eventHandler.startNonterminal("FunctionDecl", e0);
-    shift(145);                     // 'function'
-    lookahead1W(253);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
-    whitespace();
-    parse_EQName();
-    lookahead1W(22);                // S^WS | '(' | '(:'
-    shift(34);                      // '('
-    lookahead1W(94);                // S^WS | '$' | '(:' | ')'
-    if (l1 == 31)                   // '$'
-    {
-      whitespace();
-      parse_ParamList();
-    }
-    shift(37);                      // ')'
-    lookahead1W(148);               // S^WS | '(:' | 'as' | 'external' | '{'
-    if (l1 == 79)                   // 'as'
-    {
-      shift(79);                    // 'as'
-      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
-      whitespace();
-      parse_SequenceType();
-    }
-    lookahead1W(118);               // S^WS | '(:' | 'external' | '{'
-    switch (l1)
-    {
-    case 276:                       // '{'
-      shift(276);                   // '{'
-      lookahead1W(273);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |
-      whitespace();
-      parse_StatementsAndOptionalExpr();
-      shift(282);                   // '}'
-      break;
-    default:
-      shift(133);                   // 'external'
-    }
-    eventHandler.endNonterminal("FunctionDecl", e0);
-  }
-
-  var lk, b0, e0;
-  var l1, b1, e1;
-  var l2, b2, e2;
-  var bx, ex, sx, lx, tx;
-  var eventHandler;
-  var memo;
-
-  function memoize(i, e, v)
-  {
-    memo[(e << 4) + i] = v;
-  }
-
-  function memoized(i, e)
-  {
-    var v = memo[(e << 4) + i];
-    return typeof v != "undefined" ? v : 0;
-  }
-
-  function error(b, e, s, l, t)
-  {
-    if (e > ex)
-    {
-      bx = b;
-      ex = e;
-      sx = s;
-      lx = l;
-      tx = t;
-    }
-    throw new self.ParseException(bx, ex, sx, lx, tx);
-  }
-
-  function shift(t)
-  {
-    if (l1 == t)
-    {
-      whitespace();
-      eventHandler.terminal(XQueryParser.TOKEN[l1], b1, e1 > size ? size : e1);
-      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {
-      b1 = b2; e1 = e2; l2 = 0; }
-    }
-    else
-    {
-      error(b1, e1, 0, l1, t);
-    }
-  }
-
-  function shiftT(t)
-  {
-    if (l1 == t)
-    {
-      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {
-      b1 = b2; e1 = e2; l2 = 0; }
-    }
-    else
-    {
-      error(b1, e1, 0, l1, t);
-    }
-  }
-
-  function skip(code)
-  {
-    var b0W = b0; var e0W = e0; var l1W = l1;
-    var b1W = b1; var e1W = e1;
-
-    l1 = code; b1 = begin; e1 = end;
-    l2 = 0;
-
-    try_Whitespace();
-
-    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {
-    b1 = b1W; e1 = e1W; }
-  }
-
-  function whitespace()
-  {
-    if (e0 != b1)
-    {
-      b0 = e0;
-      e0 = b1;
-      eventHandler.whitespace(b0, e0);
-    }
-  }
-
-  function matchW(set)
-  {
-    var code;
-    for (;;)
-    {
-      code = match(set);
-      if (code != 22)               // S^WS
-      {
-        if (code != 36)             // '(:'
-        {
-          break;
-        }
-        skip(code);
-      }
-    }
-    return code;
-  }
-
-  function lookahead1W(set)
-  {
-    if (l1 == 0)
-    {
-      l1 = matchW(set);
-      b1 = begin;
-      e1 = end;
-    }
-  }
-
-  function lookahead2W(set)
-  {
-    if (l2 == 0)
-    {
-      l2 = matchW(set);
-      b2 = begin;
-      e2 = end;
-    }
-    lk = (l2 << 9) | l1;
-  }
-
-  function lookahead1(set)
-  {
-    if (l1 == 0)
-    {
-      l1 = match(set);
-      b1 = begin;
-      e1 = end;
-    }
-  }
-
-  function lookahead2(set)
-  {
-    if (l2 == 0)
-    {
-      l2 = match(set);
-      b2 = begin;
-      e2 = end;
-    }
-    lk = (l2 << 9) | l1;
-  }
-
-  var input;
-  var size;
-  var begin;
-  var end;
-
-  function match(tokenSetId)
-  {
-    var nonbmp = false;
-    begin = end;
-    var current = end;
-    var result = XQueryParser.INITIAL[tokenSetId];
-    var state = 0;
-
-    for (var code = result & 4095; code != 0; )
-    {
-      var charclass;
-      var c0 = current < size ? input.charCodeAt(current) : 0;
-      ++current;
-      if (c0 < 0x80)
-      {
-        charclass = XQueryParser.MAP0[c0];
-      }
-      else if (c0 < 0xd800)
-      {
-        var c1 = c0 >> 4;
-        charclass = XQueryParser.MAP1[(c0 & 15) + XQueryParser.MAP1[(c1 & 31) + XQueryParser.MAP1[c1 >> 5]]];
-      }
-      else
-      {
-        if (c0 < 0xdc00)
-        {
-          var c1 = current < size ? input.charCodeAt(current) : 0;
-          if (c1 >= 0xdc00 && c1 < 0xe000)
-          {
-            ++current;
-            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;
-            nonbmp = true;
-          }
-        }
-        var lo = 0, hi = 5;
-        for (var m = 3; ; m = (hi + lo) >> 1)
-        {
-          if (XQueryParser.MAP2[m] > c0) hi = m - 1;
-          else if (XQueryParser.MAP2[6 + m] < c0) lo = m + 1;
-          else {charclass = XQueryParser.MAP2[12 + m]; break;}
-          if (lo > hi) {charclass = 0; break;}
-        }
-      }
-
-      state = code;
-      var i0 = (charclass << 12) + code - 1;
-      code = XQueryParser.TRANSITION[(i0 & 15) + XQueryParser.TRANSITION[i0 >> 4]];
-
-      if (code > 4095)
-      {
-        result = code;
-        code &= 4095;
-        end = current;
-      }
-    }
-
-    result >>= 12;
-    if (result == 0)
-    {
-      end = current - 1;
-      var c1 = end < size ? input.charCodeAt(end) : 0;
-      if (c1 >= 0xdc00 && c1 < 0xe000) --end;
-      return error(begin, end, state, -1, -1);
-    }
-
-    if (nonbmp)
-    {
-      for (var i = result >> 9; i > 0; --i)
-      {
-        --end;
-        var c1 = end < size ? input.charCodeAt(end) : 0;
-        if (c1 >= 0xdc00 && c1 < 0xe000) --end;
-      }
-    }
-    else
-    {
-      end -= result >> 9;
-    }
-
-    return (result & 511) - 1;
-  }
-}
-
-XQueryParser.getTokenSet = function(tokenSetId)
-{
-  var set = [];
-  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;
-  for (var i = 0; i < 284; i += 32)
-  {
-    var j = i;
-    var i0 = (i >> 5) * 3684 + s - 1;
-    var i1 = i0 >> 2;
-    var i2 = i1 >> 2;
-    var f = XQueryParser.EXPECTED[(i0 & 3) + XQueryParser.EXPECTED[(i1 & 3) + XQueryParser.EXPECTED[(i2 & 7) + XQueryParser.EXPECTED[i2 >> 3]]]];
-    for ( ; f != 0; f >>>= 1, ++j)
-    {
-      if ((f & 1) != 0)
-      {
-        set.push(XQueryParser.TOKEN[j]);
-      }
-    }
-  }
-  return set;
-};
-
-XQueryParser.MAP0 =
-[ 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38
-];
-
-XQueryParser.MAP1 =
-[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440, 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 38, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 30, 30, 38, 38, 38, 38, 38, 38, 38, 69, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69
-];
-
-XQueryParser.MAP2 =
-[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 38, 30, 38, 30, 30, 38
-];
-
-XQueryParser.INITIAL =
-[ 1, 12290, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284
-];
-
-XQueryParser.TRANSITION =
-[ 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22007, 18176, 18196, 18196, 18196, 18203, 18196, 18196, 18196, 18196, 18230, 18196, 18196, 18196, 18196, 18219, 18196, 18180, 18246, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 18411, 20907, 20920, 20932, 20944, 22539, 18416, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 37625, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 21008, 21032, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21632, 21055, 23546, 23546, 23546, 21178, 23546, 23546, 23916, 42362, 21241, 23546, 23546, 23546, 23546, 19298, 47203, 21077, 21110, 23546, 23546, 23546, 35799, 23546, 23546, 21194, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 21229, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21358, 21323, 23546, 23546, 23546, 26152, 23546, 23546, 27593, 23546, 21369, 29482, 21257, 21282, 21273, 21304, 21317, 21346, 20967, 23546, 23546, 23546, 28947, 23546, 23546, 21385, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 20711, 21423, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 21446, 26048, 18745, 18766, 18771, 20561, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23540, 23546, 23546, 23546, 25880, 23545, 23546, 31245, 23546, 21468, 23534, 21504, 23546, 21511, 23546, 21527, 21539, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 21567, 23546, 23546, 23546, 31874, 23546, 23546, 21586, 23546, 23546, 21608, 21620, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 35211, 23546, 23546, 23546, 23546, 23546, 23546, 23424, 21648, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 21681, 18544, 18567, 18590, 50977, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21736, 21705, 23546, 23546, 23546, 44539, 23546, 23546, 24265, 25689, 25607, 23546, 23546, 23546, 23546, 26450, 47502, 21724, 21752, 23546, 23546, 23546, 35799, 23546, 23546, 21783, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 20237, 21819, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21551, 21857, 21913, 21913, 21913, 21864, 21908, 21913, 21918, 21967, 21842, 21949, 21880, 21961, 21896, 21934, 21983, 21995, 20967, 23546, 23546, 23546, 26225, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 22023, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 28636, 23546, 23546, 23546, 25912, 50946, 23546, 50080, 50952, 21369, 28635, 23546, 22054, 22060, 22076, 22111, 22121, 22137, 23546, 23546, 23546, 30755, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 22183, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 27655, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 51066, 39748, 22869, 22242, 22228, 22245, 22261, 22277, 22288, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 20285, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 18648, 40763, 24585, 22304, 22324, 22304, 22338, 24585, 22308, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 22361, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 22386, 23546, 23546, 23546, 25841, 18403, 23546, 19576, 22382, 44281, 22402, 22429, 22434, 22434, 22450, 22385, 22413, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22473, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 25653, 22498, 22518, 22498, 22532, 25653, 22502, 22555, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27132, 23546, 42897, 23546, 44844, 38626, 22584, 22361, 37471, 23546, 23546, 23546, 23546, 22587, 47563, 46856, 47563, 47563, 22603, 35356, 22824, 22824, 34828, 22804, 22621, 22804, 22804, 33187, 36943, 23546, 23546, 23546, 23546, 23546, 26071, 23546, 22641, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 43701, 32739, 23546, 23546, 23546, 23546, 23546, 29474, 22702, 23546, 33124, 44563, 47563, 47563, 47563, 47564, 22719, 35350, 22824, 22764, 22824, 22767, 35689, 22783, 22804, 22803, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 27587, 23546, 23546, 47562, 46826, 47563, 47563, 27195, 22821, 42846, 22824, 22824, 22824, 30376, 22804, 22841, 22804, 22804, 29883, 33199, 23546, 23546, 21430, 23546, 49502, 48973, 47563, 47563, 36153, 45209, 22824, 22824, 39816, 27834, 22804, 22804, 43796, 30403, 39964, 23546, 23546, 22861, 23546, 47560, 22885, 47563, 23113, 22903, 22824, 33078, 22920, 22804, 38116, 23546, 23546, 22937, 29174, 22980, 47563, 34384, 42527, 22825, 23019, 22804, 31964, 47447, 46606, 23083, 36624, 23105, 32340, 30673, 23131, 36549, 23164, 40907, 43074, 23200, 23229, 23275, 36645, 36686, 33550, 48975, 23107, 30672, 23141, 39417, 23313, 23334, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 24855, 21369, 23546, 23546, 23546, 23546, 23546, 20980, 20992, 23383, 23546, 23546, 23546, 35799, 23546, 23546, 23420, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 23440, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 18368, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 26071, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23485, 23546, 23546, 23546, 26606, 23546, 23546, 23546, 23546, 21369, 28080, 23505, 23528, 23563, 23575, 28081, 23512, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 30821, 23546, 37478, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23598, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23184, 21369, 23546, 23546, 23546, 23546, 23546, 22653, 22665, 23615, 23546, 23546, 23546, 35799, 23546, 23546, 23644, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 23664, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 23688, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 48779, 23733, 23546, 23546, 23546, 23546, 34921, 23753, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 23777, 48792, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 41753, 22821, 22824, 22824, 22824, 22824, 44122, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 34866, 22821, 22824, 22824, 22824, 22824, 23826, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 39721, 23546, 23546, 23546, 30797, 25982, 23546, 23546, 23849, 21369, 20313, 44188, 23887, 23893, 23909, 23546, 49114, 23932, 23546, 23546, 23546, 36603, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 24187, 24465, 24820, 25200, 24258, 18282, 18849, 18305, 23964, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 23993, 24116, 24017, 24046, 24001, 24088, 25090, 24132, 24812, 24103, 24159, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 24182, 25436, 24884, 24206, 24190, 24890, 24819, 24363, 24227, 24819, 24414, 24143, 25214, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 24243, 24030, 25425, 24281, 24706, 24308, 24337, 24350, 24389, 24405, 24517, 24423, 25208, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 24439, 19364, 24455, 25063, 24489, 24505, 24533, 25266, 24373, 24545, 24561, 24577, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 19809, 24679, 24601, 25048, 19406, 24473, 24617, 25251, 25017, 24736, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 24633, 24673, 24695, 24722, 24779, 24801, 24836, 23977, 20842, 20016, 18679, 20827, 20042, 24871, 24906, 24935, 24951, 25006, 25411, 25295, 20159, 20175, 20206, 25033, 24292, 25079, 25281, 25106, 20376, 20392, 19394, 24919, 24657, 20462, 19676, 24211, 24785, 32258, 19353, 24647, 24966, 20473, 24060, 25136, 20616, 25172, 25188, 25236, 24072, 25311, 25362, 25396, 25452, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 21328, 23546, 23546, 23546, 25841, 25477, 23546, 23546, 25472, 32915, 25493, 25501, 25501, 25501, 25517, 21330, 25540, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 25581, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20499, 25597, 18792, 18808, 18830, 23628, 18814, 25623, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 21016, 25645, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 25669, 25705, 25721, 19477, 25754, 19498, 25737, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 18708, 21452, 19692, 19708, 20143, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 50535, 23259, 25770, 25770, 25770, 25779, 21123, 21135, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 25220, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25802, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21147, 20888, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 22959, 25825, 25825, 25825, 25834, 20891, 22964, 25857, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 27140, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25873, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25552, 25561, 23546, 23546, 23546, 26852, 23546, 23546, 23546, 23546, 21369, 33245, 25896, 25896, 25896, 25905, 36950, 33250, 25928, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 22366, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 25964, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 25998, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26099, 23546, 23546, 23546, 23546, 25841, 21661, 23546, 23546, 21094, 43925, 23546, 23546, 23546, 21665, 26069, 21092, 26087, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 31389, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 26115, 26145, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 43987, 26168, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 26285, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 26302, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 26321, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 19867, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 26341, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 26341, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 29369, 22821, 22824, 22824, 22824, 22824, 28821, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 23049, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26364, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 19293, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 31312, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 37937, 26399, 26410, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 26426, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26445, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 41698, 26466, 26486, 26508, 26520, 41701, 26470, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 38227, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 26543, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 23546, 23424, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 28554, 23546, 26577, 26583, 26599, 47449, 44239, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 26622, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 26638, 20392, 51127, 20418, 50802, 26654, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 27306, 23546, 23546, 23546, 26527, 26683, 26714, 28322, 26699, 26731, 50814, 50823, 26775, 26789, 26801, 26817, 26829, 26204, 26845, 23599, 23546, 25326, 21171, 35898, 34903, 26868, 26909, 26948, 33311, 26979, 26959, 26995, 27011, 45967, 27047, 27063, 27101, 27117, 34536, 27156, 23546, 23546, 44844, 41240, 34846, 23546, 42415, 27173, 27664, 23546, 42356, 28101, 47563, 47563, 47563, 27192, 27418, 22824, 22824, 42533, 43762, 22804, 22804, 22804, 27211, 27231, 36943, 23546, 44839, 40944, 23546, 27267, 27287, 46640, 23546, 27304, 35519, 43402, 27322, 27344, 47563, 47563, 27380, 27403, 27436, 31453, 22824, 33011, 27464, 27493, 27533, 27556, 22804, 38069, 35418, 30315, 27573, 26241, 27609, 23546, 44532, 27629, 39107, 50620, 23546, 45009, 27646, 31107, 27698, 47563, 27746, 27765, 23297, 27785, 27825, 36368, 22824, 27859, 48139, 23833, 27991, 44504, 49256, 22804, 43572, 23672, 27877, 42988, 25683, 23546, 27893, 27913, 46094, 23546, 21213, 44018, 47563, 30489, 32462, 27941, 34820, 22824, 45399, 49012, 28821, 27978, 22804, 22804, 28014, 28034, 49064, 28072, 35792, 28097, 51046, 28117, 50856, 22994, 28137, 47563, 41728, 28206, 28229, 22824, 41433, 28267, 28290, 22804, 34572, 28320, 28338, 23546, 23546, 39715, 47560, 28358, 45550, 23113, 28379, 35308, 33078, 28399, 36714, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 41649, 28419, 28455, 40472, 38341, 28471, 38828, 40452, 28791, 24756, 33030, 27540, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 28526, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 34078, 28545, 23546, 28652, 28658, 28674, 28690, 28701, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 26963, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22605, 35842, 45303, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 46230, 50621, 28718, 23546, 28717, 23546, 48975, 47563, 47563, 47563, 27769, 28735, 22823, 22824, 22824, 22824, 49361, 49439, 22804, 22804, 22804, 22804, 28781, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 23672, 23807, 23546, 18289, 23546, 23546, 44779, 49528, 23546, 36898, 47563, 47563, 47563, 40417, 28807, 22824, 22824, 22824, 50340, 31197, 28844, 22804, 22804, 22804, 28863, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 21205, 28900, 28924, 28940, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 28963, 23546, 23546, 26527, 23546, 28992, 23546, 29010, 36977, 29029, 29038, 29054, 29069, 29081, 29097, 29109, 26204, 23546, 23546, 33645, 49739, 23546, 28529, 23546, 23546, 31365, 23546, 23546, 23546, 35995, 23546, 29125, 31167, 22824, 29149, 40337, 48749, 32108, 23546, 29172, 23546, 44844, 29190, 42384, 23546, 31347, 50774, 29209, 23546, 25948, 29214, 29230, 29291, 47563, 47563, 29309, 29325, 22824, 22824, 45608, 49036, 29349, 22804, 22804, 39677, 36943, 30220, 23546, 23546, 47099, 23546, 22095, 50621, 37205, 27682, 23546, 23546, 48975, 28152, 40051, 47563, 29366, 37135, 45217, 46920, 46953, 36665, 22824, 49439, 49901, 29385, 29404, 34563, 22804, 29885, 40883, 26241, 23546, 23546, 47600, 23546, 23546, 29423, 23546, 29445, 23546, 48976, 47563, 47563, 47563, 44406, 47564, 22821, 22824, 22824, 49328, 42575, 22767, 35849, 22804, 22804, 39288, 28274, 50448, 23672, 29464, 23546, 23546, 23546, 29498, 42828, 23546, 23546, 47562, 47563, 47563, 46820, 29369, 22821, 22824, 22824, 37856, 22824, 28821, 22804, 22804, 30184, 22804, 29883, 33199, 23546, 23546, 29517, 23546, 47519, 29538, 47563, 46768, 47563, 41728, 22824, 49353, 22824, 41433, 22804, 41641, 22804, 27843, 29565, 23546, 23546, 23546, 29581, 33988, 49629, 29610, 50265, 49148, 29627, 30732, 37573, 29644, 31970, 23546, 23546, 28626, 22586, 47563, 47563, 29661, 22824, 47375, 22804, 22804, 29679, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 45087, 23089, 29701, 47077, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 27251, 29717, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 21570, 23546, 23546, 26527, 23546, 29745, 24166, 23546, 32508, 29764, 29773, 29789, 29803, 29812, 29828, 29839, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 34673, 34671, 23546, 38486, 38493, 29855, 28213, 35842, 29875, 43066, 27800, 23546, 40629, 29901, 44844, 23546, 29926, 30774, 23546, 23546, 41541, 20026, 29946, 29989, 29293, 38320, 30005, 40270, 30031, 42116, 30052, 30082, 30100, 49972, 39453, 30135, 41942, 39677, 36943, 23546, 23546, 23546, 42078, 23546, 30162, 50621, 23546, 23546, 23546, 39564, 48975, 47563, 47563, 47563, 48721, 37135, 22823, 22824, 22824, 22824, 42777, 49439, 22804, 22804, 22804, 22804, 30182, 30146, 30200, 30236, 23546, 23546, 23546, 30252, 30271, 50620, 23546, 23546, 45468, 23469, 31420, 34156, 47563, 47563, 45201, 30292, 30331, 30348, 22824, 22824, 30365, 29156, 29407, 22804, 22804, 22804, 30399, 23672, 23807, 23546, 23546, 23546, 23546, 45523, 28572, 23546, 33872, 47563, 47563, 30419, 29369, 30438, 22824, 22824, 48645, 22824, 31904, 22804, 22804, 50360, 22804, 30539, 33199, 49920, 23546, 30462, 23546, 50724, 48973, 36270, 47563, 30480, 41728, 35391, 22824, 30505, 41433, 50493, 22804, 30530, 30403, 47447, 49732, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23251, 23546, 22586, 47563, 47563, 30555, 22824, 36108, 22804, 22804, 30575, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 30597, 46609, 47561, 23111, 30673, 39296, 30622, 30648, 30668, 30689, 19013, 30707, 30727, 30748, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23547, 30771, 23546, 26527, 25156, 30790, 23546, 30813, 24321, 30837, 30846, 30862, 30876, 30888, 30904, 30915, 26204, 22703, 30931, 26561, 35799, 30978, 26921, 26341, 27925, 30994, 31013, 31032, 31061, 31045, 31097, 31131, 31147, 31183, 31227, 31261, 31277, 39237, 39476, 31293, 33748, 31328, 22212, 31363, 31381, 41158, 23546, 23546, 40033, 23546, 22587, 32449, 31405, 47817, 28510, 31441, 31475, 46890, 31498, 30304, 31538, 22625, 36744, 47681, 39677, 36943, 23698, 29973, 31554, 29930, 31590, 23708, 31634, 39997, 31661, 48812, 31689, 31711, 31727, 31763, 31798, 31814, 29245, 31850, 40093, 31890, 34721, 31940, 35662, 31956, 31986, 27076, 32035, 32066, 32093, 32133, 26241, 50755, 23546, 43683, 23546, 32169, 19239, 32192, 32249, 22951, 24750, 43255, 32274, 47563, 32292, 45560, 22821, 32317, 22824, 42593, 48588, 50230, 35849, 32356, 22804, 45665, 32384, 32405, 32421, 23807, 25150, 32478, 32497, 47176, 23546, 32524, 45835, 36145, 40407, 31425, 32550, 44054, 32586, 34739, 22824, 32631, 32657, 30066, 33080, 32683, 47042, 40501, 29883, 33199, 23546, 45717, 33237, 23546, 23546, 32701, 31115, 42955, 32563, 41728, 45894, 41614, 32608, 41433, 33712, 42499, 35727, 30403, 47447, 28590, 32719, 48060, 32755, 32790, 42232, 33671, 32806, 37745, 39609, 32837, 40736, 33730, 32892, 32931, 32953, 19435, 22586, 32974, 48106, 28046, 33009, 33027, 33047, 48381, 35461, 47447, 40617, 22585, 47563, 50257, 22824, 33074, 36473, 36549, 33096, 40786, 36807, 32667, 39296, 33119, 43227, 48451, 49953, 33140, 24763, 23318, 45645, 33156, 33172, 33217, 47559, 33030, 30691, 33266, 33282, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 33306, 23546, 26527, 33327, 33345, 25456, 24849, 33370, 33400, 23546, 33386, 33428, 33437, 33453, 33464, 26204, 23546, 23546, 33480, 35799, 23546, 23546, 23546, 23546, 27288, 23546, 23546, 34477, 23546, 34484, 31605, 33499, 33519, 43660, 33545, 33568, 27800, 23546, 33621, 23546, 44844, 33621, 23546, 23546, 30997, 23546, 33640, 34051, 23546, 22587, 33661, 47563, 47563, 47563, 33687, 22824, 22824, 22824, 43762, 33703, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 50621, 23546, 23546, 23546, 33746, 48975, 47563, 47563, 47563, 43863, 37135, 22823, 22824, 22824, 22824, 34733, 49439, 22804, 22804, 22804, 22804, 33764, 29885, 40883, 26241, 23546, 23546, 23546, 23546, 23546, 50620, 23546, 20258, 23546, 48976, 47563, 47563, 46759, 47563, 47564, 22821, 22824, 22824, 37850, 22824, 22767, 35849, 22804, 22804, 33781, 22804, 29879, 23672, 23807, 23546, 23546, 23546, 23546, 23546, 43159, 23546, 47562, 47563, 47563, 31773, 29369, 22821, 22824, 22824, 49239, 22824, 28821, 22804, 22804, 22804, 33801, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 41728, 22824, 22824, 22824, 41433, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 33820, 23546, 23546, 22586, 44762, 47563, 23109, 33840, 22825, 34299, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 23335, 32233, 42307, 22729, 33859, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 32176, 23546, 23546, 41552, 33893, 33902, 33918, 33924, 33940, 33956, 33967, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 37894, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 28765, 41920, 23546, 23546, 44844, 23546, 23546, 23546, 39585, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 43177, 23546, 23546, 45738, 48975, 47563, 47563, 47563, 47563, 37135, 41960, 22824, 22824, 22824, 22824, 47410, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 20340, 23546, 23178, 20358, 23546, 23546, 20360, 33983, 47563, 47563, 34004, 47563, 47564, 22821, 22824, 36824, 22824, 22824, 22767, 35849, 22804, 33785, 22804, 22804, 29879, 34024, 23546, 23546, 23546, 34050, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 32147, 47539, 23546, 48973, 47563, 47563, 39206, 45209, 22824, 22824, 43898, 27834, 22804, 22804, 34943, 30403, 47447, 34067, 47158, 34094, 23546, 34121, 32984, 34141, 34177, 43533, 34196, 34244, 36447, 34263, 31970, 28608, 23546, 34315, 34336, 34355, 34372, 28875, 33605, 34412, 34436, 34454, 31964, 47447, 46606, 43054, 32993, 34501, 34521, 30673, 34552, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 43326, 34588, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 41690, 23546, 26286, 34628, 23546, 23546, 23546, 34692, 23546, 34693, 23546, 23546, 34656, 34689, 40521, 22887, 37164, 34396, 43815, 34709, 34755, 23546, 23546, 29501, 44844, 26383, 30255, 23546, 23546, 41921, 23546, 23546, 23546, 22587, 47563, 47563, 32276, 47563, 27418, 22824, 22824, 35655, 43762, 22804, 22804, 35850, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 34780, 43953, 48975, 47563, 47563, 47563, 47563, 29859, 22823, 22824, 22824, 22824, 22824, 30446, 22804, 22804, 22804, 22804, 22804, 34799, 33201, 23546, 34844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 42714, 48976, 34862, 47563, 47563, 47563, 47564, 34882, 22824, 22824, 22824, 22824, 22767, 30383, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 34898, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 49594, 27195, 22821, 22824, 22824, 22824, 49007, 30376, 22804, 22804, 22804, 28251, 29883, 33199, 23546, 23546, 45156, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 28617, 23546, 48860, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 48020, 34919, 46606, 50168, 47563, 35289, 22824, 34937, 22804, 34959, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 26217, 23546, 26527, 28994, 29429, 32937, 21397, 21407, 19607, 19616, 34984, 34999, 35011, 35027, 35038, 26204, 23546, 23546, 23546, 21159, 35548, 23546, 23546, 29013, 35054, 32876, 23546, 35263, 35074, 35112, 39498, 35166, 47961, 27448, 49402, 46199, 35202, 23546, 23546, 23546, 38910, 23546, 47123, 35227, 23546, 23546, 23546, 35244, 44990, 22587, 44754, 35279, 47563, 35324, 35372, 48187, 22824, 29333, 35407, 49176, 35434, 22804, 35477, 39677, 36943, 23546, 35515, 50019, 41319, 42187, 35535, 23546, 19253, 43384, 35575, 35592, 35612, 35186, 47563, 42920, 37391, 20600, 22823, 35386, 22824, 40181, 35635, 35678, 29350, 22804, 33765, 35713, 35750, 48433, 33201, 23546, 23546, 23546, 23546, 35766, 20349, 35815, 44388, 23546, 23546, 40380, 47253, 47563, 47563, 41209, 36250, 35833, 43893, 22824, 22824, 48653, 43541, 43789, 35866, 22804, 22804, 31917, 36853, 33195, 23546, 19730, 35885, 35914, 32534, 35930, 35957, 45488, 36011, 28363, 36030, 36050, 36074, 36103, 39870, 50408, 42260, 32597, 45635, 22804, 36124, 36169, 36204, 27085, 31863, 36220, 46659, 44955, 21826, 38142, 32958, 36266, 47872, 36286, 36321, 36366, 36384, 36409, 36435, 36471, 36489, 36514, 36540, 36572, 23546, 23546, 18340, 36595, 30632, 36619, 36640, 39370, 36661, 36681, 36702, 36740, 36760, 31970, 23546, 36781, 18841, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 34034, 46606, 22585, 31741, 36801, 36823, 36840, 38424, 36549, 46609, 36869, 23111, 30673, 39296, 36886, 35338, 36933, 36966, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 42313, 47646, 36993, 39426, 42307, 22729, 23448, 37021, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 39988, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 50028, 21708, 39996, 40225, 24990, 37071, 37082, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 31016, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 27420, 22824, 43762, 22804, 22804, 48012, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 25524, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 37098, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 37115, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 37134, 47563, 47563, 47563, 47564, 37151, 22824, 22824, 22824, 22824, 22767, 28828, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 41164, 23546, 26527, 23546, 34764, 23546, 19155, 37185, 37221, 37234, 37250, 37256, 37272, 37288, 37299, 26204, 23546, 37315, 23546, 35799, 23546, 43426, 26746, 23546, 23546, 37335, 23546, 32153, 42194, 37334, 37351, 37380, 37407, 37443, 40833, 37430, 32821, 37459, 23546, 23546, 34612, 23546, 23546, 40581, 34220, 23546, 41122, 29193, 49795, 34228, 47262, 37494, 29549, 41774, 37514, 42784, 22904, 45886, 37530, 38036, 37570, 36188, 37589, 23034, 37618, 28342, 23546, 23546, 23546, 23546, 50126, 23546, 23546, 23546, 23546, 23546, 48975, 28498, 44484, 47563, 28434, 44023, 37641, 37671, 39810, 30349, 22824, 39853, 47704, 29645, 22804, 49383, 22804, 37657, 33201, 23546, 23546, 50909, 37693, 23546, 32019, 38379, 23546, 23546, 23546, 48976, 47563, 47563, 46474, 32220, 37710, 22821, 22824, 22824, 49321, 37734, 37761, 35849, 22804, 22804, 37788, 37809, 29879, 33195, 23546, 37872, 23546, 23546, 37889, 23546, 23546, 23546, 47562, 27357, 47563, 47563, 27195, 22821, 40293, 22824, 22824, 22824, 30376, 34247, 22804, 22804, 22804, 29883, 33199, 37910, 31075, 23546, 37928, 47744, 48973, 37953, 47563, 47563, 37979, 38003, 22824, 22824, 38027, 38061, 22804, 22804, 38085, 47447, 23404, 23546, 28599, 23546, 47560, 31782, 47563, 23113, 38011, 22824, 33078, 33721, 22804, 31970, 23546, 21592, 23546, 22586, 47563, 50097, 23109, 22824, 40810, 22804, 22804, 38110, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 33290, 45056, 38132, 38158, 38179, 33552, 39426, 27505, 38215, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23648, 23546, 26527, 23546, 26305, 23546, 23546, 29594, 20530, 20539, 38250, 38264, 38273, 38289, 38300, 26364, 23546, 23948, 23546, 35799, 23546, 34320, 23546, 23546, 23546, 23948, 23546, 35554, 36579, 23947, 35559, 38316, 33588, 36393, 38336, 43066, 27800, 23546, 23546, 38357, 44844, 23546, 39344, 42555, 23546, 39071, 23546, 23546, 38375, 41192, 48530, 47563, 47812, 38395, 28750, 22824, 42121, 31482, 43762, 38449, 22804, 38419, 38440, 32050, 38473, 38509, 46688, 34783, 23546, 23546, 23546, 23546, 23546, 38530, 23546, 23546, 48975, 47883, 38550, 42949, 47563, 37135, 22823, 38568, 30084, 22824, 22824, 49439, 42031, 34293, 41837, 22804, 22804, 29885, 33201, 23546, 38929, 23546, 38602, 23546, 44369, 37873, 23791, 38621, 23546, 48976, 27031, 38642, 47563, 38659, 47564, 38683, 47916, 22824, 22824, 38702, 33843, 35849, 39277, 22804, 33804, 38724, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 36556, 23546, 23546, 23546, 23546, 47560, 38744, 47563, 30559, 22824, 22824, 46066, 22804, 22804, 31970, 23546, 23546, 49685, 22586, 47563, 47563, 23109, 47427, 22825, 22804, 35452, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 38761, 47561, 38782, 38802, 43621, 23464, 38824, 38844, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 38045, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23810, 23546, 46101, 23546, 29522, 38860, 33103, 38895, 38945, 38984, 38970, 38989, 38954, 39005, 39016, 26204, 23546, 24981, 39032, 39052, 39135, 26183, 26715, 27157, 23546, 39087, 39123, 35972, 23871, 39151, 32436, 39187, 39222, 39262, 39312, 39360, 27800, 27271, 23546, 23546, 40856, 29748, 35256, 26269, 47340, 39386, 28121, 33483, 41086, 39406, 48539, 39200, 45029, 47563, 29260, 30036, 22824, 47369, 43762, 41883, 39448, 22787, 22804, 32852, 39469, 27673, 33624, 23546, 39492, 23546, 23546, 30166, 23546, 19760, 23546, 25974, 48975, 39514, 47563, 47563, 47563, 37135, 37987, 39541, 30332, 22824, 22824, 49439, 34278, 22804, 48403, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 49277, 23546, 23546, 39561, 44662, 39580, 20000, 47563, 47563, 38745, 47563, 41583, 39601, 22824, 22824, 42751, 22824, 39625, 36344, 22804, 22804, 49650, 22804, 39663, 33195, 39390, 39701, 21803, 40964, 23546, 28563, 39737, 39764, 42864, 39780, 30015, 27711, 27195, 22821, 39796, 39832, 37838, 39869, 30376, 37543, 39886, 39910, 39936, 47724, 39958, 49087, 33227, 48840, 39980, 40013, 20680, 50204, 40049, 40067, 40083, 45419, 22824, 40109, 40125, 36765, 22804, 40151, 40167, 47447, 40217, 23546, 23546, 19121, 40241, 48114, 40263, 48445, 44596, 40286, 40309, 42808, 40330, 30581, 40353, 23546, 23546, 40374, 28485, 40396, 27517, 40433, 40468, 40722, 40488, 31964, 30114, 48477, 40517, 36058, 24761, 45115, 30673, 40537, 36549, 40555, 19020, 29663, 30673, 40603, 40652, 40668, 40708, 40752, 40779, 40802, 40826, 40849, 24756, 33030, 33551, 47559, 33030, 33552, 40872, 40899, 22729, 23448, 40923, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 40939, 26527, 23546, 35150, 40960, 23546, 26932, 40980, 40989, 41005, 41019, 41028, 41044, 41055, 26204, 41071, 27176, 35142, 41110, 22748, 41145, 23546, 41180, 29961, 41225, 35127, 41274, 41299, 41335, 41350, 41366, 41401, 41487, 41458, 41474, 41503, 23546, 18442, 27630, 46235, 23546, 41314, 19147, 41528, 40358, 23546, 23546, 45375, 22587, 47563, 36909, 41568, 47891, 27418, 38686, 27953, 41607, 41630, 22804, 23213, 41665, 46983, 39677, 36943, 23546, 45937, 23546, 37118, 23546, 39337, 41681, 33824, 35058, 38605, 23546, 41717, 41752, 28167, 41769, 47563, 43475, 41790, 42050, 41800, 22824, 22824, 41816, 41853, 50302, 41874, 22804, 49204, 29885, 47656, 41907, 23546, 38879, 36785, 23546, 23546, 23546, 23546, 23546, 39036, 48976, 47563, 46791, 34008, 47563, 47564, 22821, 22824, 44589, 46895, 22824, 22767, 35849, 22804, 41937, 38457, 22804, 29879, 33195, 23546, 23546, 49550, 23546, 45766, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 32301, 41958, 22824, 22824, 22824, 46046, 28243, 22804, 22804, 22804, 22804, 41977, 33199, 20951, 42005, 23546, 23546, 23546, 44350, 47563, 31827, 47563, 41591, 22824, 49433, 22824, 28884, 22804, 42026, 22804, 30403, 31211, 23546, 23546, 23546, 23546, 27328, 40247, 47563, 27241, 38708, 22824, 42285, 31924, 22804, 29685, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 22739, 46606, 49667, 46712, 38403, 42047, 44103, 22804, 44463, 42066, 42221, 42103, 42137, 42175, 42210, 42248, 42276, 42301, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 35697, 39426, 36136, 22729, 23448, 42329, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 26377, 26527, 23546, 23546, 42378, 33354, 42400, 20758, 23546, 26429, 42436, 42448, 42464, 42475, 26204, 23546, 23546, 25120, 35799, 23546, 23546, 23546, 31573, 31305, 23546, 23546, 31567, 25118, 23546, 48973, 37963, 23115, 42491, 47011, 42515, 27800, 23546, 42549, 23546, 44844, 23546, 38766, 18352, 23546, 39064, 23546, 23546, 22159, 22587, 48548, 38163, 45793, 48521, 47316, 42571, 42591, 47404, 42609, 44147, 39942, 22845, 35499, 47057, 42343, 42636, 23546, 42657, 23546, 42010, 42641, 26759, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 36917, 47563, 37135, 22823, 22824, 22824, 42693, 22824, 49439, 22804, 22804, 28847, 22804, 22804, 29885, 45066, 44270, 23546, 42713, 23546, 23546, 26553, 42677, 42730, 31574, 23546, 48976, 47563, 48931, 47563, 47563, 47564, 42748, 22824, 42767, 22824, 22824, 34180, 35849, 22804, 42800, 22804, 22804, 29879, 33195, 23546, 44983, 23546, 23546, 23546, 23546, 42824, 23546, 47562, 47563, 36034, 47563, 27749, 22821, 22824, 22824, 42844, 22824, 48373, 22804, 22804, 38192, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 18259, 23546, 23546, 42862, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 39325, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 48281, 42880, 42913, 28181, 33529, 39296, 42936, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 38514, 23546, 23546, 23546, 44073, 44076, 50916, 44069, 36233, 42971, 33598, 40201, 40539, 43066, 29275, 42987, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 43004, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 43023, 22824, 22824, 22824, 22824, 43497, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 30422, 47563, 23109, 38579, 22825, 32685, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 22195, 38234, 23546, 23546, 22088, 23546, 31645, 43040, 31695, 43090, 43103, 43112, 43128, 43139, 26204, 23546, 31341, 32732, 35799, 43366, 43155, 43175, 36087, 40692, 50768, 31673, 43193, 32904, 31522, 31081, 43243, 43271, 43287, 43315, 43342, 40683, 23546, 23546, 23546, 45381, 43358, 40568, 43382, 43400, 43418, 23546, 23546, 30119, 43208, 47563, 43442, 27364, 43462, 43491, 28908, 22824, 43513, 43557, 22804, 43588, 41858, 43607, 43637, 43676, 23546, 23546, 23546, 18266, 35576, 23546, 23546, 43699, 43717, 43736, 20331, 32703, 47563, 41378, 47563, 46720, 41989, 43754, 29628, 22824, 22824, 43651, 43778, 43812, 46171, 22804, 44212, 43831, 43879, 33201, 23546, 23546, 45346, 23546, 43914, 43941, 23546, 27809, 23863, 43976, 44003, 47563, 48620, 44039, 35181, 49990, 44092, 22824, 45449, 39545, 44119, 42697, 44138, 22804, 44163, 27998, 44211, 35734, 33195, 39171, 23546, 23546, 23067, 44228, 32012, 23546, 44255, 36870, 46433, 23003, 47563, 27195, 22821, 44297, 46134, 22824, 22824, 30376, 39647, 22804, 44322, 22804, 41442, 44340, 23546, 44366, 44385, 23546, 23546, 34339, 44404, 47563, 47563, 44422, 22824, 22824, 22824, 44438, 22804, 22804, 22804, 44454, 47447, 48298, 23546, 23546, 23546, 44479, 47563, 47563, 46130, 22824, 22824, 44500, 22804, 22804, 44520, 23546, 40027, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 38094, 49704, 44555, 44579, 44612, 44650, 23464, 24759, 33031, 33550, 44685, 30652, 34420, 36724, 24756, 33030, 33551, 47559, 33030, 45310, 44716, 44744, 32641, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 25786, 26527, 44778, 28976, 18999, 44795, 44824, 44860, 44808, 44885, 44899, 44911, 44927, 44938, 26204, 44954, 40587, 23546, 44971, 23546, 23546, 43960, 23546, 50132, 23546, 45006, 35089, 26325, 35096, 32207, 45025, 45045, 44306, 45082, 45103, 27800, 35987, 37200, 44669, 44844, 34640, 23546, 23546, 23546, 23546, 45137, 45172, 23546, 19324, 45188, 43446, 47563, 47563, 45233, 45249, 45268, 22824, 43762, 45291, 40314, 22804, 22804, 39677, 36943, 37912, 23546, 23546, 45326, 45362, 23546, 23546, 23546, 23546, 23546, 37055, 48975, 48512, 31834, 47563, 47563, 46028, 22823, 45397, 45415, 22824, 22824, 36333, 38728, 44324, 22804, 22804, 22804, 45435, 33201, 23546, 23546, 26251, 43720, 23546, 45465, 26758, 45484, 45504, 23546, 45539, 47563, 47563, 47285, 43856, 45576, 45600, 22824, 22824, 47994, 48169, 45624, 45661, 22804, 22804, 42152, 45681, 29879, 45697, 45713, 45733, 23546, 25942, 23546, 23546, 30214, 45754, 47562, 47563, 27730, 45789, 27195, 22821, 22824, 47619, 47969, 22824, 30376, 22804, 22804, 45809, 22804, 29883, 33199, 23546, 21039, 23546, 49467, 37049, 48973, 47563, 45851, 48716, 45584, 47934, 22824, 45868, 48003, 35869, 22804, 45910, 30403, 47447, 23546, 48332, 18869, 22345, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 32000, 21288, 23546, 45931, 45953, 47563, 37498, 23109, 22824, 40444, 22804, 34438, 36455, 45997, 44634, 19558, 46021, 50382, 46044, 28056, 22804, 34468, 46609, 35619, 30711, 46062, 46082, 23464, 24759, 33031, 33550, 19538, 36296, 49945, 23141, 46117, 38586, 45823, 48503, 46150, 46187, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23737, 26527, 23546, 23546, 34968, 23546, 46215, 26881, 26893, 46251, 46267, 46279, 46295, 46306, 26204, 46322, 23241, 25565, 35799, 25341, 42889, 46340, 22204, 44869, 46352, 46368, 46377, 46393, 46349, 46420, 46455, 46490, 46547, 46518, 46534, 32867, 46005, 19766, 34600, 44844, 46563, 23546, 26188, 46580, 41258, 46596, 46625, 46675, 46736, 46784, 46807, 46842, 38552, 46877, 45877, 46911, 46944, 36419, 46977, 46999, 47027, 27557, 39677, 37035, 47093, 47115, 35228, 23546, 47139, 47174, 23546, 47766, 23546, 49770, 47192, 20591, 47219, 47244, 47278, 38643, 47301, 41736, 47356, 47391, 47426, 31459, 49439, 36524, 39920, 40135, 22804, 35492, 33058, 47443, 23546, 20251, 43007, 37694, 47465, 46324, 47491, 47518, 23546, 47535, 47555, 39525, 47841, 47563, 34125, 47580, 47616, 47635, 39844, 22824, 37169, 48362, 35849, 47672, 47697, 22804, 41891, 47720, 33195, 23058, 47740, 23546, 45516, 47760, 23546, 47782, 18627, 47798, 50186, 47833, 47857, 27195, 47907, 47932, 47950, 47985, 48036, 39636, 46165, 37602, 50472, 50517, 37554, 27477, 48056, 18311, 23546, 35780, 48076, 48095, 44700, 47563, 47563, 48130, 48155, 37677, 22824, 48203, 48236, 49183, 22804, 48272, 47447, 18372, 48297, 48314, 48330, 41202, 45981, 33877, 34811, 48348, 48040, 48397, 48419, 37793, 31970, 48467, 23546, 23546, 48493, 46466, 31618, 34505, 49612, 47069, 35443, 43299, 48564, 28304, 47475, 19993, 48611, 37364, 48636, 48669, 43591, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 44177, 29729, 48685, 36498, 48701, 45275, 48737, 39426, 42307, 22729, 39685, 48765, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 48828, 23546, 23546, 48856, 23546, 35941, 30944, 30953, 48876, 30953, 30962, 48892, 48903, 26204, 23546, 23546, 23546, 40636, 23546, 26348, 23546, 23546, 23546, 23546, 26345, 23546, 38923, 23546, 48973, 48919, 48178, 48947, 38808, 37005, 31513, 38873, 23546, 23546, 44844, 23546, 23546, 27897, 48963, 23546, 23546, 23546, 23546, 48971, 46750, 47563, 47563, 34356, 48992, 22824, 22824, 22824, 36305, 49028, 22804, 22804, 22804, 49052, 44728, 49080, 23546, 49103, 45341, 23546, 23546, 42732, 48802, 47595, 38359, 35596, 48975, 47563, 49130, 41385, 43221, 47228, 22823, 48595, 46928, 41415, 49146, 49164, 22804, 49199, 49220, 45915, 29388, 37824, 33201, 23546, 25346, 23546, 26261, 23546, 23546, 23546, 49474, 23546, 23546, 48976, 33503, 47563, 47563, 47563, 47564, 49236, 37414, 22824, 22824, 22824, 22767, 49255, 36180, 22804, 22804, 22804, 29879, 33195, 49272, 23546, 49293, 23546, 23546, 23546, 23546, 28581, 36243, 47563, 47563, 47563, 27195, 49311, 22824, 22824, 22824, 22824, 37772, 22804, 22804, 22804, 22804, 29883, 46502, 23546, 23546, 50321, 46564, 23546, 30276, 23289, 47563, 47563, 37718, 49344, 22824, 22824, 30514, 49377, 22804, 22804, 42620, 47447, 39101, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 46439, 24761, 43524, 30673, 49399, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 49418, 45121, 44624, 47559, 33030, 33552, 39426, 32368, 49455, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 49490, 49547, 33412, 49525, 23546, 34105, 23546, 33409, 49544, 42420, 41283, 49566, 49577, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 49593, 35299, 27962, 22805, 43066, 27800, 23546, 33329, 27613, 44844, 23546, 23546, 23546, 23546, 23546, 32481, 23546, 23546, 22587, 32570, 47563, 46861, 47563, 27418, 49610, 22824, 32331, 43762, 42159, 22804, 27215, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 37318, 23546, 23546, 23546, 20322, 23546, 48975, 47563, 47563, 49628, 47563, 37135, 22823, 22824, 32615, 22824, 22824, 49439, 22804, 22804, 49645, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 49666, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 49683, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 49701, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 49720, 23546, 50953, 23546, 25809, 49755, 49786, 23546, 49811, 49825, 49837, 49853, 49864, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 27387, 22824, 49893, 38199, 49880, 34211, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 42672, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 49917, 23546, 23546, 23546, 22167, 47563, 47563, 47563, 47563, 47564, 49936, 22824, 22824, 22824, 22824, 22767, 49969, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 45149, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 49988, 47563, 50006, 22821, 22824, 48578, 22824, 41424, 30376, 22804, 39894, 22804, 32389, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 26445, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 41512, 50052, 50063, 26204, 23546, 23546, 23546, 35799, 50079, 30464, 23546, 23546, 23546, 23546, 32774, 23546, 41129, 32770, 46701, 50096, 40191, 28190, 22805, 43066, 27800, 23546, 23546, 23546, 50113, 28719, 34485, 45773, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 29611, 47563, 27026, 27418, 22824, 35645, 28383, 43762, 22804, 22921, 22804, 48250, 39677, 50148, 50164, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 41250, 23546, 23546, 23546, 48976, 47563, 47563, 50184, 47563, 45852, 22821, 22824, 38786, 22824, 22824, 45252, 35849, 22804, 48256, 22804, 22804, 29879, 33195, 48079, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 50202, 47563, 47563, 27195, 22821, 50220, 22824, 22824, 22824, 30376, 48220, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 21798, 23546, 23546, 35799, 23546, 23546, 46652, 23546, 23546, 23546, 23546, 46656, 23546, 23546, 50246, 28439, 22824, 50294, 36350, 50281, 47331, 23546, 29448, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 35817, 22587, 47563, 47563, 47563, 27723, 27418, 22824, 22824, 27861, 43762, 22804, 22804, 22804, 48212, 39677, 36943, 23546, 50318, 23546, 23546, 23546, 23546, 23546, 23546, 37099, 23546, 23546, 48975, 38667, 47563, 36014, 47563, 37135, 22823, 50337, 22824, 46961, 22824, 49439, 28018, 22804, 22804, 50356, 22804, 29885, 33201, 23546, 43738, 23546, 23546, 23546, 23546, 23546, 38534, 23546, 23546, 48976, 47563, 50376, 47563, 47563, 47564, 50398, 41961, 50424, 22824, 22824, 22767, 50443, 28403, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 21488, 23546, 47562, 47563, 31747, 47563, 34161, 22821, 22824, 43024, 22824, 22824, 50464, 22804, 22804, 50488, 22804, 43844, 33199, 23546, 23546, 18921, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 31241, 23546, 23546, 39165, 23546, 29133, 47563, 47563, 33578, 22824, 22824, 50509, 22804, 22804, 31970, 23546, 49295, 23546, 22586, 47563, 31161, 23109, 50427, 22825, 22804, 41830, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22677, 23546, 23546, 23546, 23546, 26527, 23546, 23546, 23546, 23546, 21369, 21483, 23546, 23546, 23546, 19262, 39432, 32077, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27800, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 27418, 22824, 22824, 22824, 43762, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 46404, 21767, 21765, 32117, 22038, 50563, 21058, 21061, 50533, 22036, 50551, 50579, 50591, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 50607, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50637, 19916, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50655, 18544, 18567, 18590, 19934, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 22150, 23546, 21369, 20766, 50679, 50692, 50708, 50717, 49509, 50740, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 51042, 23546, 23546, 23546, 23761, 23546, 23546, 23758, 25629, 19208, 50639, 19926, 50639, 50790, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 18521, 18544, 18567, 18590, 50663, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 42087, 23546, 23546, 23546, 23546, 22568, 29910, 50839, 50872, 50878, 50849, 23148, 50894, 20967, 23546, 23546, 23546, 35799, 23546, 23546, 50932, 23546, 23546, 22686, 23546, 23546, 23546, 22682, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 18327, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50969, 18544, 18567, 18590, 21689, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 20159, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 20376, 20392, 51127, 20418, 50802, 20462, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 21089, 23546, 23546, 23546, 23546, 25841, 23546, 23546, 23546, 23546, 21369, 23546, 23546, 23546, 23546, 23546, 23546, 23489, 26204, 23546, 23546, 23546, 35799, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 22824, 35842, 22805, 43066, 27132, 23546, 23546, 23546, 44844, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22587, 47563, 47563, 47563, 47563, 22603, 22824, 22824, 22824, 34828, 22804, 22804, 22804, 22804, 39677, 36943, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48975, 47563, 47563, 47563, 47563, 37135, 22823, 22824, 22824, 22824, 22824, 49439, 22804, 22804, 22804, 22804, 22804, 29885, 33201, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 48976, 47563, 47563, 47563, 47563, 47564, 22821, 22824, 22824, 22824, 22824, 22767, 35849, 22804, 22804, 22804, 22804, 29879, 33195, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 47562, 47563, 47563, 47563, 27195, 22821, 22824, 22824, 22824, 22824, 30376, 22804, 22804, 22804, 22804, 29883, 33199, 23546, 23546, 23546, 23546, 23546, 48973, 47563, 47563, 47563, 45209, 22824, 22824, 22824, 27834, 22804, 22804, 22804, 30403, 47447, 23546, 23546, 23546, 23546, 47560, 47563, 47563, 23113, 22824, 22824, 33078, 22804, 22804, 31970, 23546, 23546, 23546, 22586, 47563, 47563, 23109, 22824, 22825, 22804, 22804, 31964, 47447, 46606, 22585, 47563, 24761, 22824, 30673, 22804, 36549, 46609, 47561, 23111, 30673, 39296, 23464, 24759, 33031, 33550, 48975, 23107, 30672, 23141, 24756, 33030, 33551, 47559, 33030, 33552, 39426, 42307, 22729, 23448, 23351, 23363, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 22457, 23546, 23546, 22482, 50993, 50998, 50998, 51019, 22480, 51014, 51035, 23546, 23546, 23546, 23546, 23546, 23546, 51042, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 25629, 19208, 50639, 19926, 50639, 20660, 19723, 18282, 18849, 18305, 51062, 23546, 23546, 18368, 23546, 18915, 18388, 18432, 18458, 18463, 18479, 18968, 18495, 19670, 50655, 18544, 18567, 18590, 19934, 18528, 18551, 18574, 18597, 20868, 18620, 23546, 30606, 23546, 23546, 23546, 23582, 23367, 18643, 23546, 18664, 50036, 18695, 19209, 26024, 18505, 19208, 25377, 18724, 26048, 18745, 18766, 18771, 19889, 50639, 26053, 18750, 50639, 18776, 19839, 20674, 23546, 18792, 18808, 18830, 23628, 18814, 18865, 23546, 44195, 18885, 18937, 18958, 20812, 26011, 20051, 18984, 19036, 19054, 19072, 19090, 26127, 19108, 19038, 19056, 19074, 19092, 26129, 18604, 20668, 23396, 19137, 19171, 19225, 39246, 19278, 47150, 19314, 19340, 26667, 19186, 19380, 19422, 19456, 25721, 19477, 25754, 19498, 19451, 25716, 19472, 25749, 19493, 19514, 19530, 18900, 19554, 23717, 19574, 19592, 19632, 19657, 20190, 20797, 20402, 21452, 19692, 19708, 19964, 21452, 19692, 19708, 20432, 19853, 26492, 19746, 41094, 19782, 18942, 19201, 19798, 19825, 19883, 19905, 19950, 19883, 19905, 19980, 23977, 20842, 20016, 18679, 20827, 20042, 20067, 20090, 20113, 20074, 20097, 20129, 20446, 51082, 20175, 20206, 20222, 51139, 20274, 51143, 20301, 51098, 20392, 51127, 20418, 50802, 51114, 25380, 50639, 18729, 32258, 26037, 20489, 20515, 19641, 20555, 20577, 20616, 20632, 20648, 20696, 20727, 20743, 20782, 20858, 20884, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 23546, 94503, 94503, 90406, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 1, 12290, 3, 0, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 362, 94503, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 0, 94503, 90406, 94503, 94503, 94503, 94503, 94503, 94503, 94503, 69632, 73728, 94503, 94503, 94503, 94503, 94503, 65536, 94503, 0, 2183168, 0, 0, 0, 90406, 94503, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 2985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1631, 0, 0, 0, 0, 0, 1637, 0, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2454, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2904064, 2908160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 0, 2997, 0, 0, 0, 0, 3001, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 1191, 0, 0, 0, 0, 1107, 0, 0, 0, 2138112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2978, 0, 0, 0, 2424832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625536, 0, 0, 0, 0, 0, 172032, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 1, 12290, 3, 0, 2699264, 2715648, 0, 0, 2772992, 2805760, 2830336, 0, 2863104, 2920448, 0, 0, 0, 0, 0, 0, 0, 1114, 0, 0, 0, 0, 1118, 0, 0, 1121, 0, 2805760, 2920448, 0, 0, 0, 0, 0, 2920448, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 2179072, 2179072, 2179072, 2424832, 2433024, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2625536, 2805760, 2179072, 2830336, 2179072, 2179072, 2863104, 2179072, 2179072, 2179072, 2920448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2801664, 2813952, 2179072, 2838528, 2179072, 2179072, 2179072, 2179072, 2179072, 0, 914, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2805760, 2125824, 2830336, 2125824, 2125824, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2125824, 2457600, 2125824, 2125824, 2125824, 2125824, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2375680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 2408448, 0, 0, 2584576, 0, 0, 0, 0, 2838528, 0, 0, 2838528, 0, 0, 0, 0, 0, 2469888, 2506752, 2756608, 0, 0, 2580480, 0, 0, 0, 2396160, 2400256, 2412544, 0, 0, 2838528, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2408448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 914, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2502656, 0, 0, 3010560, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3125248, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2461696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600960, 0, 2674688, 0, 2768896, 2777088, 2781184, 0, 2822144, 0, 0, 2883584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3055616, 0, 0, 0, 3080192, 3100672, 3104768, 0, 0, 0, 0, 3186688, 0, 0, 0, 0, 0, 0, 0, 3182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3003, 3004, 0, 2719744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3014656, 3207168, 0, 2691072, 0, 0, 0, 0, 0, 2818048, 2846720, 0, 2916352, 0, 0, 3002368, 0, 0, 3022848, 0, 0, 0, 0, 0, 2871296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 3215360, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2494464, 2179072, 2179072, 2514944, 2179072, 2179072, 2461696, 2465792, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2523136, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2699264, 2179072, 2715648, 2179072, 2723840, 2179072, 2732032, 2772992, 2179072, 2179072, 3100672, 2179072, 2179072, 3133440, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 391, 392, 0, 393, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 3504, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3399, 540, 540, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2461696, 2465792, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2523136, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2600960, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2641920, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2719744, 2125824, 2125824, 2125824, 2125824, 2125824, 2768896, 2777088, 2768896, 2777088, 2125824, 2797568, 2822144, 2125824, 2125824, 2125824, 2883584, 2125824, 2912256, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3133440, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 0, 0, 0, 0, 0, 0, 3011, 0, 0, 0, 0, 0, 0, 3018, 0, 0, 0, 0, 2605056, 0, 0, 0, 0, 2887680, 0, 2924544, 0, 0, 0, 0, 0, 0, 0, 1135, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162112, 3170304, 0, 0, 3219456, 3035136, 0, 0, 0, 0, 0, 3072000, 2650112, 2179072, 2179072, 2179072, 2707456, 2179072, 2736128, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2887680, 2179072, 2179072, 2543616, 2547712, 2179072, 2179072, 2596864, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2584576, 0, 0, 2809856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3088384, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 2112, 0, 0, 0, 0, 0, 1680, 1681, 0, 1683, 0, 0, 0, 0, 0, 0, 0, 540, 561, 540, 561, 540, 540, 561, 540, 585, 0, 0, 2576384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2420736, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 3121152, 3141632, 0, 0, 0, 2924544, 0, 2682880, 0, 0, 0, 0, 0, 0, 0, 1242, 1272, 1273, 0, 1242, 0, 540, 540, 540, 3112960, 2387968, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2453504, 2179072, 2473984, 2482176, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2126737, 2126737, 2503569, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2532241, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2605969, 2126737, 2924544, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3035136, 2179072, 2179072, 3072000, 2179072, 2179072, 2179072, 3137536, 2126737, 2126737, 2499473, 2126737, 2126737, 2126737, 2556817, 2565009, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3224465, 0, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 2446298, 2126810, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 0, 0, 0, 0, 0, 0, 3181, 0, 0, 0, 3184, 3185, 3186, 0, 0, 3189, 3194880, 2125824, 0, 0, 0, 0, 0, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2605056, 2125824, 2629632, 2125824, 2125824, 2650112, 2125824, 2125824, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 2125824, 2125824, 3072000, 2125824, 2125824, 3121152, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2125824, 2125824, 3190784, 2125824, 3170304, 2125824, 2125824, 3190784, 3194880, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 540, 540, 540, 540, 540, 540, 0, 3145728, 0, 3203072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3314, 0, 540, 0, 3067904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 2895872, 0, 0, 0, 2445312, 0, 2842624, 0, 0, 0, 2637824, 0, 0, 0, 0, 432, 0, 0, 0, 329, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 0, 0, 0, 2621440, 0, 3182592, 2899968, 0, 2961408, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2445312, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2551808, 2179072, 2179072, 2179072, 2179072, 2179072, 3117056, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2126737, 2637824, 2125824, 2125824, 2125824, 2125824, 2727936, 2752512, 2125824, 2125824, 2125824, 2125824, 2842624, 2846720, 2125824, 2895872, 2916352, 2125824, 2125824, 2945024, 2125824, 2125824, 2994176, 2125824, 3002368, 2125824, 2125824, 3022848, 2125824, 3067904, 3084288, 3096576, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2442, 2443, 0, 0, 2446, 0, 0, 0, 0, 0, 2928640, 0, 0, 0, 3059712, 0, 2543616, 2666496, 0, 2633728, 0, 0, 0, 0, 0, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 2494464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3211264, 2179072, 2928640, 2179072, 2179072, 2179072, 2998272, 2179072, 2179072, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 0, 0, 2126737, 2126737, 2126737, 2126737, 2126737, 2446225, 2126737, 2179072, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 2113, 0, 2125824, 2543616, 2547712, 2125824, 2125824, 2596864, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2928640, 2125824, 2125824, 2125824, 2998272, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2126811, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2424832, 2125824, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 3178496, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2441216, 0, 0, 0, 0, 0, 0, 3311, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2165, 540, 540, 540, 540, 0, 0, 0, 2740224, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 0, 0, 1244, 0, 0, 0, 0, 1247, 0, 1194, 0, 2646016, 2179072, 2179072, 2695168, 2756608, 2179072, 2179072, 2179072, 2932736, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3039232, 2179072, 3063808, 2179072, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2396160, 2400256, 2125824, 2125824, 2441216, 2125824, 2469888, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2613248, 2646016, 2125824, 2125824, 2695168, 2756608, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2396160, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2125824, 2506752, 2506752, 2506752, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 987, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3176, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 3158016, 2437120, 0, 2785280, 0, 0, 0, 2428928, 0, 3018752, 2764800, 2572288, 0, 0, 3051520, 2179072, 2179072, 2637824, 2179072, 2179072, 2179072, 2179072, 2727936, 2752512, 2179072, 2179072, 2179072, 2842624, 2846720, 2179072, 2916352, 2428928, 2437120, 2179072, 2486272, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2654208, 2678784, 2760704, 2764800, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 2043, 2044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2140, 0, 0, 0, 0, 0, 0, 2125824, 3018752, 2125824, 2125824, 2125824, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 24576, 987, 2125824, 2125824, 2125824, 2125824, 2424832, 2125824, 3149824, 2125824, 2179072, 3051520, 2125824, 3051520, 2125824, 3051520, 0, 2490368, 2498560, 0, 0, 0, 0, 0, 0, 304, 0, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 1713, 0, 0, 0, 0, 0, 0, 0, 0, 1727, 0, 0, 0, 0, 0, 0, 0, 0, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 2095, 0, 0, 0, 0, 0, 0, 0, 0, 2107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2875392, 0, 0, 0, 3176, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3223552, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 2125824, 2179072, 2416640, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 3108864, 3198976, 0, 0, 2748416, 2879488, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 296, 0, 0, 0, 296, 0, 297, 0, 0, 0, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 2592768, 0, 0, 0, 0, 433, 0, 0, 0, 453, 469, 469, 469, 469, 469, 469, 469, 469, 469, 479, 469, 469, 469, 469, 469, 469, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1918, 2125824, 2125824, 2125824, 2408448, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2449408, 0, 2535424, 3031040, 0, 0, 0, 0, 0, 1734, 0, 1736, 1710, 540, 540, 540, 540, 540, 540, 540, 540, 1816, 1818, 540, 540, 540, 540, 540, 1360, 0, 2859008, 0, 0, 2179072, 2449408, 2179072, 2535424, 2179072, 2609152, 2179072, 2859008, 2179072, 2179072, 2179072, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2527232, 0, 0, 0, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2804, 540, 540, 540, 540, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2527232, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2527232, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 1080, 1084, 0, 0, 1088, 2125824, 2125824, 2125824, 2125824, 3092480, 0, 0, 0, 0, 3026944, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2539520, 0, 2949120, 0, 0, 0, 0, 434, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 457, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 2179072, 2658304, 2973696, 2179072, 2125824, 2658304, 2973696, 2125824, 2125824, 2658304, 2973696, 2125824, 2711552, 0, 2560000, 2179072, 2179072, 2945024, 2179072, 2179072, 2994176, 2179072, 3002368, 2179072, 2179072, 3022848, 2179072, 3067904, 3084288, 3096576, 2179072, 2179072, 2600960, 2179072, 2179072, 2179072, 2179072, 2641920, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2719744, 2179072, 2179072, 2441216, 2179072, 2469888, 2179072, 2179072, 2179072, 2519040, 2179072, 2179072, 2179072, 2179072, 2588672, 2179072, 2613248, 2703360, 0, 0, 0, 0, 2977792, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 2560000, 2125824, 2560000, 2125824, 0, 2179072, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 2125824, 2457600, 2179072, 2179072, 2179072, 2179072, 2457600, 2125824, 2125824, 2125824, 2985984, 2985984, 2985984, 2985984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 458, 458, 111050, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 111050, 458, 111050, 111050, 111050, 111050, 111050, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2738, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 184723, 184931, 184931, 184931, 0, 184931, 184931, 184931, 184931, 184931, 0, 0, 0, 0, 0, 184931, 0, 184931, 1, 12290, 3, 78112, 1059, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 296, 0, 297, 0, 2125824, 1059, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, 2755, 0, 300, 118784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 300, 300, 300, 300, 0, 0, 0, 0, 0, 300, 0, 300, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 33403, 297, 0, 2134016, 49791, 301, 0, 0, 0, 0, 0, 0, 225889, 225889, 225889, 225889, 225740, 225889, 225889, 225889, 225889, 225889, 225740, 225740, 225740, 225740, 225740, 225906, 225740, 225906, 1, 12290, 3, 0, 0, 0, 0, 249856, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 697, 698, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 296, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 57344, 0, 0, 0, 0, 0, 0, 0, 3506, 0, 540, 540, 540, 540, 540, 540, 540, 2530, 540, 540, 540, 540, 540, 540, 540, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 296, 0, 0, 0, 300, 0, 0, 0, 300, 119195, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3166, 3167, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 0, 0, 0, 0, 0, 122880, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 0, 122880, 0, 2105629, 12290, 3, 0, 0, 291, 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 69632, 73728, 0, 416, 416, 0, 0, 65536, 416, 1092, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, 0, 0, 1824, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2551808, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 131072, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2507, 0, 0, 0, 0, 0, 131072, 0, 0, 131072, 131072, 0, 0, 0, 0, 0, 0, 131072, 0, 131072, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 131072, 131072, 131072, 131072, 0, 131072, 131072, 131072, 131072, 131072, 0, 0, 0, 0, 0, 131072, 0, 131072, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 135168, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 0, 0, 135168, 0, 0, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 0, 0, 0, 0, 0, 0, 0, 135168, 135168, 135168, 135168, 135168, 135168, 135168, 0, 135168, 135168, 135168, 135168, 135168, 0, 0, 0, 0, 0, 135168, 0, 135168, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118784, 296, 0, 2183168, 0, 0, 0, 0, 0, 636, 637, 0, 2134016, 640, 641, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 1361, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 986, 2125824, 2125824, 2125824, 2125824, 2424832, 0, 301, 139264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 331, 301, 301, 301, 301, 0, 0, 0, 0, 0, 301, 0, 301, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 297, 0, 2183168, 0, 0, 0, 0, 0, 296, 33406, 0, 2134016, 300, 49794, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61440, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455, 0, 0, 0, 0, 0, 301, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, 0, 298, 298, 143728, 298, 298, 298, 143728, 69632, 73728, 298, 298, 143658, 298, 298, 65536, 298, 298, 0, 0, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 363, 298, 0, 143658, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 298, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 298, 298, 298, 143658, 368, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143658, 298, 298, 143658, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 298, 0, 298, 0, 298, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143658, 298, 143658, 143658, 143658, 143658, 298, 298, 143658, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 143728, 298, 298, 298, 298, 298, 298, 298, 143658, 143658, 143658, 143658, 143658, 143658, 143728, 143658, 143728, 143728, 143728, 143728, 143728, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 143658, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 90406, 90406, 90406, 90406, 0, 94503, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 2200252, 2200252, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1663, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 0, 12290, 3, 0, 0, 2183168, 126976, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 1146880, 0, 1146880, 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 0, 540, 2163, 540, 540, 540, 540, 540, 540, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 345, 346, 347, 0, 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 25160, 0, 0, 159744, 0, 0, 0, 0, 25160, 25160, 25160, 159744, 25160, 25160, 25160, 25160, 25160, 159744, 159744, 159744, 159744, 25160, 159744, 25160, 1, 12290, 3, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 1, 12290, 3, 0, 167936, 167936, 167936, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3015, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 0, 0, 172032, 172032, 0, 172032, 0, 0, 172032, 0, 172032, 0, 172032, 0, 0, 0, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 1, 12290, 3, 0, 172032, 0, 172032, 172032, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 0, 0, 0, 0, 1, 286, 3, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 106496, 0, 0, 0, 0, 106496, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 1, 0, 3, 78112, 176128, 176128, 176128, 0, 0, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111050, 0, 0, 0, 0, 0, 78112, 290, 0, 634, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 1159168, 414, 414, 0, 0, 0, 0, 0, 414, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 0, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 959, 561, 585, 585, 585, 1490, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1498, 585, 585, 0, 0, 229376, 0, 0, 0, 0, 0, 0, 0, 0, 1686, 0, 0, 0, 0, 0, 0, 404, 404, 404, 404, 0, 404, 404, 404, 404, 404, 0, 0, 0, 0, 0, 404, 0, 404, 1, 12290, 3, 78112, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155072, 0, 0, 0, 0, 0, 0, 0, 2131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 561, 561, 561, 561, 561, 561, 2250, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 3295, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 716, 0, 0, 719, 0, 561, 561, 2287, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 585, 585, 585, 2347, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1514, 585, 585, 2372, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 2671, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1515, 585, 585, 0, 0, 0, 2994, 0, 0, 0, 2998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 540, 3035, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 910, 540, 3075, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1417, 3116, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1501, 0, 0, 3178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3187, 0, 0, 0, 0, 0, 2046, 0, 2149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 1, 12290, 3, 0, 540, 540, 540, 3203, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3211, 540, 540, 540, 540, 540, 2813, 540, 540, 2817, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2555, 540, 540, 540, 540, 540, 540, 3255, 585, 585, 585, 3258, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3266, 585, 561, 0, 1287, 585, 1467, 1376, 540, 540, 1339, 540, 540, 561, 561, 1430, 561, 0, 585, 585, 585, 585, 585, 288, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 0, 0, 2465, 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, 3309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3508, 540, 3509, 540, 540, 540, 3326, 3327, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 961, 561, 585, 585, 585, 3361, 585, 585, 585, 585, 3362, 3363, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 2092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 561, 3416, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3425, 585, 585, 585, 585, 585, 585, 1492, 585, 585, 585, 585, 585, 585, 585, 1499, 585, 585, 585, 585, 3431, 585, 585, 585, 585, 3435, 540, 561, 585, 0, 0, 0, 0, 0, 0, 665, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 3172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 3450, 540, 540, 540, 540, 540, 2814, 540, 2816, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2233, 540, 540, 540, 540, 540, 0, 561, 561, 561, 3573, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3538, 585, 585, 3585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 3627, 561, 561, 585, 585, 0, 540, 561, 585, 0, 540, 561, 585, 0, 540, 561, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2662400, 0, 2813952, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2134756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 3, 0, 0, 0, 188416, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 540, 540, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 2169, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 3, 78112, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 192971, 0, 1, 12290, 3, 0, 192971, 192971, 192971, 0, 0, 192971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 192971, 192971, 192971, 192971, 192971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801664, 0, 0, 0, 0, 2142208, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 299, 300, 301, 0, 0, 0, 0, 0, 0, 2797568, 0, 0, 0, 0, 0, 0, 0, 2850816, 2867200, 0, 0, 740, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 740, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 2029, 0, 2031, 0, 0, 0, 0, 740, 1184, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 1583, 0, 1585, 0, 0, 0, 0, 0, 0, 0, 1661, 1662, 0, 0, 0, 0, 0, 0, 0, 0, 2727936, 0, 0, 0, 3084288, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 352, 353, 354, 0, 0, 0, 1188, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1150976, 0, 0, 0, 0, 0, 0, 561, 561, 585, 585, 585, 585, 1559, 2029, 0, 0, 0, 0, 1565, 2031, 0, 0, 0, 0, 0, 2120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2130, 2033, 0, 2035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 337, 338, 561, 561, 2323, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2339, 585, 585, 2342, 0, 304, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 2136, 0, 2138, 0, 0, 0, 0, 0, 0, 0, 0, 791, 817, 0, 817, 812, 0, 0, 0, 0, 0, 0, 204800, 204800, 0, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 205104, 204800, 204800, 205103, 205104, 204800, 205103, 205103, 204800, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 2183801, 0, 0, 0, 0, 0, 296, 297, 151552, 2134016, 300, 301, 0, 212992, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 0, 2200253, 0, 0, 0, 0, 0, 0, 2932736, 2965504, 0, 0, 3076096, 0, 0, 2695168, 3174400, 2646016, 0, 914, 2126737, 2126737, 2126737, 2126737, 2425745, 2433937, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 0, 0, 987, 2126810, 2126810, 2126810, 2126810, 2425818, 2724753, 2126737, 2732945, 2773905, 2126737, 2126737, 2126737, 2806673, 2126737, 2831249, 2126737, 2126737, 2864017, 2126737, 2126737, 2126737, 2126737, 2126737, 2524049, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2601873, 2126737, 2126737, 2921361, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3117969, 2126737, 2126737, 2126737, 2126737, 2593681, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 3093393, 0, 0, 0, 0, 3026944, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2434010, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2626522, 2126810, 2126737, 0, 2179072, 2126810, 2126810, 2126737, 2457600, 2179072, 2179072, 2179072, 2179072, 2458513, 2126737, 2126737, 2126737, 2126737, 2126737, 2626449, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2700177, 2126737, 2716561, 2126737, 2806746, 2126810, 2831322, 2126810, 2126810, 2864090, 2126810, 2126810, 2126810, 2126810, 2921434, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2458586, 2126810, 2126810, 2126810, 2126810, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 395, 0, 0, 0, 321, 0, 0, 2126737, 2126737, 2126737, 2409361, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3126161, 2126737, 2126737, 2126737, 2802577, 2814865, 2126737, 2839441, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 2126810, 2663386, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2802650, 2814938, 2126810, 2839514, 0, 0, 0, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2462609, 2466705, 2126737, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 2769809, 2778001, 2126737, 2798481, 2823057, 2126737, 2126737, 2126737, 2884497, 2126737, 2913169, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2655121, 2679697, 2761617, 2765713, 2786193, 2855825, 2970513, 2126737, 3007377, 2126737, 3134353, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3208081, 2126737, 0, 0, 0, 0, 0, 325, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2462682, 2466778, 2126810, 2126810, 2126810, 2524122, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2601946, 2126810, 2126810, 2126810, 2585562, 2126810, 2126810, 2126810, 2126810, 2126810, 2618330, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2888666, 2126810, 2126810, 2925530, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2642906, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2720730, 2126810, 2126810, 2126810, 2126810, 2126810, 2769882, 2778074, 2126810, 2798554, 2823130, 2126810, 2126810, 2126810, 2884570, 2126810, 2913242, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3126234, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3208154, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 0, 0, 0, 2388881, 2126737, 2126737, 2421649, 2126737, 2126737, 2126737, 2126737, 2126737, 2454417, 2126737, 2474897, 2483089, 2630545, 2126737, 2126737, 2651025, 2126737, 2126737, 2126737, 2708369, 2126737, 2737041, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 985, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2552794, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2126737, 3072913, 2126737, 2126737, 3122065, 2126737, 2126737, 3142545, 2126737, 2126737, 2126737, 3171217, 2126737, 2126737, 3191697, 3195793, 2126737, 0, 0, 0, 0, 0, 0, 2388954, 2126810, 2126810, 2421722, 2126810, 2126810, 2126810, 2126810, 2126810, 3040218, 2126810, 3064794, 2126810, 2126810, 2126810, 2126810, 3101658, 2126810, 2126810, 3134426, 2126810, 2454490, 2126810, 2474970, 2483162, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2532314, 2126810, 2126810, 2126810, 2126810, 3036122, 2126810, 2126810, 3072986, 2126810, 2126810, 3122138, 2126810, 2126810, 3142618, 2126810, 2126810, 2126810, 3171290, 2126810, 2126810, 3191770, 3195866, 2126810, 2126737, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 3112960, 3219456, 2126737, 2126737, 3113873, 3220369, 2126810, 2126810, 3113946, 3220442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 2638737, 2126737, 2126737, 2126737, 2126737, 2728849, 2753425, 2126737, 2126737, 2126737, 2126737, 2843537, 2847633, 2126737, 2896785, 2917265, 2638810, 2126810, 2126810, 2126810, 2126810, 2728922, 2753498, 2126810, 2126810, 2126810, 2126810, 2843610, 2847706, 2126810, 2896858, 2917338, 2179072, 3178496, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2495377, 2126737, 2126737, 2515857, 2126737, 2126737, 2126737, 2126737, 3011473, 2126737, 2126737, 2126810, 2126810, 2503642, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3138522, 2126737, 2940928, 2941841, 2941914, 0, 0, 0, 0, 2126737, 2544529, 2548625, 2126737, 2126737, 2597777, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2552721, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2929553, 2126737, 2126737, 2126737, 2999185, 2126737, 2126737, 2126737, 2126737, 3060625, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3040145, 2126737, 3064721, 2126737, 2126737, 2126737, 2126737, 3101585, 2126737, 2126737, 3179409, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2495450, 2126810, 2126810, 2515930, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 2160, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 3525, 561, 2126810, 2544602, 2548698, 2126810, 2126810, 2597850, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 0, 2502656, 0, 0, 3010560, 2126810, 2929626, 2126810, 2126810, 2126810, 2999258, 2126810, 2126810, 2126810, 2126810, 3060698, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3118042, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2126810, 3179482, 2126737, 2179072, 2126810, 2126737, 2179072, 2179072, 2126737, 2126737, 2126810, 2126810, 2441216, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2397073, 2401169, 2126737, 2126737, 2442129, 2126737, 2470801, 2126737, 2126737, 2126737, 2126737, 2126737, 2663313, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 0, 0, 2126810, 2126810, 2126810, 2409434, 2519953, 2126737, 2126737, 2126737, 2126737, 2589585, 2126737, 2614161, 2646929, 2126737, 2126737, 2696081, 2757521, 2126737, 2126737, 2126737, 2126737, 2126737, 3138449, 2126810, 2126810, 2499546, 2126810, 2126810, 2126810, 2556890, 2565082, 2126810, 2126810, 2126737, 2933649, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3130257, 2126737, 2126737, 3154833, 3167121, 3175313, 2397146, 2401242, 2126810, 2126810, 2442202, 2126810, 2470874, 2126810, 2126810, 2126810, 2520026, 2126810, 2126810, 2126810, 2126810, 2589658, 2126810, 2126810, 2126810, 3011546, 2126810, 2126810, 2126737, 0, 0, 0, 0, 0, 0, 0, 2592768, 0, 0, 0, 0, 663, 0, 0, 666, 667, 0, 0, 0, 0, 0, 0, 0, 540, 571, 540, 571, 540, 540, 571, 540, 595, 2614234, 2647002, 2126810, 2126810, 2696154, 2757594, 2126810, 2126810, 2126810, 2126810, 2933722, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 3224538, 2126737, 2179072, 2417626, 2126810, 2126737, 2179072, 2179072, 2126737, 2126737, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2126737, 2429841, 2438033, 2126737, 2487185, 2126737, 2126737, 2945937, 2126737, 2126737, 2995089, 2126737, 3003281, 2126737, 2126737, 3023761, 2126737, 3068817, 3085201, 3097489, 2126737, 2126737, 2888593, 2126737, 2126737, 2925457, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 3036049, 2126737, 3019665, 2126737, 2126737, 2126737, 3150737, 2126810, 2429914, 2438106, 2126810, 2487258, 2126810, 2126810, 2126810, 2126810, 2126810, 2700250, 2126810, 2716634, 2126810, 2724826, 2126810, 2733018, 2773978, 2126810, 2126810, 2126810, 2126810, 3150810, 2126737, 2179072, 3051520, 2126737, 3052433, 2126810, 3052506, 0, 2490368, 2498560, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2126810, 2593754, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126810, 2126737, 2449408, 0, 2535424, 3031040, 0, 0, 0, 0, 0, 2439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 370, 0, 0, 2126737, 2450321, 2126737, 2536337, 2126737, 2610065, 2126737, 2859921, 2126737, 2126737, 2126737, 3031953, 2126810, 2450394, 2126810, 2536410, 2126810, 2610138, 2126810, 2859994, 2126810, 2126810, 2126810, 3032026, 2126737, 2527232, 0, 0, 0, 0, 0, 2179072, 2126810, 2126810, 2126737, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2126737, 2126737, 2126737, 2126810, 2126810, 2126810, 2126810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237568, 0, 0, 0, 0, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2126737, 2528145, 2126737, 2126737, 2126737, 2126737, 2126737, 2126810, 2528218, 2126810, 2126810, 2946010, 2126810, 2126810, 2995162, 2126810, 3003354, 2126810, 2126810, 3023834, 2126810, 3068890, 3085274, 3097562, 2126810, 2126810, 2126810, 2606042, 2126810, 2630618, 2126810, 2126810, 2651098, 2126810, 2126810, 2126810, 2708442, 2126810, 2737114, 2126810, 2126810, 2126810, 2655194, 2679770, 2761690, 2765786, 2786266, 2855898, 2970586, 2126810, 3007450, 2126810, 3019738, 2126810, 2126810, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 3108864, 3198976, 0, 2405265, 2126737, 2126737, 2126737, 2126737, 3027857, 2405338, 2126810, 2126810, 2126810, 2126810, 3027930, 2539520, 0, 2949120, 0, 0, 0, 0, 695, 0, 0, 0, 0, 362, 362, 362, 0, 0, 704, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 2179072, 2658304, 2973696, 2179072, 2126737, 2659217, 2974609, 2126737, 2126810, 2659290, 2974682, 2126810, 2711552, 0, 2560000, 2179072, 2179072, 3125248, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2560913, 2126737, 2560986, 2126810, 0, 2179072, 2126737, 2126810, 0, 2179072, 2126737, 2126810, 0, 2179072, 2126737, 2126810, 2126810, 3130330, 2126810, 2126810, 3154906, 3167194, 3175386, 2126737, 2506752, 2507738, 2507665, 2179072, 2179072, 2126737, 2126737, 2126737, 2642833, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2720657, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2126737, 2585489, 2126737, 2126737, 2126737, 2126737, 2126737, 2618257, 2126737, 2985984, 2985984, 2986897, 2986970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 0, 0, 0, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 0, 0, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 1, 12290, 3, 0, 0, 0, 0, 0, 253952, 0, 0, 0, 253952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 688, 0, 0, 0, 0, 0, 98304, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 2662400, 0, 2813952, 297, 0, 300, 0, 0, 0, 300, 0, 301, 0, 0, 0, 301, 0, 0, 0, 301, 69632, 139679, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 3133440, 0, 98304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 300, 0, 301, 0, 0, 0, 2473984, 2478080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 914, 0, 0, 0, 0, 0, 2451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 301, 0, 0, 0, 0, 0, 914, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2531328, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2605056, 2125824, 3194880, 2125824, 987, 0, 0, 0, 987, 0, 2387968, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2887680, 2125824, 2125824, 2924544, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 225740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 349, 350, 0, 0, 0, 0, 2125824, 237568, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, 358, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 296, 297, 0, 2134016, 300, 301, 0, 0, 217088, 2125824, 241664, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 131072, 131072, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 155648, 0, 0, 2183168, 0, 0, 270336, 0, 0, 296, 297, 0, 2134016, 300, 301, 200704, 0, 0, 0, 0, 0, 2462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 0, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 180224, 0, 0, 0, 0, 0, 0, 0, 1726, 0, 0, 0, 0, 0, 0, 0, 0, 304, 304, 304, 0, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 20480, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2768896, 2777088, 2797568, 2822144, 2179072, 2179072, 2179072, 2883584, 2912256, 2179072, 2179072, 2179072, 2179072, 2179072, 2617344, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2662400, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2584576, 2125824, 2125824, 2125824, 2125824, 2125824, 2617344, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142208, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 2113823, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, 293, 0, 0, 245760, 0, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3039232, 2125824, 3063808, 2125824, 2125824, 2125824, 2125824, 3100672, 2125824, 2125824, 3133440, 2125824, 245760, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 122880, 122880, 0, 0, 274432, 274432, 274432, 274432, 0, 0, 0, 0, 0, 274432, 0, 274432, 1, 12290, 3, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 1195, 0, 0, 78112, 290, 0, 0, 0, 0, 0, 296, 297, 0, 0, 300, 301, 0, 0, 0, 0, 0, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200252, 2200252, 2200252, 0, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 2035, 0, 0, 0, 0, 0, 0, 0, 2055, 0, 2056, 0, 0, 0, 0, 0, 0, 0, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 0, 0, 1104, 2483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 0, 0, 2993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 335, 0, 0, 0, 0, 1679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 78456, 290, 0, 0, 0, 0, 0, 296, 297, 0, 0, 300, 301, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1158, 0, 0, 0, 0, 0, 562, 562, 562, 562, 562, 562, 562, 586, 586, 586, 540, 586, 586, 586, 586, 586, 562, 562, 540, 562, 586, 562, 586, 1, 12290, 3, 78112, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 521, 521, 1, 12290, 3, 78113, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 1, 12290, 3, 0, 282624, 282624, 282624, 0, 0, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3178496, 2670592, 0, 2744320, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 3176, 0, 0, 2740224, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 0, 0, 0, 0, 0, 683, 684, 685, 0, 0, 0, 689, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 302, 0, 0, 0, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3301, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 2875392, 0, 0, 0, 3381, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2748416, 2879488, 0, 3381, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2531328, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2605056, 2179072, 2629632, 2179072, 2179072, 0, 0, 0, 306, 0, 0, 0, 0, 0, 305, 0, 305, 306, 0, 305, 305, 0, 0, 0, 305, 305, 306, 306, 0, 0, 0, 0, 0, 0, 305, 405, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 306, 410, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 742, 0, 0, 0, 0, 742, 0, 748, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 462, 462, 462, 488, 488, 462, 488, 488, 488, 488, 488, 488, 488, 513, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 533, 488, 488, 488, 488, 488, 541, 563, 541, 563, 541, 541, 563, 541, 587, 563, 563, 563, 563, 563, 563, 563, 587, 587, 587, 541, 613, 613, 613, 613, 613, 587, 563, 563, 541, 563, 587, 563, 587, 1, 12290, 3, 78112, 0, 0, 645, 0, 0, 648, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 253952, 0, 0, 0, 0, 0, 645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 353, 0, 351, 0, 472, 472, 472, 472, 472, 472, 472, 477, 472, 472, 472, 472, 472, 472, 472, 472, 472, 477, 472, 0, 768, 0, 0, 772, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 343, 342, 65536, 341, 0, 788, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 736, 0, 796, 0, 0, 0, 0, 648, 0, 0, 0, 0, 0, 0, 820, 0, 0, 648, 0, 0, 0, 0, 0, 837, 792, 0, 0, 0, 0, 0, 841, 842, 792, 792, 0, 0, 0, 0, 792, 736, 792, 0, 540, 540, 851, 855, 540, 540, 540, 540, 1345, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2181, 540, 540, 540, 540, 561, 561, 561, 921, 925, 561, 561, 561, 561, 561, 561, 951, 561, 956, 561, 963, 561, 966, 561, 561, 980, 561, 561, 0, 585, 585, 585, 994, 998, 585, 585, 585, 585, 585, 585, 1963, 1964, 1966, 585, 585, 585, 585, 585, 585, 585, 561, 2713, 585, 2715, 2716, 540, 540, 540, 540, 585, 585, 585, 1024, 585, 1029, 585, 1036, 585, 1039, 585, 585, 1053, 585, 585, 966, 0, 0, 0, 855, 585, 998, 925, 851, 1065, 894, 540, 540, 921, 1070, 966, 561, 0, 585, 585, 585, 585, 585, 78112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114688, 0, 241664, 258048, 0, 0, 0, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 766, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 673, 0, 540, 540, 1342, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 585, 585, 585, 1524, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1517, 585, 585, 585, 1433, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 3070, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 0, 0, 3662, 0, 0, 0, 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1103, 1104, 1105, 1106, 1654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 1693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 1732, 0, 0, 1733, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3030, 540, 540, 540, 540, 540, 540, 540, 1745, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1758, 540, 540, 540, 540, 540, 540, 2540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1329, 540, 540, 540, 540, 540, 540, 540, 540, 1795, 540, 540, 1798, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 900, 540, 540, 540, 540, 540, 540, 1810, 540, 540, 540, 540, 540, 1815, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1416, 561, 1825, 561, 561, 561, 561, 1831, 561, 561, 561, 561, 561, 1837, 561, 561, 561, 561, 561, 983, 561, 0, 585, 585, 585, 585, 585, 1002, 585, 1010, 561, 1892, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1904, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 2726, 0, 0, 2729, 2730, 561, 561, 1909, 561, 561, 561, 561, 561, 561, 561, 26027, 1919, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 3649, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 3231, 3232, 561, 1925, 585, 585, 585, 585, 585, 1931, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3596, 1944, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1540, 561, 561, 2025, 585, 585, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 2041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1132, 0, 0, 0, 2075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1135, 0, 2145, 0, 0, 0, 2143, 0, 0, 2150, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 1584, 0, 0, 0, 0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 1705, 0, 0, 540, 540, 2171, 540, 540, 2174, 540, 540, 540, 540, 540, 540, 2182, 540, 540, 540, 540, 540, 540, 2568, 540, 540, 540, 540, 2572, 540, 540, 540, 540, 540, 540, 1347, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2556, 540, 540, 540, 540, 540, 540, 540, 2201, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 2242, 540, 540, 540, 2214, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1805, 540, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2254, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2123, 0, 2125, 2126, 0, 0, 0, 0, 561, 2257, 561, 561, 561, 561, 561, 561, 2265, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 2952, 561, 2954, 561, 2299, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1438, 561, 2033, 0, 2035, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434, 0, 0, 0, 2475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2493, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 2592, 561, 561, 561, 561, 561, 1408, 561, 561, 1412, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1008, 585, 2656, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2664, 585, 585, 585, 585, 585, 585, 2350, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2379, 585, 585, 585, 585, 585, 585, 585, 585, 2699, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1940, 585, 585, 2708, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 561, 561, 561, 3229, 561, 561, 561, 561, 561, 561, 585, 585, 585, 3352, 585, 585, 585, 3355, 585, 585, 2731, 0, 0, 0, 0, 0, 0, 2736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 192971, 0, 0, 0, 2759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 540, 540, 540, 0, 0, 0, 2788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 0, 0, 0, 540, 540, 540, 2826, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2833, 540, 540, 540, 540, 1748, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1760, 540, 540, 540, 540, 1765, 540, 540, 540, 540, 540, 540, 540, 540, 1772, 540, 540, 540, 540, 561, 3406, 561, 561, 3408, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1009, 585, 561, 561, 561, 2860, 561, 561, 2864, 561, 561, 561, 561, 561, 561, 561, 561, 561, 944, 561, 561, 561, 561, 561, 561, 561, 2873, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2881, 561, 561, 0, 0, 0, 2649, 0, 1920, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2703, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2908, 585, 585, 2912, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2393, 2394, 585, 585, 585, 585, 585, 2921, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2929, 585, 585, 0, 0, 0, 3292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3297, 2955, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 305, 0, 0, 0, 2970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1588, 1589, 0, 0, 540, 540, 540, 540, 3036, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2546, 540, 540, 540, 561, 561, 561, 3076, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1436, 561, 561, 561, 585, 585, 585, 3117, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2356, 585, 2358, 0, 0, 0, 0, 3176, 3442, 0, 3444, 0, 0, 0, 0, 0, 540, 3451, 540, 540, 540, 540, 1796, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 905, 540, 540, 540, 540, 3453, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 3466, 561, 3468, 0, 0, 3501, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 3510, 540, 540, 540, 540, 540, 3204, 3205, 540, 540, 540, 540, 3209, 3210, 540, 540, 540, 540, 540, 1749, 1750, 540, 540, 540, 540, 1757, 540, 540, 540, 540, 540, 540, 1346, 540, 540, 540, 540, 540, 540, 1356, 540, 540, 307, 308, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 449, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 2490, 0, 0, 0, 0, 0, 0, 0, 0, 2504, 0, 0, 0, 0, 0, 0, 0, 0, 2517, 0, 0, 0, 0, 0, 0, 0, 0, 2975, 0, 0, 0, 0, 0, 0, 0, 0, 2999, 0, 0, 0, 0, 0, 0, 0, 0, 3164, 0, 0, 0, 0, 0, 0, 0, 0, 3173, 0, 0, 0, 0, 0, 0, 0, 0, 3183, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, 449, 418, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 532, 449, 532, 532, 532, 449, 532, 532, 532, 532, 449, 542, 564, 542, 564, 542, 542, 564, 542, 588, 564, 564, 564, 564, 564, 564, 564, 588, 588, 588, 542, 588, 588, 588, 588, 588, 564, 564, 616, 621, 588, 621, 627, 1, 12290, 3, 78112, 0, 1677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 540, 540, 540, 1811, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1377, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 1082, 1086, 0, 0, 1090, 585, 585, 585, 1993, 585, 585, 585, 585, 585, 1999, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 3551, 0, 3553, 0, 0, 0, 0, 0, 561, 561, 561, 561, 561, 2589, 561, 561, 561, 561, 2593, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2338, 585, 585, 585, 585, 585, 585, 585, 2657, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1971, 585, 585, 585, 2709, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 561, 561, 3228, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 2900, 585, 585, 585, 585, 585, 540, 3514, 540, 3516, 540, 540, 3518, 540, 561, 561, 561, 561, 561, 561, 561, 561, 1396, 1398, 561, 561, 561, 561, 561, 561, 3527, 561, 3529, 561, 561, 3531, 561, 585, 585, 585, 585, 585, 585, 585, 585, 3540, 585, 3542, 585, 585, 3544, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 147456, 0, 0, 0, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 0, 0, 0, 0, 0, 373, 0, 0, 0, 0, 365, 0, 382, 0, 348, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 764, 0, 0, 420, 428, 419, 428, 0, 310, 428, 441, 450, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 484, 489, 489, 500, 489, 489, 489, 489, 489, 489, 489, 489, 515, 515, 528, 528, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 515, 529, 529, 529, 529, 529, 543, 565, 543, 565, 543, 543, 565, 543, 589, 565, 565, 565, 565, 565, 565, 565, 589, 589, 589, 612, 589, 589, 589, 589, 589, 614, 615, 615, 612, 615, 614, 615, 614, 1, 12290, 3, 78112, 0, 702, 0, 0, 0, 0, 0, 702, 0, 0, 0, 540, 540, 540, 540, 540, 3028, 540, 540, 540, 540, 540, 540, 540, 561, 967, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 2337, 585, 585, 585, 585, 2341, 585, 0, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3200, 0, 1150, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, 1228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 0, 0, 540, 540, 1276, 1278, 540, 540, 540, 540, 540, 540, 540, 540, 1292, 540, 1297, 540, 540, 1301, 540, 540, 540, 540, 1812, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1823, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1378, 561, 0, 585, 585, 585, 585, 585, 78112, 1079, 0, 0, 1083, 1087, 0, 0, 1091, 540, 1304, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1302, 540, 1360, 914, 561, 561, 1364, 561, 1367, 561, 561, 561, 561, 561, 561, 561, 561, 1381, 561, 1386, 561, 561, 1390, 561, 561, 1393, 561, 561, 561, 561, 561, 561, 561, 561, 1431, 561, 561, 1435, 561, 561, 561, 561, 1484, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1942, 540, 1793, 1794, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 585, 585, 1946, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2005, 585, 585, 585, 1959, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2357, 585, 2102, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 379, 381, 0, 0, 0, 0, 0, 2133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1119, 0, 0, 2033, 0, 2035, 0, 0, 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0, 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 0, 0, 2474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1133, 0, 0, 0, 0, 0, 0, 2760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 384, 0, 0, 2799, 0, 0, 0, 0, 0, 0, 0, 2803, 540, 540, 540, 540, 540, 540, 540, 1326, 540, 540, 540, 540, 540, 540, 540, 1339, 585, 2956, 0, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 0, 0, 0, 2966, 0, 0, 0, 3008, 0, 0, 0, 0, 0, 0, 0, 0, 3017, 0, 0, 0, 0, 0, 383, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 3048, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1320, 3089, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1858, 3130, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1957, 540, 3225, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3414, 585, 585, 585, 3281, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 3157, 3513, 540, 540, 540, 540, 540, 540, 540, 561, 3521, 561, 3522, 561, 561, 561, 3526, 540, 540, 540, 3664, 561, 561, 561, 3666, 585, 585, 585, 3668, 0, 0, 540, 540, 540, 3560, 540, 540, 540, 540, 540, 540, 540, 540, 3568, 561, 321, 321, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 371, 0, 430, 436, 0, 442, 451, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 490, 490, 501, 490, 490, 490, 490, 490, 490, 490, 490, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 544, 566, 544, 566, 544, 544, 566, 544, 590, 566, 566, 566, 566, 566, 566, 566, 590, 590, 590, 544, 590, 590, 590, 590, 590, 566, 566, 544, 566, 590, 566, 590, 1, 12290, 3, 78112, 540, 540, 540, 874, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1822, 540, 1360, 585, 1017, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 1122, 0, 1124, 1125, 0, 0, 0, 1127, 1128, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 1159168, 0, 0, 0, 0, 1159168, 0, 0, 1166, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1634, 0, 0, 0, 1113, 0, 1253, 0, 0, 0, 0, 0, 1128, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 0, 773, 774, 0, 0, 778, 779, 0, 675, 0, 0, 0, 0, 0, 0, 1598, 0, 0, 0, 0, 0, 0, 0, 0, 1605, 0, 0, 1268, 1127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 1277, 540, 540, 540, 1323, 540, 540, 1325, 540, 540, 1328, 540, 540, 540, 540, 540, 540, 540, 540, 2554, 540, 540, 540, 540, 540, 540, 2560, 1360, 914, 561, 561, 1365, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1400, 561, 561, 561, 561, 561, 561, 1404, 561, 561, 561, 561, 561, 561, 561, 1413, 561, 561, 1415, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 2655, 561, 1419, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1874, 561, 561, 561, 1443, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 1456, 585, 585, 0, 0, 3291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 1266, 585, 585, 585, 1504, 585, 585, 1506, 585, 585, 585, 1510, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 2020, 561, 561, 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1675, 0, 0, 0, 585, 1991, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2695, 561, 2024, 585, 585, 585, 2028, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1586, 1587, 0, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 2035, 0, 0, 0, 0, 0, 2038, 0, 0, 2077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 0, 0, 0, 0, 0, 0, 2091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2807, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 2252, 561, 561, 561, 561, 561, 1447, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2017, 540, 540, 540, 2021, 561, 2256, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1875, 2272, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1890, 561, 561, 561, 2314, 561, 2316, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2340, 585, 585, 585, 2399, 585, 2401, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 540, 540, 2564, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3212, 540, 0, 0, 0, 561, 561, 561, 561, 2588, 561, 561, 561, 561, 561, 561, 561, 561, 1916, 561, 26027, 0, 585, 585, 585, 585, 0, 2757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 2834, 540, 540, 540, 540, 540, 540, 540, 2840, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2571, 540, 540, 540, 540, 540, 540, 2882, 561, 561, 561, 561, 561, 561, 561, 2888, 561, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 2902, 585, 585, 585, 2930, 585, 585, 585, 585, 585, 585, 585, 2936, 585, 585, 585, 585, 585, 585, 585, 561, 540, 2714, 585, 561, 540, 540, 540, 540, 540, 540, 3226, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3074, 585, 585, 585, 585, 3282, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 3156, 0, 585, 585, 3369, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 2617344, 0, 0, 0, 0, 0, 2789376, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 3445, 0, 0, 0, 0, 540, 540, 540, 540, 3027, 540, 540, 540, 540, 3031, 540, 540, 540, 540, 540, 540, 3456, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3524, 561, 561, 561, 561, 3471, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3486, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3626, 540, 540, 540, 3515, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3413, 561, 561, 3528, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3113, 585, 585, 585, 3541, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 208896, 0, 0, 0, 0, 323, 324, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 1196, 0, 0, 0, 0, 322, 370, 325, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 322, 0, 0, 369, 369, 399, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 322, 452, 465, 465, 465, 465, 465, 465, 465, 478, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 491, 491, 465, 491, 491, 506, 508, 491, 491, 506, 491, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 534, 517, 517, 517, 517, 517, 545, 567, 545, 567, 545, 545, 567, 545, 591, 567, 567, 567, 567, 567, 567, 567, 591, 591, 591, 545, 591, 591, 591, 591, 591, 567, 567, 545, 567, 591, 567, 591, 1, 12290, 3, 78112, 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 671, 0, 0, 0, 0, 0, 439, 0, 0, 0, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 557, 580, 557, 580, 557, 557, 580, 557, 604, 0, 0, 707, 708, 0, 0, 0, 0, 0, 714, 0, 0, 0, 718, 0, 720, 0, 769, 770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1209, 0, 0, 787, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 801, 0, 806, 0, 809, 0, 0, 0, 0, 806, 809, 0, 0, 0, 809, 0, 707, 0, 0, 826, 0, 0, 0, 0, 0, 826, 826, 829, 809, 806, 0, 0, 0, 0, 0, 0, 0, 789, 0, 801, 0, 818, 0, 0, 0, 0, 0, 2745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 811, 540, 540, 854, 540, 540, 0, 0, 0, 789, 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 2142, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2819, 540, 540, 540, 540, 540, 0, 0, 0, 787, 0, 0, 0, 838, 818, 838, 0, 540, 540, 852, 540, 858, 540, 540, 871, 540, 881, 540, 886, 540, 540, 893, 896, 901, 540, 909, 540, 540, 540, 540, 540, 3215, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 895, 540, 540, 540, 540, 540, 561, 561, 561, 922, 561, 928, 561, 561, 941, 561, 561, 952, 561, 957, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 585, 2653, 585, 585, 0, 0, 2959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2965, 0, 965, 968, 973, 561, 981, 561, 561, 0, 585, 585, 585, 995, 585, 1001, 585, 585, 0, 2958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 131072, 0, 0, 1014, 585, 585, 1025, 585, 1030, 585, 585, 1038, 1041, 1046, 585, 1054, 585, 585, 968, 0, 0, 0, 540, 585, 585, 561, 852, 540, 1066, 901, 540, 922, 561, 1071, 973, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 0, 0, 0, 0, 0, 1137, 1138, 0, 0, 0, 0, 1142, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 1182, 741, 0, 0, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 1303, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1318, 540, 540, 540, 540, 2173, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2558, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1372, 561, 561, 561, 561, 561, 1850, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1902, 1903, 561, 561, 561, 561, 561, 561, 1387, 561, 561, 561, 1392, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1432, 561, 561, 561, 561, 561, 1439, 561, 561, 561, 1421, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1437, 561, 0, 585, 585, 585, 1049, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 811, 0, 585, 585, 585, 585, 1463, 585, 585, 585, 585, 585, 585, 1478, 585, 585, 585, 1483, 0, 0, 1608, 1609, 1610, 0, 1612, 1613, 0, 0, 0, 0, 1618, 0, 0, 0, 0, 0, 679, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2144, 0, 0, 1640, 0, 0, 1643, 0, 1645, 0, 0, 0, 0, 0, 1651, 1652, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 540, 846, 540, 540, 540, 540, 540, 540, 3216, 540, 540, 540, 540, 540, 3221, 540, 3223, 540, 0, 1668, 0, 0, 1670, 0, 0, 0, 0, 1672, 1673, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 347, 345, 65536, 0, 1692, 0, 0, 0, 0, 0, 1698, 1699, 0, 1701, 1702, 1703, 0, 0, 0, 0, 0, 0, 810, 811, 0, 0, 0, 0, 811, 0, 0, 0, 1719, 0, 0, 0, 1723, 1724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 1715, 0, 0, 0, 1735, 1585, 1585, 1737, 540, 1739, 540, 1740, 540, 1742, 540, 540, 540, 1746, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1759, 540, 540, 540, 540, 540, 3318, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2557, 540, 540, 540, 540, 540, 540, 1763, 540, 540, 540, 540, 1767, 540, 1769, 540, 540, 540, 540, 540, 540, 540, 540, 2570, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3041, 540, 540, 540, 540, 540, 540, 540, 540, 1777, 1778, 1780, 540, 540, 540, 540, 540, 540, 1787, 1788, 540, 540, 1791, 1792, 540, 540, 540, 540, 540, 540, 540, 1800, 540, 540, 540, 1804, 540, 540, 540, 540, 540, 540, 2829, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1770, 540, 540, 540, 540, 540, 0, 1828, 561, 1830, 561, 561, 1832, 561, 1834, 561, 561, 561, 1838, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 2725, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 135168, 135168, 0, 0, 65536, 135168, 1859, 561, 1861, 561, 561, 561, 561, 561, 561, 561, 561, 1869, 1870, 1872, 561, 561, 0, 2648, 0, 0, 0, 0, 585, 585, 585, 585, 2652, 585, 585, 585, 585, 585, 585, 2390, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3124, 585, 585, 585, 585, 585, 561, 561, 561, 1894, 561, 561, 561, 1898, 561, 561, 561, 561, 561, 561, 561, 1906, 585, 1926, 585, 1928, 585, 585, 585, 1932, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 585, 1945, 585, 585, 585, 585, 1949, 585, 585, 585, 585, 1953, 585, 1955, 585, 585, 561, 3146, 3147, 3148, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 2488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2096, 0, 0, 0, 0, 0, 0, 1974, 1975, 1976, 585, 585, 1979, 1980, 585, 585, 585, 585, 585, 585, 585, 1988, 585, 561, 0, 1288, 585, 1468, 1377, 540, 540, 540, 1549, 540, 561, 561, 561, 1553, 585, 585, 1992, 585, 585, 585, 585, 585, 585, 585, 2000, 585, 585, 585, 585, 585, 561, 561, 540, 561, 585, 561, 585, 1, 12290, 3, 78112, 585, 585, 585, 585, 2011, 561, 540, 2014, 585, 561, 1792, 540, 2019, 540, 1886, 561, 0, 585, 585, 1040, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 1134592, 0, 0, 0, 0, 2023, 561, 1980, 585, 2027, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 0, 0, 0, 2761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 2089, 0, 0, 0, 0, 2093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2119, 0, 2121, 0, 0, 0, 0, 0, 0, 0, 2129, 0, 0, 0, 0, 786, 0, 805, 0, 0, 0, 0, 540, 849, 540, 540, 540, 540, 540, 2216, 540, 540, 540, 540, 540, 540, 2221, 540, 540, 540, 540, 540, 540, 3633, 561, 561, 561, 561, 561, 561, 3639, 585, 585, 0, 0, 0, 2134, 0, 0, 0, 0, 2139, 0, 0, 0, 0, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2502656, 2179072, 2179072, 2179072, 2179072, 540, 2187, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1337, 540, 2211, 2212, 540, 540, 540, 540, 540, 540, 2219, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2582, 540, 540, 540, 0, 0, 0, 561, 561, 2258, 561, 2260, 561, 561, 561, 561, 561, 561, 2268, 561, 2270, 561, 561, 561, 561, 1426, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3343, 561, 561, 561, 561, 3344, 3345, 561, 561, 2343, 585, 2345, 585, 585, 585, 585, 585, 585, 2353, 585, 2355, 585, 585, 585, 585, 561, 0, 0, 0, 3648, 0, 540, 540, 540, 540, 3652, 540, 585, 585, 585, 585, 2389, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2705, 585, 585, 585, 585, 585, 585, 585, 2402, 585, 585, 2405, 2406, 585, 585, 561, 2177, 585, 2345, 2260, 540, 2414, 540, 540, 561, 2418, 561, 561, 585, 2422, 585, 585, 2029, 0, 2031, 0, 0, 0, 0, 795, 663, 844, 0, 0, 0, 0, 540, 848, 540, 540, 540, 540, 540, 1283, 540, 540, 540, 540, 540, 540, 1298, 540, 540, 540, 540, 540, 540, 2580, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 0, 0, 2450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0, 0, 0, 2459, 0, 0, 0, 0, 0, 2464, 0, 2466, 2467, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 371, 0, 65536, 0, 0, 2498, 0, 0, 0, 0, 0, 0, 0, 2505, 0, 0, 0, 0, 0, 0, 0, 2479, 0, 0, 0, 2481, 0, 0, 0, 0, 2561, 540, 540, 540, 2566, 540, 540, 540, 540, 540, 540, 540, 2573, 540, 540, 540, 540, 540, 540, 2838, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1296, 540, 540, 540, 540, 540, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 2591, 561, 561, 561, 561, 561, 561, 2640, 561, 561, 561, 2643, 561, 561, 561, 561, 561, 561, 2886, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1867, 561, 561, 561, 561, 561, 561, 2621, 561, 561, 561, 561, 2625, 561, 561, 561, 2630, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 0, 3661, 0, 0, 561, 2637, 561, 561, 561, 561, 561, 561, 561, 2642, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3427, 585, 2669, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3267, 2797, 2798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1741, 540, 0, 0, 2982, 2983, 0, 2984, 0, 2986, 0, 0, 0, 0, 2988, 0, 0, 0, 0, 0, 680, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 3007, 0, 0, 2988, 0, 0, 3013, 3014, 0, 3016, 0, 0, 3019, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 3022, 540, 540, 540, 540, 540, 540, 3029, 540, 540, 540, 540, 540, 3033, 3062, 540, 561, 561, 561, 561, 561, 561, 3069, 561, 561, 561, 561, 561, 3073, 561, 0, 585, 585, 1042, 585, 585, 288, 1079, 0, 0, 1082, 1086, 0, 0, 1090, 3103, 561, 585, 585, 585, 585, 585, 585, 3110, 585, 585, 585, 585, 585, 3114, 585, 561, 0, 1543, 585, 1545, 1546, 540, 540, 1548, 540, 540, 561, 561, 1552, 561, 0, 585, 585, 1044, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 794, 0, 0, 0, 0, 0, 0, 0, 798, 3144, 585, 561, 540, 585, 561, 540, 3150, 561, 3152, 585, 3154, 0, 0, 0, 0, 0, 0, 825, 0, 819, 0, 664, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 221184, 0, 0, 0, 0, 65536, 0, 0, 0, 3160, 0, 0, 3163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 2806, 540, 540, 540, 3202, 540, 540, 540, 540, 540, 540, 540, 3207, 540, 540, 540, 540, 540, 540, 540, 540, 3040, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3322, 540, 540, 540, 540, 540, 540, 561, 3234, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1889, 561, 3245, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 3257, 585, 585, 585, 585, 585, 585, 585, 3262, 585, 585, 585, 585, 585, 561, 2013, 585, 2015, 2016, 540, 2018, 540, 540, 561, 2022, 561, 561, 561, 3349, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2667, 0, 3378, 3379, 0, 3176, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 384, 0, 0, 0, 3441, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 2167, 540, 540, 0, 0, 0, 0, 3503, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3512, 0, 0, 3557, 3558, 3559, 540, 540, 540, 3562, 540, 3564, 540, 540, 540, 540, 3569, 3570, 3571, 561, 561, 561, 3574, 561, 3576, 561, 561, 561, 561, 3581, 3582, 3583, 585, 561, 1203, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 585, 585, 3586, 585, 3588, 585, 585, 585, 585, 3593, 0, 0, 0, 0, 0, 0, 0, 2747, 2748, 2749, 0, 0, 0, 0, 0, 0, 0, 2763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 254413, 1, 12290, 0, 0, 540, 3628, 540, 540, 540, 3632, 561, 561, 3634, 561, 561, 561, 3638, 585, 585, 3640, 585, 585, 585, 3644, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3563, 540, 3565, 540, 540, 540, 561, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 366, 0, 0, 0, 374, 376, 0, 0, 0, 0, 0, 0, 0, 344, 0, 402, 0, 0, 0, 0, 0, 402, 0, 0, 409, 0, 0, 0, 409, 69632, 73728, 0, 366, 366, 0, 421, 65536, 366, 0, 0, 366, 421, 498, 502, 498, 498, 507, 498, 498, 498, 507, 498, 421, 421, 327, 421, 0, 0, 421, 0, 421, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 546, 568, 546, 568, 546, 546, 568, 546, 592, 568, 568, 568, 568, 568, 568, 568, 592, 592, 592, 546, 592, 592, 592, 592, 592, 568, 568, 546, 568, 592, 568, 592, 1, 12290, 3, 78112, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1248, 0, 0, 540, 540, 540, 875, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2183, 540, 540, 561, 561, 915, 561, 561, 561, 561, 561, 561, 945, 561, 561, 561, 561, 561, 561, 585, 3421, 585, 585, 3423, 585, 585, 585, 585, 585, 585, 1018, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 0, 0, 0, 540, 988, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3068, 561, 561, 561, 561, 561, 561, 561, 561, 932, 561, 561, 946, 561, 561, 561, 561, 561, 561, 934, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3240, 561, 561, 561, 561, 561, 561, 0, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 1229, 0, 1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 540, 540, 540, 1281, 540, 540, 540, 540, 540, 1293, 540, 540, 540, 540, 540, 540, 540, 540, 3054, 3056, 540, 540, 540, 3059, 540, 3061, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 1370, 561, 561, 561, 561, 561, 1382, 585, 585, 1461, 585, 585, 585, 585, 585, 1473, 585, 585, 585, 585, 585, 585, 585, 585, 2914, 585, 585, 585, 585, 585, 585, 585, 585, 3122, 585, 585, 585, 585, 585, 585, 585, 585, 3136, 3138, 585, 585, 585, 3141, 585, 3143, 0, 1720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134, 0, 1990, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1972, 585, 585, 585, 2373, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2370, 585, 585, 585, 585, 2698, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2383, 585, 0, 0, 0, 3161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1688, 0, 0, 0, 561, 561, 3235, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 2325, 0, 3663, 540, 540, 540, 3665, 561, 561, 561, 3667, 585, 585, 585, 0, 0, 540, 540, 540, 2526, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3058, 540, 540, 540, 422, 422, 0, 422, 431, 0, 422, 0, 422, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 492, 492, 466, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 547, 569, 547, 569, 547, 547, 569, 547, 593, 569, 569, 569, 569, 569, 569, 569, 593, 593, 593, 547, 593, 593, 593, 593, 593, 569, 569, 547, 569, 593, 569, 593, 1, 12290, 3, 78112, 0, 0, 0, 0, 2159, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3032, 540, 540, 540, 540, 540, 2202, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2208, 540, 540, 2413, 540, 540, 540, 2417, 561, 561, 561, 2421, 585, 585, 585, 0, 0, 0, 0, 3293, 0, 0, 0, 0, 0, 3296, 0, 0, 0, 2458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 2967, 0, 0, 0, 2971, 0, 0, 0, 0, 0, 2977, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 418, 0, 65536, 0, 0, 2992, 0, 0, 2995, 0, 0, 0, 0, 0, 3000, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 367, 367, 0, 0, 65536, 367, 0, 0, 0, 3023, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2222, 540, 540, 540, 540, 3049, 540, 540, 540, 540, 540, 540, 540, 540, 3057, 540, 540, 3060, 540, 540, 540, 540, 2189, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2583, 0, 0, 0, 540, 540, 3063, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 2326, 0, 561, 561, 3090, 561, 561, 561, 561, 561, 561, 561, 561, 3098, 561, 561, 3101, 561, 0, 585, 585, 1045, 585, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 1102, 1101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 1275, 540, 561, 561, 3104, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2666, 585, 585, 585, 3131, 585, 585, 585, 585, 585, 585, 585, 585, 3139, 585, 585, 3142, 585, 585, 585, 585, 585, 1930, 585, 585, 585, 585, 585, 585, 585, 585, 1941, 585, 585, 585, 585, 585, 1948, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3263, 585, 585, 585, 585, 0, 0, 0, 0, 3179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 3192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 2808, 3201, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1359, 540, 3213, 540, 540, 540, 540, 540, 540, 540, 3218, 540, 3220, 540, 540, 540, 540, 540, 540, 561, 3227, 561, 561, 561, 3230, 561, 561, 561, 561, 561, 982, 561, 0, 585, 585, 585, 585, 999, 585, 585, 585, 561, 561, 3246, 561, 3248, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 3537, 585, 585, 585, 585, 3256, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3278, 585, 585, 3268, 585, 585, 585, 585, 585, 585, 585, 585, 3274, 585, 3276, 585, 585, 561, 3370, 540, 3371, 561, 3372, 585, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 540, 540, 3328, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3233, 561, 561, 561, 561, 3340, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3346, 561, 0, 994, 1075, 1039, 585, 585, 78112, 1079, 0, 0, 1081, 1085, 0, 0, 1089, 3358, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3364, 585, 585, 585, 585, 585, 585, 585, 1981, 1982, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2951, 540, 2953, 561, 561, 561, 3654, 3655, 561, 561, 585, 585, 3658, 3659, 585, 585, 0, 0, 0, 0, 0, 0, 1126, 0, 0, 0, 1130, 1131, 0, 0, 0, 0, 0, 0, 1141, 0, 1143, 0, 0, 362, 362, 0, 0, 0, 691, 0, 0, 0, 0, 696, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1154, 0, 0, 0, 0, 0, 1160, 0, 1162, 0, 758, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 758, 758, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 856, 585, 999, 926, 540, 540, 540, 540, 910, 561, 561, 561, 561, 561, 1880, 1881, 1882, 561, 561, 1885, 1886, 561, 561, 561, 561, 561, 1896, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2603, 561, 2605, 561, 561, 561, 982, 0, 585, 585, 585, 585, 1055, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 375, 0, 378, 0, 0, 0, 378, 0, 0, 0, 0, 1709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1619, 0, 0, 585, 585, 585, 2010, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 3066, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2600, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 987, 585, 585, 585, 585, 585, 0, 2039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1178, 0, 540, 540, 540, 2172, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2238, 2584, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2255, 0, 0, 0, 0, 2461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 3288, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1184, 1184, 561, 561, 561, 561, 3350, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2939, 585, 585, 585, 585, 3368, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 394, 0, 0, 467, 467, 485, 493, 493, 485, 493, 493, 493, 493, 493, 493, 493, 493, 518, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 535, 526, 526, 526, 526, 526, 548, 570, 548, 570, 548, 548, 570, 548, 594, 570, 570, 570, 570, 570, 570, 570, 594, 594, 594, 548, 594, 594, 594, 594, 594, 570, 570, 548, 570, 594, 570, 594, 1, 12290, 3, 78112, 767, 0, 0, 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1704, 0, 0, 0, 821, 0, 0, 0, 798, 0, 0, 821, 0, 0, 0, 0, 0, 821, 821, 0, 0, 0, 0, 805, 0, 0, 786, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 839, 794, 0, 0, 839, 0, 0, 0, 0, 808, 0, 0, 692, 0, 0, 672, 0, 692, 0, 813, 675, 676, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 540, 867, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 911, 540, 540, 540, 540, 2215, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1756, 540, 540, 540, 540, 983, 0, 585, 585, 585, 1077, 1056, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 412, 412, 0, 0, 0, 0, 0, 412, 0, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1621, 0, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 540, 1305, 540, 540, 540, 540, 540, 540, 540, 1313, 540, 540, 540, 540, 540, 540, 540, 540, 3332, 540, 561, 561, 561, 561, 561, 561, 935, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3094, 561, 3096, 561, 561, 561, 561, 561, 561, 1340, 540, 540, 1344, 540, 540, 540, 540, 540, 1350, 540, 540, 540, 1357, 540, 540, 540, 540, 540, 3458, 540, 3460, 3461, 540, 3463, 540, 561, 561, 561, 561, 561, 2262, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1399, 561, 561, 561, 561, 561, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1375, 561, 561, 561, 561, 1848, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2868, 561, 561, 561, 561, 561, 1441, 561, 561, 561, 1448, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 1998, 585, 585, 585, 585, 585, 2003, 585, 585, 1485, 585, 585, 585, 585, 585, 585, 585, 1493, 585, 585, 585, 585, 585, 585, 585, 585, 3261, 585, 585, 585, 585, 585, 585, 585, 585, 3272, 585, 585, 585, 585, 585, 585, 585, 585, 3283, 540, 585, 561, 540, 540, 561, 561, 585, 1522, 585, 585, 1526, 585, 585, 585, 585, 585, 1532, 585, 585, 585, 1539, 585, 585, 585, 585, 585, 1996, 1997, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1531, 585, 585, 585, 585, 585, 585, 0, 0, 0, 1595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1716, 0, 0, 0, 0, 0, 1656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1665, 0, 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1653, 0, 0, 0, 1722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1729, 0, 0, 0, 0, 0, 0, 1706, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3398, 540, 3400, 540, 561, 561, 1893, 561, 561, 561, 561, 561, 561, 1901, 561, 561, 561, 561, 561, 561, 1410, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1428, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1917, 26027, 0, 1922, 585, 1924, 585, 561, 561, 561, 1910, 1912, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 585, 2335, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 3622, 0, 3624, 0, 0, 540, 585, 585, 585, 585, 1978, 585, 585, 585, 585, 585, 585, 585, 585, 1987, 585, 585, 585, 585, 585, 585, 2934, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2407, 561, 540, 585, 585, 561, 585, 585, 585, 585, 1995, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2004, 2006, 0, 0, 0, 2078, 0, 0, 0, 2081, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 2774, 0, 0, 0, 2778, 0, 2780, 0, 0, 0, 0, 0, 0, 2746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 2103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265, 0, 0, 0, 0, 561, 561, 561, 561, 561, 2249, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1519, 585, 585, 2346, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2919, 585, 2448, 0, 0, 0, 0, 0, 0, 0, 0, 2453, 0, 0, 2456, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 2460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2471, 0, 0, 0, 2485, 2486, 0, 0, 2489, 0, 0, 2492, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 417, 417, 0, 0, 65536, 417, 0, 0, 2499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2510, 0, 0, 0, 0, 815, 0, 812, 795, 0, 0, 817, 0, 667, 0, 791, 0, 0, 0, 0, 1096, 0, 0, 1098, 0, 0, 0, 0, 0, 0, 0, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 540, 2524, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1789, 540, 540, 540, 540, 540, 2551, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2559, 540, 540, 2562, 540, 540, 540, 540, 540, 540, 2569, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3323, 540, 540, 540, 540, 540, 540, 2576, 540, 540, 540, 2579, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 561, 2586, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3254, 561, 561, 561, 585, 585, 585, 585, 585, 2672, 585, 585, 585, 585, 585, 585, 2677, 585, 585, 585, 585, 561, 0, 3646, 0, 0, 0, 540, 540, 540, 540, 540, 540, 2529, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2842, 540, 540, 540, 540, 540, 585, 585, 585, 2683, 585, 585, 585, 585, 585, 585, 2690, 585, 585, 585, 585, 585, 585, 585, 2351, 585, 585, 585, 585, 585, 585, 585, 585, 1508, 585, 585, 585, 585, 585, 585, 585, 585, 2697, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2704, 585, 585, 585, 2707, 0, 0, 0, 0, 2735, 0, 0, 0, 0, 0, 0, 0, 2739, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 2528, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2234, 540, 540, 540, 540, 0, 540, 540, 540, 2811, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2821, 540, 540, 540, 540, 540, 2836, 540, 540, 540, 2839, 540, 2841, 540, 540, 540, 540, 540, 540, 540, 540, 3520, 561, 561, 561, 561, 561, 561, 561, 1450, 26027, 1360, 987, 585, 585, 585, 585, 585, 2845, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 2853, 561, 561, 561, 561, 561, 1913, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 2333, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1050, 585, 585, 585, 585, 561, 561, 2858, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2284, 561, 561, 561, 2874, 2875, 561, 561, 561, 561, 2878, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 1005, 585, 561, 561, 561, 2884, 561, 561, 561, 2887, 561, 2889, 561, 561, 561, 561, 561, 561, 1449, 561, 26027, 1360, 987, 1453, 585, 585, 585, 585, 2893, 561, 561, 561, 561, 561, 561, 0, 0, 585, 585, 2901, 585, 585, 585, 585, 585, 585, 585, 3121, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 3285, 561, 3287, 585, 2906, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3367, 585, 585, 2922, 2923, 585, 585, 585, 585, 2926, 585, 585, 585, 585, 585, 585, 585, 585, 3592, 561, 0, 0, 0, 0, 3595, 0, 585, 585, 585, 2932, 585, 585, 585, 2935, 585, 2937, 585, 585, 585, 585, 585, 585, 585, 1933, 585, 585, 585, 585, 1939, 585, 585, 585, 2941, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, 0, 585, 585, 2957, 0, 0, 2960, 2961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 3009, 0, 0, 3012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200253, 151552, 2200253, 0, 0, 0, 151552, 540, 540, 540, 540, 3037, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3325, 540, 540, 540, 540, 540, 540, 540, 3051, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3465, 561, 561, 561, 561, 561, 561, 3077, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1887, 1888, 561, 561, 561, 561, 561, 561, 3092, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3480, 585, 585, 585, 585, 561, 561, 585, 585, 585, 585, 3108, 585, 585, 585, 585, 3112, 585, 585, 585, 585, 585, 585, 585, 3135, 585, 3137, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 3552, 0, 0, 0, 585, 585, 585, 3118, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1512, 585, 585, 585, 585, 585, 585, 585, 3133, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2917, 585, 585, 2920, 0, 0, 3168, 3169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2071, 0, 0, 0, 540, 540, 540, 540, 3329, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3412, 561, 561, 3336, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2285, 3347, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 3354, 585, 585, 585, 585, 585, 585, 2404, 585, 585, 585, 585, 561, 2178, 585, 2346, 2261, 3389, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2534, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 3447, 3448, 0, 540, 540, 540, 540, 2527, 540, 540, 540, 540, 2531, 540, 540, 540, 540, 540, 540, 540, 1312, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1784, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3473, 561, 3475, 3476, 561, 3478, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254413, 0, 0, 0, 0, 0, 585, 585, 585, 3488, 585, 3490, 3491, 585, 3493, 585, 3495, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 313, 314, 314, 419, 420, 65536, 427, 585, 585, 3617, 585, 3618, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 904, 540, 561, 561, 561, 976, 561, 561, 585, 585, 3673, 3674, 3675, 3676, 0, 540, 561, 585, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 1563, 0, 0, 0, 1569, 0, 0, 0, 0, 0, 2789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, 0, 0, 0, 571, 571, 571, 571, 571, 571, 571, 595, 595, 595, 540, 595, 595, 595, 595, 595, 571, 571, 540, 571, 595, 571, 595, 1, 12290, 3, 78112, 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1707, 0, 0, 2040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, 2170, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 0, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2253, 561, 561, 561, 561, 926, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2307, 561, 561, 561, 2310, 400, 0, 0, 0, 0, 378, 0, 69632, 73728, 0, 0, 0, 0, 423, 65536, 0, 0, 0, 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1687, 0, 1689, 0, 0, 423, 423, 0, 423, 0, 437, 423, 0, 423, 468, 468, 468, 475, 468, 468, 468, 468, 468, 468, 468, 468, 475, 468, 468, 468, 468, 468, 468, 468, 468, 482, 468, 494, 494, 468, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 537, 549, 572, 549, 572, 549, 549, 572, 549, 596, 572, 572, 572, 572, 572, 572, 572, 596, 596, 596, 549, 596, 596, 596, 596, 596, 572, 572, 549, 572, 596, 572, 596, 1, 12290, 3, 78112, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, 0, 830, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 742, 661, 0, 0, 0, 0, 0, 540, 847, 540, 540, 540, 540, 540, 540, 3330, 540, 540, 540, 561, 561, 561, 561, 561, 3335, 861, 540, 540, 540, 540, 540, 540, 540, 540, 540, 897, 540, 540, 540, 540, 540, 540, 540, 1799, 540, 540, 540, 540, 540, 540, 1807, 540, 561, 561, 916, 561, 561, 561, 931, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2266, 561, 561, 561, 561, 561, 561, 0, 0, 0, 540, 989, 585, 561, 540, 540, 897, 540, 540, 561, 561, 969, 561, 561, 561, 561, 561, 0, 585, 585, 989, 585, 585, 585, 1004, 585, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1101, 1102, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 0, 0, 540, 540, 540, 1308, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3222, 540, 540, 1360, 914, 561, 1363, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1376, 1383, 561, 561, 561, 1444, 561, 561, 561, 561, 26027, 1360, 987, 585, 1454, 585, 585, 585, 585, 585, 585, 2659, 585, 585, 2662, 2663, 585, 585, 585, 585, 585, 585, 585, 2712, 540, 585, 585, 561, 540, 540, 540, 540, 585, 585, 1488, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3128, 585, 1521, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1535, 585, 585, 585, 585, 585, 585, 2673, 585, 585, 585, 2676, 585, 585, 2678, 585, 2679, 561, 585, 585, 1521, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 1826, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1841, 1842, 585, 585, 2009, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 1849, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2880, 561, 561, 561, 561, 561, 2063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2074, 540, 540, 2226, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 2854, 561, 561, 561, 561, 561, 561, 2301, 561, 561, 561, 561, 561, 561, 2306, 561, 561, 561, 561, 561, 561, 3079, 561, 561, 561, 561, 561, 3085, 561, 561, 3088, 2311, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 2654, 585, 585, 585, 585, 585, 2374, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3140, 585, 585, 585, 585, 2386, 585, 585, 585, 585, 585, 585, 2391, 585, 585, 585, 585, 585, 2396, 585, 585, 585, 585, 585, 2012, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 2624, 561, 561, 561, 561, 561, 561, 2632, 561, 561, 561, 561, 561, 2288, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2631, 561, 561, 561, 561, 561, 2435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2114, 0, 0, 0, 0, 2476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 2732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1590, 1591, 0, 0, 0, 2772, 0, 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 540, 562, 540, 562, 540, 540, 562, 540, 586, 540, 540, 2810, 540, 540, 540, 540, 540, 540, 2818, 540, 540, 540, 540, 540, 540, 540, 889, 540, 540, 540, 540, 907, 540, 540, 540, 540, 540, 540, 540, 2849, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1836, 561, 561, 561, 561, 561, 2857, 561, 561, 561, 561, 561, 561, 2865, 561, 561, 561, 561, 561, 561, 561, 561, 3081, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2897, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 1467, 1474, 585, 585, 585, 585, 585, 585, 585, 585, 3621, 0, 0, 0, 0, 0, 0, 540, 2905, 585, 585, 585, 585, 585, 585, 2913, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1983, 585, 585, 1986, 585, 585, 585, 585, 585, 585, 585, 2945, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 3376, 0, 585, 3280, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 3155, 0, 0, 585, 585, 585, 3587, 585, 3589, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 2791, 0, 0, 0, 2793, 0, 0, 0, 0, 0, 0, 0, 0, 3600, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1314, 540, 540, 540, 540, 3607, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3614, 585, 585, 585, 585, 585, 585, 2686, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1045, 585, 585, 585, 585, 585, 972, 561, 3653, 561, 561, 561, 561, 585, 3657, 585, 585, 585, 585, 0, 0, 0, 0, 0, 0, 1204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 345, 469, 469, 469, 453, 453, 469, 453, 453, 453, 453, 453, 453, 453, 453, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 550, 573, 550, 573, 550, 550, 573, 550, 597, 573, 573, 573, 573, 573, 573, 573, 597, 597, 597, 550, 597, 597, 597, 597, 597, 573, 573, 550, 573, 597, 573, 597, 1, 12290, 3, 78112, 862, 540, 540, 876, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1315, 540, 540, 540, 585, 1019, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 3498, 0, 0, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1607, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2111, 0, 0, 0, 540, 1341, 540, 540, 540, 540, 540, 1348, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3333, 561, 561, 561, 561, 561, 585, 585, 585, 585, 1505, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3365, 585, 585, 585, 585, 585, 1523, 585, 585, 585, 585, 585, 1530, 585, 585, 585, 585, 585, 585, 585, 1468, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2378, 585, 585, 585, 585, 585, 585, 561, 585, 585, 585, 1557, 585, 1079, 0, 1561, 0, 0, 0, 1567, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 803, 0, 0, 0, 0, 540, 540, 540, 540, 540, 1573, 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 0, 1695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 0, 540, 1762, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1358, 540, 1843, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1854, 561, 561, 561, 561, 561, 561, 3239, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3578, 561, 561, 585, 585, 585, 585, 0, 2064, 2065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 2135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 2186, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1808, 540, 540, 2213, 540, 540, 540, 540, 2218, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1754, 540, 540, 540, 540, 540, 540, 2240, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1401, 561, 561, 2298, 561, 561, 561, 561, 2303, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3083, 561, 561, 561, 561, 561, 585, 585, 585, 2388, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1938, 585, 585, 585, 3034, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2210, 0, 0, 0, 3380, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1175, 0, 0, 0, 0, 540, 540, 3404, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2282, 561, 561, 561, 561, 561, 561, 561, 3419, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1049, 585, 585, 585, 585, 561, 540, 3454, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3523, 561, 561, 561, 3469, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 3484, 385, 387, 337, 0, 0, 0, 0, 0, 0, 336, 0, 0, 337, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2057, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1139, 1140, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 438, 0, 444, 0, 470, 470, 470, 470, 470, 470, 470, 551, 574, 551, 574, 551, 551, 574, 551, 598, 480, 470, 470, 470, 499, 476, 499, 499, 499, 499, 499, 499, 499, 499, 470, 470, 476, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 480, 470, 481, 480, 470, 470, 470, 470, 574, 574, 574, 574, 574, 574, 574, 598, 598, 598, 551, 598, 598, 598, 598, 598, 574, 574, 551, 574, 598, 574, 598, 1, 12290, 3, 78112, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2153, 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 0, 0, 1223, 0, 0, 0, 0, 0, 0, 663, 0, 791, 0, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 2972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2097, 0, 2099, 0, 0, 0, 0, 0, 804, 0, 0, 0, 0, 0, 812, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 717, 0, 0, 0, 831, 0, 0, 0, 663, 834, 0, 791, 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 2996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2429, 2430, 0, 0, 0, 0, 863, 540, 540, 877, 540, 540, 540, 888, 540, 540, 540, 540, 906, 540, 540, 540, 540, 540, 1311, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2843, 540, 540, 540, 540, 561, 561, 917, 561, 561, 561, 933, 561, 561, 947, 561, 561, 561, 561, 960, 561, 0, 995, 585, 1076, 1046, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 2686976, 2736128, 0, 0, 2531328, 2707456, 0, 3190784, 561, 561, 561, 978, 561, 561, 561, 0, 585, 585, 990, 585, 585, 585, 1006, 585, 585, 585, 585, 585, 2349, 585, 585, 585, 585, 2354, 585, 585, 585, 585, 585, 585, 585, 2377, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 585, 1020, 585, 585, 585, 585, 1033, 585, 585, 585, 585, 1051, 585, 585, 585, 561, 540, 585, 561, 3149, 540, 3151, 561, 3153, 585, 0, 0, 0, 0, 0, 0, 1660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 990, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 3067, 561, 561, 561, 561, 3071, 561, 561, 561, 561, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2431, 0, 2433, 0, 1238, 0, 0, 0, 0, 1270, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 3561, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 540, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1491, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1495, 585, 585, 585, 585, 561, 585, 585, 1556, 585, 585, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0, 0, 0, 0, 0, 0, 1622, 0, 0, 1625, 0, 1627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, 540, 540, 540, 540, 859, 540, 1744, 540, 540, 540, 540, 540, 540, 540, 540, 1755, 540, 540, 540, 540, 540, 540, 540, 2176, 540, 540, 2180, 540, 540, 540, 2184, 540, 561, 561, 561, 1847, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2294, 561, 561, 561, 0, 0, 2117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, 2148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 0, 0, 0, 0, 0, 0, 0, 561, 561, 561, 561, 2248, 561, 561, 561, 561, 561, 561, 561, 561, 3095, 3097, 561, 561, 561, 3100, 561, 3102, 561, 561, 2313, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 585, 2651, 585, 585, 585, 585, 585, 585, 585, 2660, 585, 585, 585, 585, 585, 2665, 585, 585, 2398, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 2410, 585, 561, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 3669, 540, 3670, 0, 2436, 0, 0, 0, 0, 0, 0, 2441, 0, 0, 0, 2444, 2445, 0, 0, 0, 0, 0, 3010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 2497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2506, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 163840, 0, 0, 0, 0, 65536, 0, 2512, 0, 0, 0, 0, 2515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2523, 540, 2536, 2537, 540, 540, 540, 540, 540, 2542, 540, 2544, 540, 540, 540, 540, 2548, 561, 2595, 561, 561, 2598, 2599, 561, 561, 561, 561, 561, 2604, 561, 2606, 561, 561, 561, 561, 1863, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2890, 561, 561, 561, 561, 561, 561, 561, 2610, 561, 561, 561, 561, 561, 561, 561, 561, 2616, 561, 561, 561, 561, 561, 2276, 561, 561, 2279, 561, 561, 561, 561, 561, 561, 561, 1915, 561, 561, 26027, 1920, 585, 585, 585, 585, 2636, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2608, 2668, 585, 2670, 585, 585, 585, 585, 2674, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2675, 585, 585, 585, 585, 585, 585, 2680, 585, 585, 585, 585, 585, 585, 585, 585, 2688, 585, 585, 585, 585, 585, 585, 585, 1950, 585, 585, 585, 585, 1954, 585, 585, 585, 2696, 585, 585, 585, 585, 2700, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1494, 585, 585, 585, 585, 585, 561, 2720, 561, 561, 585, 2722, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 2770, 0, 0, 0, 2773, 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, 2786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2795, 0, 0, 0, 0, 0, 3171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1245, 0, 0, 0, 0, 0, 540, 2825, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1773, 540, 540, 2835, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2844, 540, 540, 2847, 540, 540, 2850, 540, 0, 0, 2851, 561, 561, 561, 561, 561, 561, 1851, 561, 561, 561, 561, 1855, 561, 561, 561, 561, 561, 2883, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2892, 561, 561, 2895, 561, 561, 2898, 561, 0, 0, 2899, 585, 585, 585, 585, 585, 585, 585, 1965, 585, 585, 585, 1970, 585, 585, 585, 585, 585, 2931, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2940, 585, 585, 2943, 585, 585, 2946, 585, 561, 2948, 585, 2949, 2950, 540, 540, 561, 561, 561, 561, 1878, 561, 561, 561, 561, 1884, 561, 561, 561, 561, 561, 561, 936, 561, 561, 561, 561, 561, 561, 561, 561, 561, 984, 0, 585, 585, 585, 585, 585, 585, 1007, 585, 0, 2968, 2969, 0, 0, 0, 0, 2974, 0, 0, 0, 0, 0, 0, 0, 0, 331, 0, 331, 331, 0, 0, 0, 0, 3020, 0, 0, 540, 540, 3025, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3043, 540, 540, 540, 540, 540, 540, 540, 3050, 540, 540, 3052, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1352, 540, 540, 540, 540, 540, 561, 561, 561, 3091, 561, 561, 3093, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2602, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 3106, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1496, 585, 585, 585, 1500, 585, 585, 585, 3132, 585, 585, 3134, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1040, 585, 585, 585, 585, 585, 967, 3158, 0, 0, 0, 3162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 0, 1225, 0, 3190, 0, 0, 3193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 2166, 540, 540, 540, 540, 540, 3214, 540, 540, 540, 540, 540, 540, 540, 3219, 540, 540, 540, 540, 540, 540, 540, 2541, 540, 2543, 540, 540, 540, 540, 540, 540, 540, 540, 2581, 540, 540, 540, 540, 0, 2584, 0, 561, 561, 561, 3236, 3237, 561, 561, 561, 561, 561, 3241, 561, 561, 561, 561, 561, 561, 3250, 561, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 3536, 585, 585, 585, 585, 561, 561, 561, 3247, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 585, 3481, 585, 3483, 585, 585, 585, 585, 3269, 585, 585, 585, 585, 585, 585, 585, 585, 3275, 585, 585, 585, 585, 585, 585, 2701, 585, 585, 585, 585, 585, 585, 585, 2706, 585, 0, 0, 3308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 856, 540, 585, 3359, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1057, 561, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 3386, 0, 0, 0, 0, 0, 1169, 0, 1171, 0, 0, 0, 0, 1176, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, 585, 3429, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 3437, 0, 0, 0, 0, 0, 3300, 0, 3176, 3302, 0, 0, 3305, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 0, 703, 0, 0, 3440, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 3452, 540, 540, 540, 540, 3457, 540, 540, 540, 540, 3462, 540, 540, 561, 561, 3467, 561, 0, 997, 1037, 585, 1048, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 0, 783, 0, 0, 561, 561, 561, 3472, 561, 561, 561, 561, 3477, 561, 561, 585, 585, 3482, 585, 585, 585, 585, 585, 585, 3259, 3260, 585, 585, 585, 585, 3264, 3265, 585, 585, 585, 585, 585, 585, 3120, 585, 585, 585, 585, 585, 3126, 585, 585, 3129, 585, 585, 3487, 585, 585, 585, 585, 3492, 585, 585, 561, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 167936, 0, 0, 0, 0, 65536, 0, 3499, 0, 0, 0, 0, 0, 3505, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3397, 540, 540, 540, 540, 540, 540, 540, 540, 3517, 540, 540, 3519, 561, 561, 561, 561, 561, 561, 561, 561, 3252, 561, 561, 561, 561, 561, 561, 585, 561, 561, 561, 3530, 561, 561, 3532, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1042, 585, 585, 585, 585, 585, 969, 585, 585, 3543, 585, 585, 3545, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144, 0, 362, 362, 0, 1147, 0, 540, 540, 3629, 3630, 540, 540, 561, 561, 561, 3635, 3636, 561, 561, 585, 585, 585, 585, 0, 2029, 0, 0, 0, 0, 0, 2031, 0, 0, 3641, 3642, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3395, 540, 540, 540, 540, 540, 540, 3401, 561, 561, 585, 585, 0, 540, 561, 585, 0, 540, 561, 585, 3681, 3682, 3683, 3684, 339, 340, 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2469, 0, 2470, 0, 342, 342, 343, 342, 0, 341, 342, 445, 454, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 486, 495, 495, 503, 495, 505, 495, 495, 505, 505, 495, 505, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 552, 575, 552, 575, 552, 552, 575, 552, 599, 575, 575, 575, 575, 575, 575, 575, 599, 599, 599, 552, 599, 599, 599, 599, 599, 575, 575, 552, 575, 599, 575, 599, 1, 12290, 3, 78112, 0, 0, 0, 646, 0, 0, 0, 0, 651, 652, 653, 654, 655, 656, 657, 0, 0, 0, 0, 1144, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2957312, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 699, 362, 362, 362, 0, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 735, 0, 800, 0, 0, 0, 0, 721, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 0, 0, 0, 646, 752, 753, 754, 0, 0, 0, 0, 0, 760, 761, 0, 0, 0, 0, 0, 0, 1271, 0, 0, 0, 0, 0, 0, 540, 540, 540, 3026, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2220, 540, 540, 540, 540, 540, 0, 761, 0, 0, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 797, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 723, 0, 692, 814, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 558, 581, 558, 581, 558, 558, 581, 558, 605, 0, 754, 823, 824, 0, 0, 0, 0, 0, 0, 754, 0, 0, 828, 699, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, 833, 0, 0, 0, 835, 0, 0, 0, 692, 699, 0, 0, 692, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 692, 540, 540, 853, 857, 860, 540, 868, 540, 540, 882, 884, 887, 540, 540, 540, 898, 902, 540, 540, 540, 540, 540, 540, 1766, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1786, 540, 540, 540, 540, 540, 561, 561, 561, 923, 927, 930, 561, 938, 561, 561, 561, 953, 955, 958, 561, 561, 561, 561, 1879, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2641, 561, 561, 561, 561, 561, 561, 561, 561, 2648, 0, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 2717, 540, 540, 540, 585, 585, 585, 1026, 1028, 1031, 585, 585, 585, 1043, 1047, 585, 585, 585, 585, 970, 0, 0, 0, 1060, 585, 1062, 1063, 853, 540, 898, 902, 1068, 923, 561, 970, 974, 561, 561, 561, 561, 0, 585, 585, 585, 996, 1000, 1003, 585, 1011, 1073, 0, 996, 585, 1043, 1047, 1078, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 560, 583, 560, 583, 560, 560, 583, 560, 607, 0, 0, 1199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 1231, 0, 0, 0, 0, 1236, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 422, 65536, 0, 540, 1322, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1331, 540, 540, 1338, 540, 540, 540, 540, 2228, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 2852, 561, 561, 561, 561, 561, 561, 561, 561, 1422, 561, 561, 1429, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2879, 561, 561, 561, 561, 561, 561, 561, 1442, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 2925, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 561, 585, 3436, 0, 3438, 0, 585, 1503, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1513, 585, 585, 1520, 1667, 0, 1669, 0, 0, 0, 1671, 0, 748, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 0, 1602, 0, 0, 0, 0, 0, 0, 540, 1738, 540, 540, 540, 540, 540, 540, 540, 2584, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1839, 561, 561, 561, 1743, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2238, 540, 1776, 540, 540, 1781, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1353, 540, 540, 540, 540, 0, 561, 1829, 561, 561, 561, 561, 561, 561, 1835, 561, 561, 561, 561, 561, 561, 1864, 561, 561, 561, 1868, 561, 561, 1873, 561, 561, 1907, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 1923, 585, 585, 585, 585, 585, 585, 3270, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1968, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1929, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1511, 585, 585, 585, 585, 585, 1958, 585, 585, 585, 1962, 585, 585, 1967, 585, 585, 585, 585, 585, 585, 585, 1469, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2392, 585, 585, 585, 2395, 585, 585, 0, 1086, 0, 0, 0, 2034, 0, 1090, 0, 0, 0, 2036, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 585, 585, 585, 585, 2362, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1534, 585, 585, 585, 585, 2585, 0, 1826, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2271, 585, 585, 585, 2710, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 1814, 540, 540, 540, 540, 1820, 540, 540, 540, 1360, 0, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1649, 0, 0, 0, 0, 585, 585, 585, 585, 2924, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1937, 585, 585, 585, 585, 561, 561, 3338, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1857, 561, 561, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 3385, 0, 0, 0, 0, 0, 0, 1628, 1629, 1630, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 362, 0, 0, 0, 0, 0, 0, 3402, 540, 540, 540, 561, 561, 561, 3407, 561, 561, 561, 561, 3411, 561, 561, 561, 561, 1391, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1414, 561, 561, 561, 561, 561, 561, 3417, 561, 561, 561, 585, 585, 585, 3422, 585, 585, 585, 585, 3426, 585, 585, 585, 585, 585, 2375, 2376, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1476, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3432, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 3446, 0, 0, 0, 540, 540, 540, 3392, 540, 540, 540, 540, 3396, 540, 540, 540, 540, 540, 540, 540, 3039, 540, 540, 540, 540, 540, 3045, 540, 540, 540, 540, 3455, 540, 540, 540, 3459, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 2626, 561, 561, 561, 561, 561, 561, 2633, 561, 561, 561, 561, 3470, 561, 561, 561, 3474, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 3111, 585, 585, 585, 585, 585, 585, 3485, 585, 585, 585, 3489, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 3603, 540, 3604, 540, 540, 540, 561, 561, 585, 585, 0, 540, 561, 585, 3677, 3678, 3679, 3680, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 0, 1562, 0, 0, 0, 1568, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 300, 0, 0, 0, 0, 386, 0, 0, 0, 390, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 344, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 521, 521, 521, 521, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 553, 576, 553, 576, 553, 553, 576, 553, 600, 576, 576, 576, 576, 576, 576, 576, 600, 600, 600, 553, 600, 600, 600, 600, 600, 576, 576, 617, 622, 600, 622, 628, 1, 12290, 3, 78112, 561, 561, 561, 979, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2927, 585, 585, 585, 585, 585, 585, 0, 0, 0, 540, 1061, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3238, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1433, 561, 561, 561, 561, 561, 1107, 0, 0, 0, 0, 1112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1190, 0, 0, 0, 0, 0, 561, 561, 561, 1389, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2308, 2309, 561, 561, 561, 1403, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2296, 2297, 1440, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 585, 585, 2947, 540, 585, 585, 561, 540, 540, 561, 561, 1574, 0, 0, 0, 1580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1664, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1620, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2110, 0, 0, 0, 0, 561, 561, 561, 1877, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2322, 0, 0, 0, 2052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2155, 0, 2116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1676, 0, 2241, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2295, 561, 561, 561, 561, 2274, 561, 561, 561, 561, 2278, 561, 2280, 561, 561, 561, 561, 561, 561, 1897, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1397, 561, 561, 561, 561, 561, 561, 2359, 585, 585, 585, 585, 2363, 585, 2365, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3123, 585, 3125, 585, 585, 585, 585, 0, 0, 0, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2494, 2495, 0, 0, 561, 2622, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2607, 561, 0, 3021, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2533, 540, 0, 0, 0, 0, 3176, 3382, 0, 0, 3384, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 3391, 540, 540, 3393, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1785, 540, 540, 540, 1790, 540, 0, 0, 0, 0, 3176, 0, 3443, 0, 0, 0, 0, 0, 3449, 540, 540, 540, 540, 540, 1782, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2832, 540, 540, 540, 540, 864, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 912, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2060, 0, 0, 1827, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2620, 345, 345, 347, 345, 0, 0, 345, 0, 345, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 3310, 0, 0, 3312, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 561, 3410, 561, 561, 561, 561, 561, 0, 0, 0, 345, 345, 347, 345, 345, 345, 345, 345, 345, 512, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 554, 577, 554, 577, 554, 554, 577, 554, 601, 577, 577, 577, 577, 577, 577, 577, 601, 601, 601, 554, 601, 601, 601, 601, 601, 577, 577, 554, 577, 601, 577, 601, 1, 12290, 3, 78112, 0, 722, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2508, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1690, 0, 0, 0, 811, 0, 0, 810, 0, 0, 0, 0, 0, 755, 0, 0, 819, 0, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 0, 1181, 540, 540, 540, 540, 540, 1797, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3464, 561, 561, 561, 561, 540, 540, 872, 540, 540, 540, 540, 890, 892, 540, 540, 903, 540, 540, 540, 540, 540, 540, 2175, 540, 2177, 540, 540, 540, 540, 540, 540, 2185, 561, 561, 918, 924, 561, 561, 561, 561, 942, 561, 561, 561, 561, 561, 962, 964, 561, 561, 975, 561, 561, 561, 561, 0, 585, 585, 991, 997, 585, 585, 585, 585, 585, 585, 585, 3271, 585, 585, 585, 585, 585, 585, 3277, 585, 1015, 585, 585, 585, 585, 585, 1035, 1037, 585, 585, 1048, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 540, 540, 3650, 3651, 540, 540, 0, 0, 0, 540, 991, 585, 561, 854, 892, 540, 903, 540, 924, 964, 561, 975, 0, 0, 0, 1151, 0, 1153, 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 0, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1706, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 0, 1212, 1213, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 540, 540, 1307, 1309, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1316, 540, 540, 1319, 540, 540, 1343, 540, 540, 540, 540, 540, 540, 540, 540, 1354, 1355, 540, 540, 540, 540, 540, 1813, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 1360, 914, 561, 561, 561, 1366, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1921, 585, 585, 585, 585, 561, 561, 1420, 561, 561, 561, 561, 561, 561, 561, 1434, 561, 561, 561, 561, 561, 561, 3342, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3080, 561, 561, 561, 561, 561, 561, 561, 561, 2319, 561, 561, 561, 561, 0, 0, 0, 561, 561, 561, 1445, 1446, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 1457, 585, 585, 585, 585, 585, 2403, 585, 585, 585, 585, 585, 561, 2409, 585, 2411, 2412, 585, 1487, 1489, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3366, 585, 585, 585, 585, 1525, 585, 585, 585, 585, 585, 585, 585, 585, 1536, 1537, 585, 585, 585, 585, 585, 585, 3434, 585, 561, 540, 561, 585, 0, 0, 0, 3439, 585, 1542, 0, 540, 585, 585, 561, 540, 1547, 540, 540, 1550, 561, 1551, 561, 561, 561, 561, 1895, 561, 561, 561, 1900, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 988, 585, 585, 585, 585, 585, 1554, 585, 1555, 585, 585, 1558, 1079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2069, 0, 0, 0, 0, 2073, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2037, 0, 0, 0, 1694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2072, 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2051, 0, 0, 561, 561, 561, 561, 561, 561, 1833, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 585, 585, 585, 561, 1908, 561, 561, 561, 561, 1914, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 2334, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2938, 585, 585, 585, 585, 585, 585, 585, 1927, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1055, 585, 561, 585, 585, 585, 1994, 585, 585, 585, 585, 585, 585, 585, 585, 2002, 585, 585, 585, 585, 585, 585, 2711, 561, 540, 585, 585, 561, 540, 540, 540, 540, 540, 540, 2217, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1802, 540, 540, 540, 540, 540, 585, 2008, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 561, 561, 2261, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2891, 561, 561, 561, 561, 0, 2076, 0, 0, 0, 0, 0, 0, 0, 0, 2084, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 266240, 0, 0, 0, 0, 65536, 0, 2088, 0, 0, 2090, 0, 0, 0, 0, 0, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 2146, 0, 0, 0, 2146, 0, 0, 2151, 2152, 0, 0, 0, 0, 0, 0, 0, 274432, 274432, 274432, 0, 274432, 274432, 274432, 274432, 274432, 2156, 0, 0, 0, 0, 0, 0, 0, 2162, 540, 540, 540, 540, 540, 2168, 540, 540, 540, 540, 2538, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1821, 540, 540, 1360, 540, 2200, 540, 2203, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2209, 540, 540, 540, 540, 2578, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2584, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, 0, 0, 2244, 561, 561, 561, 561, 561, 561, 2251, 561, 561, 561, 561, 561, 561, 3351, 585, 585, 585, 585, 585, 585, 585, 3356, 585, 561, 561, 2300, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2323, 0, 0, 0, 2329, 585, 585, 585, 585, 585, 585, 2336, 585, 585, 585, 585, 585, 585, 585, 1470, 585, 585, 585, 585, 1480, 585, 585, 585, 585, 585, 2360, 585, 585, 585, 585, 585, 585, 2366, 585, 2368, 585, 2371, 585, 585, 585, 585, 585, 585, 3546, 0, 0, 3549, 3550, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2912256, 0, 3207168, 2465792, 0, 0, 2385, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1989, 2472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2480, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 1, 12290, 3, 0, 0, 0, 0, 0, 2514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2522, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 172032, 0, 0, 0, 0, 65536, 0, 561, 561, 2596, 561, 561, 561, 561, 561, 2601, 561, 561, 561, 561, 561, 561, 561, 0, 585, 585, 992, 585, 585, 585, 585, 585, 585, 2681, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1956, 585, 2719, 561, 561, 561, 2721, 585, 585, 585, 2723, 2724, 0, 0, 0, 0, 0, 0, 0, 2801, 0, 0, 0, 540, 2805, 540, 540, 540, 2742, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2100, 0, 0, 0, 0, 2758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2128, 0, 0, 540, 2809, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2223, 2224, 540, 2846, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 561, 2855, 561, 2856, 561, 2894, 561, 561, 561, 561, 561, 0, 0, 585, 585, 585, 585, 2903, 585, 2904, 585, 2942, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 3374, 0, 0, 3377, 0, 0, 0, 540, 3024, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1771, 540, 540, 540, 540, 561, 561, 585, 3105, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2369, 585, 585, 585, 585, 585, 3145, 540, 585, 561, 540, 540, 561, 561, 585, 585, 0, 0, 0, 0, 0, 0, 2066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 297, 0, 0, 0, 0, 0, 0, 0, 3390, 540, 540, 540, 540, 3394, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2179, 540, 540, 540, 540, 540, 540, 540, 3403, 540, 540, 3405, 561, 561, 561, 561, 3409, 561, 561, 561, 561, 561, 561, 2277, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3082, 561, 3084, 561, 561, 561, 561, 561, 561, 561, 3418, 561, 561, 3420, 585, 585, 585, 585, 3424, 585, 585, 585, 585, 585, 585, 585, 3591, 585, 561, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 3303, 0, 0, 0, 0, 3307, 0, 585, 585, 585, 585, 585, 3433, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 0, 0, 0, 0, 0, 0, 0, 3500, 0, 3502, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 3511, 540, 540, 540, 540, 2812, 540, 2815, 540, 540, 540, 540, 2820, 540, 540, 540, 2823, 540, 540, 540, 540, 3631, 540, 561, 561, 561, 561, 561, 3637, 561, 585, 585, 585, 585, 585, 1079, 0, 0, 0, 1564, 0, 0, 0, 1570, 0, 585, 585, 3643, 585, 561, 3645, 0, 3647, 0, 0, 540, 540, 540, 540, 540, 540, 540, 1286, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3208, 540, 540, 540, 540, 540, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2496, 398, 0, 0, 0, 0, 0, 365, 373, 401, 0, 0, 0, 0, 0, 365, 0, 0, 393, 0, 0, 0, 0, 348, 0, 0, 365, 0, 393, 0, 406, 408, 0, 0, 365, 373, 0, 69632, 73728, 0, 0, 0, 0, 424, 65536, 0, 0, 0, 0, 1596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 424, 424, 0, 424, 0, 408, 424, 447, 455, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 644, 0, 406, 0, 496, 496, 0, 496, 496, 496, 496, 496, 496, 496, 496, 522, 522, 522, 522, 455, 455, 455, 530, 455, 531, 455, 455, 522, 536, 522, 522, 522, 522, 538, 555, 578, 555, 578, 555, 555, 578, 555, 602, 578, 578, 578, 608, 608, 608, 578, 602, 602, 602, 555, 602, 602, 602, 602, 602, 578, 578, 618, 623, 602, 623, 629, 1, 12290, 3, 78112, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2769, 0, 0, 0, 694, 0, 0, 0, 0, 0, 362, 362, 362, 0, 0, 0, 0, 0, 0, 2440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142, 2143, 0, 540, 540, 540, 878, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1332, 540, 540, 540, 561, 561, 919, 561, 561, 561, 561, 561, 561, 948, 950, 561, 561, 561, 561, 561, 561, 3575, 561, 3577, 561, 561, 561, 585, 585, 585, 585, 0, 0, 1563, 0, 0, 0, 0, 0, 1569, 0, 585, 1021, 1023, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 561, 3496, 0, 3497, 0, 0, 0, 0, 0, 540, 992, 585, 561, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3341, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3579, 561, 585, 585, 585, 585, 0, 0, 0, 1098, 1230, 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 2452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1242, 1251, 540, 540, 1280, 540, 540, 540, 1284, 540, 540, 1295, 540, 540, 1299, 540, 540, 540, 540, 540, 2229, 540, 2231, 540, 540, 540, 540, 540, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1840, 561, 561, 1360, 914, 561, 561, 561, 561, 561, 561, 1369, 561, 561, 561, 1373, 561, 561, 1384, 561, 561, 1388, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2324, 0, 0, 561, 561, 1405, 561, 561, 561, 1409, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3612, 3613, 561, 585, 585, 585, 585, 585, 1460, 585, 585, 585, 1464, 585, 585, 1475, 585, 585, 1479, 585, 585, 585, 585, 585, 585, 1032, 585, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 3625, 0, 540, 0, 1623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1636, 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2058, 2059, 0, 2061, 2062, 1638, 0, 0, 0, 1642, 0, 0, 0, 1646, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1145, 362, 362, 0, 0, 1148, 561, 1844, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2635, 561, 561, 561, 561, 1862, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2869, 561, 561, 2872, 2007, 585, 585, 585, 585, 561, 1752, 585, 1938, 1844, 540, 540, 540, 540, 561, 561, 561, 561, 2275, 561, 561, 561, 561, 561, 561, 2281, 561, 2283, 561, 2286, 0, 0, 2056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2154, 0, 0, 0, 0, 0, 2118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2520, 0, 0, 0, 0, 2132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 2463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158, 0, 0, 2161, 0, 540, 540, 2164, 540, 540, 540, 540, 540, 540, 540, 3053, 540, 3055, 540, 540, 540, 540, 540, 540, 540, 540, 2232, 540, 540, 2235, 2236, 540, 540, 0, 540, 540, 540, 2227, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 2242, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 561, 561, 2246, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1360, 987, 585, 585, 1455, 585, 1458, 561, 2312, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 0, 585, 2650, 585, 585, 585, 585, 585, 585, 561, 3547, 3548, 0, 0, 0, 0, 0, 0, 3554, 0, 585, 585, 2331, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2381, 2382, 585, 585, 585, 585, 2387, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2397, 540, 540, 2415, 2416, 561, 561, 2419, 2420, 585, 585, 2423, 2424, 0, 1563, 0, 1569, 0, 1575, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 0, 2438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 2513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2519, 0, 0, 0, 0, 0, 0, 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 0, 540, 540, 540, 2565, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1333, 540, 540, 540, 585, 585, 2682, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2693, 585, 585, 585, 585, 585, 585, 3590, 585, 585, 561, 0, 3594, 0, 0, 0, 0, 0, 0, 2516, 2466, 0, 0, 0, 0, 0, 2521, 0, 0, 2824, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2239, 561, 561, 561, 561, 2885, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1395, 561, 561, 561, 561, 561, 561, 561, 561, 1430, 561, 561, 561, 561, 561, 561, 561, 561, 2866, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 585, 2933, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1985, 585, 585, 585, 585, 0, 3177, 0, 0, 0, 3180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1601, 1602, 0, 0, 0, 0, 0, 0, 0, 0, 3194, 0, 0, 0, 0, 0, 0, 3197, 0, 3199, 540, 540, 540, 540, 880, 540, 885, 540, 891, 540, 894, 540, 540, 908, 540, 540, 540, 540, 540, 3038, 540, 540, 540, 540, 540, 540, 540, 540, 3046, 540, 585, 3289, 3290, 0, 0, 0, 0, 3294, 0, 0, 0, 0, 0, 0, 0, 0, 1099, 0, 0, 0, 0, 0, 0, 0, 540, 540, 3316, 540, 540, 540, 3319, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1819, 540, 540, 540, 540, 1360, 561, 3337, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2646, 561, 3415, 561, 561, 561, 561, 561, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3115, 3428, 585, 3430, 585, 585, 585, 585, 585, 561, 540, 561, 585, 0, 0, 0, 0, 0, 0, 2503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 336, 290, 0, 0, 0, 0, 3555, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3566, 540, 540, 561, 3064, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2617, 561, 561, 561, 561, 561, 3608, 561, 3609, 561, 561, 561, 561, 561, 561, 561, 585, 585, 3615, 585, 585, 585, 585, 585, 2658, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1952, 585, 585, 585, 585, 585, 3616, 585, 585, 585, 585, 585, 585, 585, 561, 0, 0, 0, 0, 0, 0, 540, 585, 585, 561, 540, 540, 540, 1067, 911, 561, 561, 561, 1072, 407, 353, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 1146, 0, 0, 472, 483, 472, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 0, 523, 523, 527, 527, 527, 527, 472, 472, 472, 472, 472, 477, 472, 472, 527, 523, 527, 527, 527, 527, 539, 556, 579, 556, 579, 556, 556, 579, 556, 603, 579, 579, 579, 579, 579, 579, 579, 603, 603, 603, 556, 603, 603, 603, 603, 603, 579, 579, 619, 624, 603, 624, 630, 1, 12290, 3, 78112, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2101, 0, 738, 0, 0, 0, 644, 738, 0, 744, 745, 644, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 807, 0, 0, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 644, 0, 0, 0, 802, 0, 807, 0, 793, 0, 822, 0, 0, 0, 665, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 362, 0, 0, 0, 1134592, 0, 0, 0, 793, 793, 0, 644, 0, 0, 793, 807, 845, 0, 540, 850, 540, 540, 540, 540, 540, 2539, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3324, 540, 540, 540, 540, 540, 869, 873, 879, 883, 540, 540, 540, 540, 540, 899, 540, 540, 540, 540, 540, 540, 540, 3206, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2205, 540, 540, 540, 540, 540, 540, 561, 561, 920, 561, 561, 561, 561, 939, 943, 949, 561, 954, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 0, 2728, 0, 0, 1016, 1022, 585, 1027, 585, 585, 585, 585, 585, 1044, 585, 585, 585, 585, 585, 1058, 0, 0, 0, 540, 993, 585, 561, 540, 540, 899, 540, 540, 561, 561, 971, 561, 561, 561, 561, 561, 0, 585, 585, 993, 585, 585, 585, 585, 1012, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2784, 0, 0, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1211, 1227, 0, 0, 1099, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 1674, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 2754, 0, 1252, 1200, 0, 1233, 1255, 0, 1258, 0, 0, 0, 0, 0, 1130, 0, 0, 0, 0, 0, 1597, 0, 0, 0, 1600, 0, 0, 1603, 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3320, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1801, 540, 540, 540, 1806, 540, 540, 0, 1267, 0, 0, 0, 0, 0, 1267, 0, 0, 1149, 1267, 0, 1274, 540, 540, 540, 540, 1282, 540, 540, 540, 1291, 540, 540, 540, 540, 540, 540, 540, 540, 2204, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2830, 540, 540, 540, 540, 540, 540, 540, 1279, 540, 540, 540, 540, 1285, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2194, 540, 540, 540, 540, 540, 540, 1306, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1317, 540, 540, 540, 540, 540, 2567, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2545, 540, 540, 540, 540, 1321, 540, 540, 540, 540, 540, 540, 540, 1327, 540, 540, 540, 1334, 1336, 540, 540, 540, 540, 1310, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1335, 540, 540, 540, 1360, 914, 1362, 561, 561, 561, 561, 1368, 561, 561, 561, 561, 1374, 561, 561, 561, 561, 1407, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2293, 561, 561, 561, 561, 561, 561, 1406, 561, 561, 561, 561, 1411, 561, 561, 561, 561, 561, 561, 561, 561, 1852, 561, 561, 561, 561, 561, 561, 561, 561, 1866, 561, 561, 561, 561, 561, 561, 561, 1418, 561, 561, 561, 1425, 1427, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1865, 561, 561, 561, 561, 561, 561, 561, 561, 1883, 561, 561, 561, 561, 561, 561, 561, 1459, 585, 585, 585, 585, 1465, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1533, 585, 585, 585, 585, 585, 1486, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1497, 585, 585, 585, 585, 585, 585, 1034, 585, 585, 585, 585, 1052, 585, 585, 585, 561, 1502, 585, 585, 585, 585, 585, 585, 585, 585, 1509, 585, 585, 585, 1516, 1518, 585, 585, 585, 585, 585, 2685, 585, 585, 585, 585, 2689, 585, 585, 585, 2694, 585, 561, 0, 1290, 1544, 1470, 1379, 540, 540, 540, 540, 540, 561, 561, 561, 561, 561, 3249, 561, 3251, 561, 561, 561, 561, 561, 561, 561, 585, 3534, 585, 3535, 585, 585, 585, 3539, 585, 0, 1575, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1632, 0, 0, 0, 0, 0, 1592, 1593, 0, 0, 0, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 1647, 1648, 0, 0, 0, 0, 0, 0, 0, 2387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2987, 0, 0, 0, 0, 0, 2990, 0, 1655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2482, 0, 0, 0, 1721, 0, 0, 0, 0, 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, 300, 300, 300, 300, 0, 300, 300, 300, 300, 300, 540, 540, 540, 1747, 540, 540, 540, 540, 1753, 540, 540, 540, 540, 540, 540, 540, 540, 1817, 540, 540, 540, 540, 540, 540, 1360, 540, 540, 540, 1764, 540, 540, 540, 540, 1768, 540, 540, 540, 540, 540, 540, 540, 540, 2178, 540, 540, 540, 540, 540, 540, 540, 540, 1287, 1294, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1779, 540, 540, 1783, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2206, 2207, 540, 540, 540, 540, 1809, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1379, 561, 0, 1074, 585, 585, 1050, 585, 78112, 1079, 0, 0, 0, 0, 0, 0, 0, 1106, 0, 0, 0, 0, 0, 0, 1210, 0, 561, 1845, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1856, 561, 561, 561, 561, 1423, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3253, 561, 561, 561, 561, 585, 561, 1860, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1871, 561, 561, 561, 561, 1424, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 1920, 585, 585, 585, 585, 1876, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3244, 561, 561, 585, 2026, 585, 585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 2079, 2080, 0, 0, 2082, 2083, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 3306, 0, 0, 0, 0, 0, 0, 2105, 0, 0, 0, 0, 2108, 2109, 0, 0, 0, 0, 0, 0, 301, 301, 301, 301, 0, 301, 301, 301, 301, 301, 2115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 2147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2781, 0, 0, 0, 0, 0, 2157, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 540, 2225, 540, 540, 540, 540, 2230, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 1696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2070, 0, 0, 0, 0, 0, 2242, 0, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2618, 561, 561, 561, 561, 561, 2259, 561, 561, 2263, 561, 561, 561, 2267, 561, 561, 561, 561, 561, 561, 3610, 561, 3611, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 2030, 0, 1082, 0, 0, 0, 2032, 585, 2344, 585, 585, 2348, 585, 585, 585, 2352, 585, 585, 585, 585, 585, 585, 585, 1528, 585, 585, 585, 585, 585, 585, 1538, 585, 585, 585, 585, 2361, 585, 585, 2364, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1935, 1936, 585, 585, 585, 585, 1943, 585, 585, 2400, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 585, 561, 540, 2718, 540, 540, 0, 0, 0, 2437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2794, 0, 0, 0, 0, 2473, 0, 0, 0, 2477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2511, 0, 540, 540, 2525, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2532, 540, 540, 540, 540, 1324, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1330, 540, 540, 540, 540, 540, 540, 2550, 540, 540, 2552, 540, 2553, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2193, 540, 540, 2196, 540, 540, 540, 540, 2563, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2574, 540, 540, 540, 540, 2827, 2828, 540, 540, 540, 540, 2831, 540, 540, 540, 540, 540, 540, 540, 1751, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1351, 540, 540, 540, 540, 540, 540, 0, 0, 0, 561, 561, 2587, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2264, 561, 561, 561, 561, 2269, 561, 561, 561, 2594, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2871, 561, 561, 2609, 561, 561, 561, 2612, 561, 561, 2614, 561, 2615, 561, 561, 561, 561, 561, 929, 561, 937, 561, 561, 561, 561, 561, 561, 561, 561, 2629, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2623, 561, 561, 2627, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2290, 2291, 561, 561, 561, 561, 561, 561, 561, 0, 2327, 585, 585, 585, 585, 585, 585, 585, 1507, 585, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 3284, 540, 3286, 561, 561, 561, 561, 2638, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3099, 561, 561, 561, 0, 0, 2733, 2734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3002, 0, 0, 0, 2785, 0, 2787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2432, 0, 0, 0, 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 3217, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3042, 540, 3044, 540, 540, 540, 540, 540, 540, 2848, 540, 540, 540, 0, 0, 561, 561, 561, 561, 561, 561, 561, 2318, 561, 561, 561, 561, 561, 0, 0, 0, 561, 561, 2859, 561, 2862, 561, 561, 561, 561, 2867, 561, 561, 561, 2870, 561, 561, 561, 561, 2302, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 940, 561, 561, 561, 561, 561, 561, 561, 561, 1394, 561, 561, 561, 561, 561, 561, 561, 1402, 561, 561, 561, 2896, 561, 561, 561, 0, 0, 585, 585, 585, 585, 585, 585, 585, 1529, 585, 585, 585, 585, 585, 585, 585, 585, 2661, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2907, 585, 2910, 585, 585, 585, 585, 2915, 585, 585, 585, 2918, 585, 585, 585, 585, 585, 1527, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2367, 585, 585, 585, 585, 585, 585, 585, 585, 2944, 585, 585, 585, 561, 540, 585, 585, 561, 540, 540, 561, 561, 585, 585, 3373, 0, 0, 0, 3375, 0, 0, 2980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2979, 2991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3005, 0, 3006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2989, 0, 561, 561, 561, 561, 3078, 561, 561, 561, 561, 561, 561, 561, 561, 3086, 561, 561, 561, 561, 2315, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 2327, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3273, 585, 585, 585, 585, 585, 585, 561, 561, 585, 585, 585, 3107, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1969, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3119, 585, 585, 585, 585, 585, 585, 585, 585, 3127, 585, 585, 585, 585, 585, 1901, 540, 585, 585, 561, 540, 540, 540, 540, 561, 561, 3065, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3479, 585, 585, 585, 585, 585, 0, 3159, 0, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 0, 3176, 0, 0, 3304, 0, 0, 0, 0, 0, 0, 3191, 0, 0, 0, 0, 0, 0, 3195, 3196, 0, 0, 0, 0, 540, 540, 3601, 540, 3602, 540, 540, 540, 540, 540, 540, 540, 540, 1752, 540, 540, 540, 540, 540, 540, 540, 540, 1349, 540, 540, 540, 540, 540, 540, 540, 540, 1288, 540, 540, 540, 540, 540, 540, 540, 540, 1289, 540, 540, 540, 540, 540, 540, 540, 540, 1290, 540, 540, 540, 540, 1300, 540, 540, 3279, 585, 585, 585, 585, 585, 585, 585, 561, 540, 585, 561, 540, 540, 561, 561, 561, 561, 2611, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2304, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1853, 561, 561, 561, 561, 561, 561, 540, 540, 540, 540, 3317, 540, 540, 540, 3321, 540, 540, 540, 540, 540, 540, 540, 540, 2192, 540, 540, 540, 540, 540, 540, 2198, 561, 561, 561, 3339, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2628, 561, 561, 561, 561, 561, 561, 561, 561, 2305, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3348, 561, 561, 561, 585, 585, 585, 585, 585, 3353, 585, 585, 585, 3357, 561, 561, 3572, 561, 561, 561, 561, 561, 561, 561, 561, 3580, 585, 585, 585, 3584, 3597, 0, 3598, 3599, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3605, 3606, 540, 540, 540, 540, 2837, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1803, 540, 540, 540, 540, 585, 585, 585, 585, 585, 3619, 3620, 585, 561, 0, 0, 3623, 0, 0, 0, 540, 585, 585, 561, 540, 540, 895, 540, 540, 561, 561, 967, 561, 561, 3671, 585, 3672, 0, 540, 561, 585, 0, 540, 561, 585, 0, 540, 561, 585, 585, 585, 585, 585, 1079, 1559, 0, 0, 0, 1565, 0, 0, 0, 1571, 2033, 0, 0, 0, 0, 1577, 2035, 0, 0, 0, 0, 0, 0, 0, 1682, 0, 1684, 0, 0, 0, 0, 0, 0, 0, 1712, 0, 0, 1715, 0, 0, 0, 0, 0, 355, 356, 0, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2762, 0, 0, 0, 0, 0, 0, 0, 2768, 0, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3198, 0, 540, 540, 473, 473, 487, 0, 0, 487, 356, 356, 356, 509, 356, 356, 356, 356, 473, 473, 580, 580, 580, 580, 580, 580, 580, 604, 604, 604, 557, 604, 604, 604, 604, 604, 580, 580, 557, 580, 604, 580, 604, 1, 12290, 3, 78112, 540, 870, 540, 540, 540, 540, 540, 540, 540, 540, 540, 904, 540, 540, 540, 540, 540, 540, 2191, 540, 540, 540, 540, 2195, 540, 2197, 540, 540, 561, 561, 976, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 1013, 1197, 0, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 540, 540, 540, 540, 540, 540, 540, 1360, 914, 561, 561, 561, 561, 561, 561, 561, 561, 1371, 561, 561, 561, 1380, 561, 561, 561, 561, 2639, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2644, 561, 561, 561, 561, 585, 585, 585, 1462, 585, 585, 585, 1471, 585, 585, 585, 585, 585, 585, 585, 585, 1472, 585, 1477, 585, 585, 1481, 585, 585, 1541, 561, 0, 1291, 585, 1471, 1380, 540, 540, 540, 540, 540, 561, 561, 561, 561, 585, 585, 585, 585, 0, 0, 0, 0, 2727, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 1582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2737, 0, 0, 0, 0, 0, 2741, 0, 1607, 0, 0, 0, 0, 0, 0, 0, 1615, 1616, 0, 0, 0, 0, 0, 0, 303, 204800, 204800, 0, 205103, 204800, 1, 12290, 3, 0, 1761, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 1774, 1891, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3087, 561, 561, 561, 561, 1911, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 585, 585, 1466, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2928, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1947, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2001, 585, 585, 585, 585, 585, 585, 585, 1960, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1973, 0, 0, 2243, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2634, 561, 561, 2328, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2384, 0, 0, 0, 0, 2425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2085, 2086, 0, 0, 0, 0, 2449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3175, 0, 0, 0, 0, 561, 561, 561, 561, 561, 561, 2590, 561, 561, 561, 561, 561, 561, 2289, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2292, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2861, 561, 2863, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2877, 561, 561, 561, 561, 561, 561, 561, 561, 1899, 561, 561, 561, 561, 561, 1905, 561, 585, 585, 585, 2909, 585, 2911, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1984, 585, 585, 585, 585, 585, 585, 585, 3360, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1056, 585, 561, 0, 3556, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3567, 540, 561, 561, 561, 561, 2876, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 26027, 0, 585, 585, 585, 585, 561, 561, 561, 561, 3656, 561, 585, 585, 585, 585, 3660, 585, 0, 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147354, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2509, 0, 0, 357, 0, 367, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2457, 0, 0, 581, 581, 581, 581, 581, 581, 581, 605, 605, 605, 558, 605, 605, 605, 605, 605, 581, 581, 558, 581, 605, 581, 605, 1, 12290, 3, 78112, 865, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2575, 1385, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3243, 561, 1775, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3047, 585, 585, 585, 585, 1961, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2380, 585, 585, 585, 585, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3315, 0, 2981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3188, 0, 3298, 0, 3299, 0, 0, 0, 0, 3176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3388, 0, 0, 0, 0, 358, 359, 360, 361, 0, 0, 362, 0, 290, 0, 0, 0, 0, 0, 0, 2973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 362, 702, 0, 0, 0, 0, 359, 0, 358, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 425, 65536, 0, 0, 0, 0, 1710, 1711, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 1718, 425, 425, 0, 425, 0, 359, 425, 0, 456, 0, 0, 0, 0, 0, 0, 0, 1102, 0, 0, 0, 0, 1263, 1264, 0, 0, 0, 0, 0, 497, 497, 0, 504, 504, 504, 504, 510, 511, 504, 504, 524, 524, 524, 524, 456, 456, 456, 456, 456, 456, 456, 456, 524, 524, 524, 524, 524, 524, 524, 559, 582, 559, 582, 559, 559, 582, 559, 606, 582, 582, 582, 582, 582, 582, 582, 606, 606, 606, 559, 606, 606, 606, 606, 606, 582, 582, 620, 625, 606, 625, 631, 1, 12290, 3, 78112, 0, 0, 0, 540, 585, 585, 561, 540, 540, 900, 540, 540, 561, 561, 972, 561, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 1934, 585, 585, 585, 585, 585, 585, 585, 0, 0, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2740, 0, 0, 0, 0, 0, 561, 2245, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3533, 585, 585, 585, 585, 585, 585, 585, 585, 585, 3494, 561, 0, 0, 0, 0, 0, 0, 585, 2330, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 1482, 585, 585, 540, 2549, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2237, 0, 540, 540, 2577, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 0, 0, 0, 0, 0, 1611, 0, 0, 1614, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2891776, 0, 0, 0, 0, 0, 2392064, 583, 583, 583, 583, 583, 583, 583, 607, 607, 607, 560, 607, 607, 607, 607, 607, 583, 583, 560, 583, 607, 583, 607, 1, 12290, 3, 78112, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 866, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 3224, 1136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 362, 0, 0, 0, 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 786, 561, 585, 585, 585, 585, 585, 1079, 1560, 0, 0, 0, 1566, 0, 0, 0, 1572, 0, 0, 0, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3313, 0, 0, 540, 2199, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2547, 540, 2535, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 2822, 540, 561, 561, 561, 2597, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2317, 561, 561, 2320, 2321, 561, 561, 0, 0, 0, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 743, 540, 540, 540, 540, 540, 540, 540, 3331, 540, 540, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3072, 561, 561, 561, 0, 0, 0, 540, 585, 585, 561, 1064, 540, 540, 905, 540, 1069, 561, 561, 977, 561, 561, 561, 561, 0, 585, 585, 585, 585, 585, 585, 585, 585, 1951, 585, 585, 585, 585, 585, 585, 585, 0, 0, 1594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2767, 0, 0, 561, 561, 1846, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2645, 561, 561, 585, 585, 585, 1977, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2692, 585, 585, 585, 540, 540, 540, 2188, 540, 2190, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 561, 561, 561, 3334, 561, 561, 0, 0, 0, 561, 561, 561, 2247, 561, 561, 561, 561, 561, 561, 561, 561, 561, 2613, 561, 561, 561, 561, 561, 561, 561, 2619, 561, 561, 2273, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 3242, 561, 561, 0, 585, 585, 585, 2332, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2408, 540, 585, 585, 561, 561, 2647, 0, 0, 0, 0, 0, 0, 585, 585, 585, 585, 585, 585, 585, 585, 2687, 585, 585, 2691, 585, 585, 585, 585, 585, 585, 585, 585, 2684, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 2916, 585, 585, 585, 585, 561, 561, 585, 585, 585, 585, 585, 3109, 585, 585, 585, 585, 585, 585, 585, 585, 2702, 585, 585, 585, 585, 585, 585, 585, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225706, 0, 0, 1134592, 0, 0, 0, 1134592, 1134592, 0, 0, 1134592, 0, 0, 1134592, 0, 1134592, 0, 0, 0, 1134592, 1135005, 1135005, 0, 0, 0, 0, 0, 1135005, 0, 1134592, 1134592, 0, 0, 0, 0, 1135202, 1135202, 1135202, 1135202, 1134592, 1135202, 1135202, 1135202, 1135202, 1135202, 0, 1134592, 1134592, 1134592, 1134592, 1135202, 1134592, 1135202, 1, 12290, 3, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 1138688, 0, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2125824, 2126738, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 987, 2125824, 2125824, 2125824, 2125824, 2424832, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 1147354, 457, 457, 1147354, 457, 457, 457, 457, 457, 457, 457, 457, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 1147405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2792, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 1147354, 1147354, 1147354, 1147405, 1147405, 1147354, 1147405, 1147405, 1, 12290, 3, 0, 0, 0, 0, 2042, 0, 0, 2045, 2046, 0, 0, 0, 2050, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 1142784, 0, 2179072, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3137536, 2125824, 2940928, 2940928, 2940928, 0, 0, 0, 0, 0, 0, 305, 440, 448, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 1159168, 0, 0, 1159168, 0, 1159168, 1159168, 0, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2802, 0, 540, 540, 540, 540, 540, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1, 12290, 3, 0, 0, 0, 0, 2053, 0, 2054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799, 0, 799, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163264, 0, 0, 0, 0, 0, 155648, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 913, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 1452, 2125824, 2125824, 2125824, 2125824, 2424832, 106496, 0, 106496, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2782, 2783, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163840, 0, 0, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 0, 0, 0, 0, 0, 2953216, 0, 0, 2826240, 2875392, 0, 0, 0, 0, 0, 0, 2834432, 0, 3227648, 2568192, 0, 0, 0, 0, 2564096, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2654208, 2678784, 2760704, 2764800, 2785280, 2854912, 2969600, 2125824, 3006464, 2125824, 3018752, 2125824, 2125824
-];
-
-XQueryParser.EXPECTED =
-[ 260, 268, 276, 283, 296, 304, 881, 312, 318, 331, 366, 339, 350, 361, 369, 342, 288, 886, 1555, 1545, 377, 384, 1551, 392, 400, 415, 423, 431, 439, 447, 455, 463, 486, 553, 490, 500, 500, 499, 498, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 353, 1871, 509, 517, 525, 1149, 688, 533, 1759, 407, 548, 949, 561, 323, 569, 1480, 1303, 866, 577, 1034, 592, 596, 1439, 1444, 604, 1857, 628, 636, 644, 1919, 1049, 652, 673, 660, 668, 681, 696, 995, 710, 718, 731, 1324, 739, 761, 1116, 776, 784, 792, 1170, 1200, 1204, 807, 843, 851, 859, 894, 902, 910, 723, 918, 926, 934, 942, 753, 957, 1568, 965, 980, 611, 988, 1738, 1003, 1011, 616, 1185, 1827, 871, 1539, 1029, 1042, 1418, 584, 1424, 972, 1057, 1065, 1073, 1598, 1087, 1095, 1103, 1111, 1134, 1142, 768, 478, 1163, 1289, 620, 1155, 1178, 876, 1620, 1643, 1193, 702, 1812, 799, 1789, 1212, 1753, 1218, 1226, 1234, 1242, 500, 1250, 1258, 828, 1266, 1274, 1282, 1297, 1850, 1311, 1319, 1332, 1079, 540, 1345, 1017, 1337, 1359, 1021, 1367, 1375, 1390, 1398, 1403, 1411, 1432, 1452, 1460, 1468, 1476, 1488, 1496, 1382, 1516, 1524, 1532, 1563, 1576, 746, 1584, 1592, 1502, 1606, 1614, 814, 1628, 1636, 469, 821, 1661, 1665, 1673, 1678, 1686, 1694, 1702, 1710, 1718, 501, 1726, 1734, 1746, 1767, 1775, 1783, 1351, 1126, 1797, 1805, 1121, 835, 1820, 474, 1835, 1843, 1865, 1508, 1879, 1649, 1653, 1887, 1892, 1900, 1908, 1916, 500, 500, 1927, 1975, 1928, 1939, 1939, 1939, 1934, 1938, 1939, 1930, 1943, 1950, 1946, 1954, 1958, 1961, 1964, 1968, 1972, 1979, 2007, 2007, 2007, 3094, 2007, 1983, 3521, 2007, 2812, 2007, 2007, 2007, 2007, 2779, 2007, 2007, 2132, 2007, 4152, 3820, 3824, 1987, 2098, 1994, 2000, 2006, 2007, 2007, 3996, 2007, 2007, 2012, 4079, 3820, 3824, 3824, 3824, 3824, 2019, 2097, 2097, 2026, 2170, 2032, 2007, 2007, 2007, 2007, 2919, 2007, 2428, 3887, 2007, 3734, 2038, 2089, 2007, 2007, 2007, 3390, 3824, 3824, 2045, 2097, 2097, 2097, 2097, 2097, 2099, 1996, 2067, 2059, 2063, 2003, 2007, 2007, 2007, 2007, 2007, 2259, 3005, 2007, 3049, 2007, 2007, 2007, 3818, 3820, 3820, 3820, 3820, 2133, 3824, 3824, 3824, 3824, 3824, 2055, 3820, 2139, 3824, 3824, 3824, 3827, 2097, 2097, 2022, 2072, 2007, 2007, 4080, 2007, 2162, 2077, 2007, 2007, 2779, 3400, 3820, 3820, 2053, 3824, 3825, 2097, 2097, 2084, 2072, 2088, 4151, 2385, 2007, 2007, 2007, 2007, 3112, 2752, 3820, 2052, 3824, 2095, 2097, 2104, 2778, 2050, 3823, 2095, 2115, 2129, 3821, 3826, 1989, 3390, 3822, 3827, 1990, 2137, 2141, 2149, 3819, 2141, 2159, 2167, 2048, 2174, 2028, 2181, 2184, 2188, 2192, 2202, 2202, 2193, 2197, 2201, 2203, 2207, 2211, 2215, 2219, 2222, 2226, 2230, 2234, 2238, 2732, 2242, 2007, 2007, 2737, 2247, 2007, 2007, 2007, 3028, 4134, 2007, 2007, 2007, 3213, 2007, 2007, 2007, 2007, 2702, 3310, 2007, 3694, 2243, 2007, 4531, 2253, 2007, 2007, 2007, 2007, 2007, 4488, 2007, 2007, 2007, 4489, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 4297, 2280, 2282, 2286, 2289, 2293, 2297, 2301, 2662, 2386, 2007, 2007, 2007, 2007, 2387, 2307, 2314, 2318, 4376, 4208, 2325, 2681, 3075, 3584, 2645, 2353, 2359, 2620, 2007, 2007, 2381, 2363, 2007, 2007, 3675, 2007, 3534, 4411, 3291, 4070, 3348, 2391, 2007, 2395, 2399, 2007, 2007, 2007, 2007, 3092, 3298, 2007, 2007, 2402, 2007, 2007, 2007, 3382, 2007, 2007, 2418, 3423, 2432, 2007, 2007, 2007, 2007, 2797, 2433, 2797, 2457, 2007, 2007, 2007, 2007, 2463, 2007, 2007, 3716, 3131, 2917, 2007, 2007, 3777, 4457, 4344, 2470, 2007, 2007, 2007, 2477, 2007, 2007, 2007, 2484, 2007, 2107, 3702, 2007, 3700, 2493, 2007, 2111, 2007, 2007, 3723, 3037, 2007, 2007, 2007, 2090, 3072, 2007, 2007, 2007, 2007, 2261, 3346, 2007, 2007, 2500, 2007, 2505, 4255, 4115, 4254, 2007, 4238, 2510, 4117, 3651, 3491, 2511, 4118, 4239, 4255, 3650, 4117, 2516, 4116, 4117, 3593, 3670, 3596, 2528, 2531, 2535, 2538, 2542, 2007, 3509, 2620, 4365, 4173, 2562, 2566, 2570, 2007, 2674, 2672, 3782, 2574, 2007, 3457, 2579, 2007, 2501, 2007, 4424, 3255, 2555, 2588, 4214, 4424, 4450, 2584, 2592, 2599, 3102, 4176, 2007, 2007, 3778, 2008, 2342, 4482, 2348, 4126, 4353, 2007, 2007, 2007, 2721, 2607, 2007, 2007, 2007, 3379, 2007, 2007, 2007, 3480, 2619, 2007, 4362, 2007, 4150, 4231, 2625, 4223, 2632, 2636, 2007, 4444, 2654, 2007, 2007, 2007, 2007, 3897, 2007, 2007, 4225, 2675, 2642, 2007, 2007, 2007, 2007, 4443, 2653, 4024, 2007, 4424, 4341, 2118, 4304, 2679, 2007, 2007, 3794, 2734, 2268, 4056, 2403, 2007, 2007, 3896, 2007, 2655, 2910, 4541, 3011, 2685, 2775, 2007, 2007, 2007, 3576, 2686, 2007, 2007, 4010, 3290, 2007, 2007, 3151, 3295, 3238, 2007, 2697, 2007, 3451, 2403, 4245, 2586, 4285, 2701, 3577, 2715, 2007, 2007, 2007, 3620, 2706, 2007, 2007, 2007, 2007, 2713, 2775, 2007, 2007, 4082, 3399, 2007, 2007, 4082, 3399, 2741, 2769, 2855, 2774, 2007, 3410, 2751, 2007, 2007, 4104, 2007, 2007, 2007, 2007, 2506, 4140, 4109, 4114, 3788, 2803, 4147, 2007, 2007, 4385, 3699, 2007, 3534, 4411, 2007, 2041, 4469, 4448, 2007, 2007, 2007, 2709, 3410, 2751, 2702, 2784, 3450, 4048, 2121, 2770, 3436, 2007, 3434, 3438, 2007, 2791, 2007, 2795, 2801, 2328, 2810, 2787, 2452, 2816, 2453, 2007, 2443, 2450, 2424, 2465, 2007, 2007, 2007, 2007, 3098, 2007, 2007, 2007, 2007, 3372, 2007, 2007, 2007, 2007, 3389, 3820, 3820, 3820, 2163, 3824, 3824, 3824, 3824, 4039, 2821, 2787, 2832, 2786, 3985, 2838, 2843, 4030, 3312, 2839, 2844, 4031, 4431, 2848, 2834, 2852, 2859, 2860, 2177, 2864, 3301, 4460, 4463, 2871, 4547, 2875, 2879, 2883, 2886, 2890, 2894, 2897, 2899, 2900, 2007, 2007, 2904, 2007, 3808, 2910, 4541, 3081, 2914, 2007, 2007, 2924, 2928, 2937, 2944, 2952, 2961, 2968, 3274, 2970, 2007, 2473, 2408, 2007, 2007, 2007, 2007, 2414, 3024, 2007, 2495, 2976, 2980, 4495, 4081, 2986, 2999, 2007, 2007, 2007, 2007, 2007, 3335, 2007, 2489, 2007, 3285, 2007, 3286, 2007, 3109, 2656, 3009, 3015, 3021, 3139, 2007, 4251, 2344, 3032, 2007, 2007, 2007, 2007, 3722, 3036, 2007, 2612, 2007, 2007, 3782, 2574, 2007, 3508, 4541, 3046, 3053, 2702, 3058, 2007, 2007, 3062, 3067, 2007, 2007, 2007, 2007, 3063, 2007, 2007, 2007, 3691, 2007, 2007, 2007, 2007, 2338, 3741, 2007, 2007, 3119, 2007, 2007, 2007, 3125, 2007, 2007, 2007, 2550, 4047, 2007, 2007, 2920, 3125, 2007, 2007, 3428, 4501, 2355, 3026, 2007, 2615, 2654, 4143, 3807, 3464, 2520, 2524, 3111, 2918, 2007, 3114, 3109, 3780, 3113, 3150, 3110, 3781, 3147, 4236, 3779, 2920, 3137, 2919, 2920, 3489, 4183, 3144, 3155, 2155, 2007, 2007, 2007, 4522, 3741, 2007, 3667, 2007, 3121, 3163, 3167, 3171, 3175, 3179, 3183, 3187, 3191, 2007, 2007, 2817, 3354, 2007, 2765, 3195, 3974, 3201, 3218, 4237, 3222, 3226, 3236, 4136, 3242, 3713, 3038, 3248, 3246, 2007, 2007, 2007, 2575, 2690, 2007, 2007, 2007, 2007, 4428, 2007, 2007, 2007, 2249, 4402, 4409, 2007, 2007, 3231, 3253, 2007, 2765, 3195, 3974, 3259, 3475, 4398, 3265, 3269, 3278, 2007, 2007, 3282, 2007, 2647, 2638, 3815, 3004, 2336, 2007, 2007, 2007, 3352, 2007, 2765, 3195, 2780, 3316, 2068, 3260, 3320, 3417, 3327, 3333, 2007, 2719, 3457, 2007, 2725, 2730, 2741, 4471, 3360, 3364, 3407, 2007, 2007, 2007, 3368, 2007, 2736, 3608, 3079, 3085, 3140, 2702, 4437, 3054, 3399, 2007, 2007, 2007, 4081, 3398, 2007, 2745, 2007, 2007, 3576, 2749, 2007, 2007, 2719, 2756, 2763, 3971, 3448, 2007, 2007, 3455, 2007, 2007, 3455, 2007, 2255, 2007, 3975, 3472, 3484, 2007, 3497, 2971, 3449, 2972, 2007, 3503, 3273, 4555, 4530, 4554, 3513, 4094, 4553, 3271, 4553, 4095, 4554, 3272, 4093, 4528, 3271, 3515, 4528, 4529, 2007, 4379, 2620, 3519, 2007, 3525, 4151, 3529, 3538, 3542, 3546, 3550, 3554, 3558, 3562, 3566, 2828, 3729, 2918, 2410, 4192, 3571, 3230, 4556, 3575, 3581, 3356, 3619, 3590, 2007, 2007, 4378, 3676, 2007, 3534, 4488, 2007, 2948, 3600, 2007, 2867, 3355, 2007, 2007, 2007, 2007, 3339, 4185, 3612, 2007, 2007, 2580, 3618, 2007, 2007, 2549, 2551, 2386, 2007, 2007, 3132, 3630, 2007, 2007, 2608, 3641, 2007, 3647, 4412, 2007, 3655, 3866, 3249, 3663, 2007, 2007, 2007, 2660, 2007, 2007, 2666, 2007, 4405, 2007, 2007, 2007, 2007, 2337, 3687, 2007, 2594, 3230, 4081, 3698, 2007, 2805, 3682, 2007, 2007, 2007, 3686, 2007, 2007, 2824, 2007, 2007, 2007, 2007, 2826, 4487, 2995, 2957, 2349, 3606, 2007, 2007, 3706, 2007, 4081, 3710, 2007, 2595, 2007, 3720, 4485, 2946, 3727, 3068, 3733, 2007, 3738, 2620, 2007, 2940, 2777, 3753, 3945, 3949, 3954, 3868, 2007, 3747, 2620, 2007, 2007, 3747, 2620, 3751, 2378, 2034, 3757, 3764, 3636, 2007, 4288, 2007, 2007, 4288, 3428, 3769, 2466, 2015, 3765, 3773, 2007, 3786, 2007, 3127, 2007, 2954, 2007, 2007, 3775, 2007, 2007, 3775, 2007, 2007, 2956, 2007, 2548, 2459, 2007, 3792, 3751, 3798, 3760, 3637, 2602, 2007, 3149, 4508, 2110, 2488, 2007, 3701, 2494, 2007, 2007, 4046, 2007, 3780, 2603, 2007, 3802, 3806, 3812, 3837, 4356, 3836, 3831, 2331, 3835, 3677, 3841, 2332, 3836, 3678, 4221, 3854, 3848, 4359, 3847, 3845, 3852, 3877, 3863, 3874, 3881, 3884, 2007, 2007, 2007, 2007, 2480, 2437, 2007, 2007, 2964, 2776, 2007, 3893, 3901, 3905, 3909, 3913, 3917, 3921, 3925, 3929, 3933, 3937, 2007, 2007, 2982, 4068, 4074, 4253, 2007, 2007, 3212, 4493, 2007, 2007, 2007, 2248, 3959, 3964, 3968, 4202, 3979, 3983, 3989, 3950, 2007, 4000, 4007, 4014, 2007, 2007, 2963, 2421, 3753, 4019, 4023, 2040, 3626, 4028, 4035, 2007, 3229, 3106, 3743, 3026, 2726, 2007, 2007, 2007, 4080, 2007, 4152, 3820, 3820, 2054, 3824, 3824, 2096, 2097, 2097, 2097, 2097, 2100, 2143, 4043, 2007, 2007, 3205, 3209, 2007, 2007, 2007, 2990, 2994, 2007, 2007, 2248, 3207, 2007, 2007, 2007, 3197, 4052, 2310, 4253, 4060, 2669, 2007, 4114, 2007, 2007, 2007, 2628, 3210, 2007, 2007, 2007, 2506, 4064, 2007, 2007, 3232, 3254, 3975, 2007, 4119, 3159, 2962, 4078, 3753, 4086, 2404, 2007, 4090, 2620, 4114, 2007, 2007, 2007, 4099, 2620, 2007, 2007, 3376, 2007, 2007, 2007, 2007, 2933, 4100, 4108, 4113, 2007, 2439, 4123, 3603, 4423, 2007, 3870, 3133, 2007, 2007, 2007, 4130, 2007, 3386, 2068, 4158, 3394, 3506, 2007, 2007, 2007, 4526, 2007, 2007, 2007, 4526, 2007, 3992, 2370, 4535, 4156, 2920, 2007, 2007, 4162, 2007, 2007, 2007, 4162, 2558, 2007, 4166, 4170, 2007, 4180, 2007, 2007, 4189, 2007, 2007, 4196, 4200, 4206, 4212, 3859, 4218, 2007, 2693, 2007, 2007, 4229, 2007, 3586, 2152, 2145, 4235, 3487, 2007, 4243, 3642, 2775, 3643, 4249, 4440, 2806, 3659, 4259, 4264, 3657, 3857, 3940, 2080, 3658, 3858, 3941, 4274, 3939, 3857, 4278, 3856, 3857, 4282, 3017, 4292, 4293, 4270, 2321, 4301, 4003, 4311, 4315, 4319, 4323, 4327, 4330, 4334, 4338, 2007, 2007, 2007, 2007, 2621, 3230, 3492, 3042, 4267, 3478, 2931, 3955, 4350, 4514, 4396, 3306, 3462, 3468, 3444, 2007, 4516, 2007, 2007, 2446, 2007, 2007, 2007, 2759, 2375, 3002, 4369, 4307, 2007, 4015, 2007, 2546, 2544, 4373, 4383, 2007, 2007, 2007, 4389, 3478, 2931, 2068, 3670, 3532, 4437, 2007, 4393, 2007, 2007, 3427, 3432, 2303, 3443, 3422, 2007, 2007, 4416, 4081, 2007, 2091, 3671, 3422, 3203, 4420, 2007, 2007, 2007, 2007, 2007, 3342, 2007, 3388, 3404, 3414, 3421, 2007, 2254, 3381, 3994, 2931, 4346, 4454, 4260, 3567, 3304, 2007, 3439, 3100, 2007, 2007, 2007, 2007, 3089, 2007, 4467, 2007, 2007, 2007, 2007, 2007, 3214, 2124, 2007, 2007, 4475, 2365, 3889, 3499, 2007, 3616, 2007, 2007, 2007, 2337, 3624, 2007, 2906, 2007, 3329, 3633, 2007, 2499, 3960, 4434, 2007, 2007, 2007, 2007, 4479, 2007, 2007, 3493, 2265, 2007, 2272, 3323, 2276, 4499, 2125, 2007, 4505, 2367, 4512, 2007, 4520, 2512, 2007, 2007, 3211, 4539, 2007, 3211, 4539, 2073, 4037, 4454, 2007, 2007, 2007, 4545, 2007, 2649, 2007, 2007, 4551, 3115, 4157, 3422, 2007, 2369, 2007, 2370, 2007, 2371, 3261, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 3458, 2007, 2007, 2080, 4576, 4599, 4601, 4601, 4596, 4590, 4601, 4601, 5213, 4588, 4600, 4601, 4601, 4601, 4601, 4601, 4601, 4605, 4601, 4601, 4624, 4632, 4592, 4611, 4609, 4615, 4626, 4639, 4641, 4646, 4628, 4651, 4653, 4653, 4647, 4635, 4657, 4642, 4661, 4665, 4669, 4673, 4676, 4680, 4682, 4686, 4690, 4560, 6008, 4569, 4572, 6007, 4694, 4697, 4751, 6953, 4752, 5681, 6931, 4707, 6326, 4735, 4735, 4712, 4752, 4752, 5273, 4792, 6322, 4707, 4735, 5096, 4719, 4736, 5094, 5098, 4748, 4748, 4750, 4752, 4752, 4752, 4752, 4564, 5125, 5113, 4729, 5190, 6233, 4752, 5981, 4707, 4707, 4734, 4735, 4711, 4791, 6324, 5279, 4792, 6322, 4707, 4735, 6320, 4748, 4749, 4752, 4752, 4582, 6339, 6230, 4730, 5190, 4752, 4752, 4752, 6892, 4707, 4707, 6327, 4735, 4714, 6320, 6322, 6322, 6322, 6324, 4707, 4707, 4707, 4710, 4735, 4793, 4788, 6324, 4709, 4765, 5096, 5096, 4748, 4752, 4752, 4752, 4758, 4721, 4752, 4752, 4752, 4777, 4792, 4788, 4709, 4752, 4561, 4752, 5750, 4735, 4735, 4794, 6324, 4752, 5743, 4752, 4752, 4752, 4757, 4752, 4707, 4709, 4735, 4735, 4735, 4735, 4711, 4791, 6322, 4792, 5276, 4722, 4752, 4563, 5399, 6420, 4752, 6238, 5201, 5242, 4735, 4735, 4785, 4752, 4563, 5663, 4752, 4563, 6254, 5386, 5386, 5386, 4752, 4752, 4752, 5746, 4752, 6321, 6322, 6322, 6322, 6323, 6320, 6322, 6322, 6323, 4707, 4707, 4707, 4735, 4752, 4752, 4584, 5193, 4735, 4735, 4713, 4752, 4563, 6913, 6240, 6240, 6240, 6929, 4735, 4735, 4714, 5739, 6322, 6322, 6322, 6325, 6322, 6324, 4707, 4710, 4740, 5096, 5097, 4707, 4709, 4735, 4752, 4698, 4752, 6653, 4709, 5467, 5467, 5467, 4752, 5513, 5517, 5483, 4804, 4818, 4798, 4802, 4844, 4844, 4844, 4808, 4815, 4812, 4828, 4832, 4842, 4844, 4844, 4844, 4844, 4845, 4838, 4926, 4844, 4852, 4850, 4913, 4853, 4857, 4861, 4865, 4835, 4869, 4872, 4879, 4876, 4881, 4883, 4887, 4889, 4891, 4893, 4900, 4900, 4897, 4907, 4910, 4923, 4846, 4916, 4919, 4930, 4933, 4935, 4939, 4903, 4943, 4752, 4752, 4752, 4948, 4715, 4752, 4752, 4752, 4977, 6877, 4954, 4752, 4752, 4752, 4978, 6115, 4759, 4759, 4752, 4752, 4753, 6060, 5603, 6128, 4975, 4752, 4714, 4752, 6620, 4752, 6554, 6723, 6126, 4984, 5424, 5283, 4988, 4992, 4993, 4993, 4993, 4997, 5000, 5002, 5006, 5009, 5013, 5017, 5017, 5019, 5023, 5024, 5028, 5030, 5034, 5038, 5037, 5042, 5046, 4752, 4752, 4760, 5740, 4752, 5065, 4752, 5423, 4752, 4725, 4724, 4723, 4565, 5750, 4752, 5657, 4752, 5671, 5072, 4752, 4743, 4752, 5390, 5082, 4752, 6010, 4752, 4751, 5572, 6253, 5505, 4752, 5971, 6389, 5056, 4752, 4752, 4752, 5074, 5535, 6350, 4752, 4752, 6930, 5401, 4752, 5494, 4752, 4752, 4752, 5125, 4752, 6136, 6009, 4752, 5110, 6936, 6567, 5134, 5141, 5150, 5143, 5152, 4752, 4752, 4754, 4752, 4752, 4752, 4755, 4752, 4752, 4752, 4752, 6233, 6232, 4752, 4752, 6347, 4752, 4752, 6356, 5137, 5161, 5250, 4752, 4752, 4752, 5060, 6584, 5222, 5223, 5186, 4752, 6234, 5190, 6523, 5174, 5165, 5171, 5181, 4752, 4752, 4752, 5190, 4752, 5143, 5180, 4752, 4752, 4756, 6223, 4752, 6358, 5781, 5171, 4752, 6600, 5055, 5251, 4752, 5745, 4752, 4752, 6357, 5166, 4752, 5700, 4752, 6585, 5199, 5167, 5205, 5153, 4752, 5211, 5207, 4752, 4752, 4757, 5714, 4752, 5698, 4752, 5191, 5136, 5142, 5151, 5221, 6420, 4752, 4752, 4757, 5946, 5568, 5167, 6098, 6009, 4752, 5973, 4752, 5175, 5166, 6097, 5153, 4752, 4752, 4583, 6238, 5201, 5241, 4752, 4752, 6357, 5780, 6547, 5167, 5243, 4752, 4752, 6357, 5781, 4960, 4752, 6600, 5250, 5242, 4752, 4752, 4752, 5291, 5782, 5243, 4752, 4752, 4752, 5293, 6836, 6078, 4752, 4752, 4752, 5346, 5256, 4752, 4752, 4752, 5355, 4752, 6927, 4752, 4752, 4752, 5377, 5972, 4752, 4752, 6928, 5301, 5305, 5306, 5306, 5307, 5306, 5306, 5311, 5314, 5316, 5318, 5320, 5320, 5320, 5320, 5321, 5325, 5325, 5325, 5327, 5325, 5325, 5331, 5331, 4752, 4752, 4761, 6855, 4752, 4752, 4960, 4752, 4752, 4752, 5217, 4752, 6405, 5353, 5571, 4752, 6913, 6240, 5376, 5259, 4752, 5068, 5397, 4752, 5067, 5385, 5396, 4752, 6696, 6700, 5406, 4752, 4752, 4752, 5471, 5263, 4752, 4752, 4752, 5531, 6256, 5416, 4752, 5572, 4752, 5665, 4752, 5365, 4752, 5664, 4752, 4752, 4961, 4961, 4961, 5670, 4752, 6018, 4752, 4752, 6375, 6009, 4752, 6535, 4752, 4752, 4752, 5581, 5083, 5429, 6534, 4752, 4752, 6428, 6383, 5341, 6009, 4752, 4752, 4752, 5187, 5417, 4752, 5573, 4753, 5358, 6639, 6644, 6017, 4752, 6260, 6601, 4752, 6413, 4752, 4752, 4968, 5118, 5439, 5444, 5449, 4752, 4752, 6578, 5109, 4752, 4752, 4753, 6958, 5445, 5153, 4752, 4752, 4752, 5387, 6259, 6593, 5458, 4752, 4752, 5050, 5054, 5721, 5336, 5342, 4752, 4752, 6591, 4752, 4752, 6698, 4752, 4752, 4752, 5434, 5465, 6603, 4752, 4752, 5080, 4752, 6569, 5473, 5477, 5445, 6429, 5475, 5869, 5481, 4752, 4752, 6717, 6721, 4752, 5720, 5335, 5491, 6602, 4752, 4752, 4752, 5747, 5525, 5477, 5500, 4752, 4752, 6740, 6908, 6569, 5524, 5476, 5499, 6429, 4752, 4752, 6712, 4752, 4752, 5084, 5430, 6860, 4752, 4752, 4752, 5748, 5187, 4752, 4752, 5223, 4752, 5745, 6422, 4752, 4752, 4752, 6219, 4752, 5571, 4752, 5665, 6571, 5548, 5869, 5516, 5812, 5477, 5871, 4752, 4752, 4752, 5750, 5720, 5335, 5504, 4752, 4752, 6868, 5157, 4752, 6861, 4752, 4752, 5111, 6426, 5386, 5748, 5510, 4752, 4752, 5870, 6429, 4752, 4752, 4752, 5746, 4752, 4752, 4752, 4760, 5529, 4752, 4752, 5560, 5567, 4752, 4752, 4757, 5546, 5554, 6429, 4752, 6713, 4752, 4752, 5191, 5176, 5559, 5113, 4752, 4752, 5192, 4752, 4752, 4752, 6727, 4752, 6319, 4752, 4752, 5228, 4752, 5568, 4752, 4752, 4752, 5811, 5225, 6277, 5386, 4752, 4752, 6874, 6878, 4752, 4752, 6206, 4752, 5720, 5814, 5569, 4752, 5687, 5691, 5225, 6255, 6934, 5689, 5570, 5570, 4752, 5944, 5690, 4752, 5689, 5570, 4752, 5688, 4752, 6238, 5563, 4752, 4753, 5522, 5548, 5687, 5577, 4752, 5687, 5577, 6238, 5401, 6651, 4752, 4753, 6054, 6070, 5386, 6364, 5586, 6009, 6256, 5600, 4752, 6419, 5378, 5602, 5607, 5620, 5611, 5619, 5614, 5615, 5615, 5615, 5615, 5624, 5631, 5628, 5635, 5637, 5637, 5637, 5642, 5638, 5646, 5646, 5646, 5646, 4752, 4752, 6449, 4752, 4752, 5247, 5251, 6259, 4778, 5412, 6009, 4752, 5705, 4752, 6945, 4752, 4752, 4752, 6239, 4752, 4752, 5678, 4752, 4752, 5650, 4752, 5656, 5652, 4752, 4756, 4752, 4752, 6103, 4752, 5661, 5669, 5675, 4752, 4757, 5847, 5927, 4752, 5685, 4752, 6232, 4752, 5377, 6310, 4752, 4752, 5695, 4752, 4752, 5289, 5389, 4752, 4752, 5957, 6439, 4752, 4752, 4752, 5845, 5211, 5251, 4752, 6437, 6441, 4752, 4752, 4752, 5860, 4581, 5709, 4752, 4752, 5227, 4752, 5718, 4752, 4752, 5356, 6055, 5761, 5726, 5732, 5738, 4752, 5759, 5763, 5728, 5734, 4752, 4752, 4752, 5980, 5762, 5727, 5733, 4752, 4758, 4752, 4752, 6124, 5052, 5056, 4779, 6862, 4752, 4752, 5380, 5228, 4752, 5767, 6936, 4752, 6937, 6934, 5378, 4752, 5228, 5704, 4752, 4752, 6947, 4752, 4752, 5356, 5549, 5774, 5786, 6683, 5251, 5787, 6684, 4752, 4752, 4752, 5990, 6258, 4778, 5412, 6009, 4752, 6557, 5986, 4752, 4775, 4752, 5744, 6946, 4752, 4752, 4752, 6094, 6233, 4752, 4752, 5791, 4752, 5805, 6900, 6682, 6686, 6686, 4752, 4752, 4752, 6117, 5774, 6902, 6684, 4752, 4950, 5088, 5102, 5411, 6870, 4752, 4752, 5380, 6635, 5768, 6937, 5802, 4744, 5810, 6902, 6685, 4752, 4959, 4752, 4752, 4702, 4752, 4752, 5809, 6901, 5818, 4752, 4752, 5421, 4954, 4752, 5798, 4780, 6870, 5972, 4752, 4752, 4752, 6241, 4752, 4752, 4752, 5188, 6000, 5824, 5251, 4752, 4752, 5842, 5822, 5828, 4752, 4752, 5453, 5153, 5281, 4752, 4752, 4752, 6238, 6233, 6238, 4752, 4752, 5971, 5570, 4752, 4752, 6241, 5972, 4752, 6241, 4752, 4752, 6238, 4752, 4752, 4752, 5230, 6239, 4752, 6241, 5973, 5838, 5237, 4752, 6254, 6635, 5226, 5851, 6443, 5858, 5866, 5875, 5879, 5884, 5886, 5880, 5890, 5893, 5896, 5899, 5901, 5903, 5907, 5907, 5913, 5907, 5907, 5909, 5920, 5921, 5917, 5917, 5919, 5917, 5917, 5918, 5917, 5931, 5265, 4752, 4752, 5460, 5360, 4757, 4752, 6931, 4752, 4752, 4752, 5461, 5361, 6613, 5542, 4752, 4752, 4752, 6896, 5776, 6882, 4752, 4752, 5742, 5936, 5195, 4752, 6225, 5942, 6564, 5950, 5953, 5961, 4752, 4961, 4752, 4752, 4752, 6000, 6367, 5966, 6419, 4752, 4752, 5487, 4752, 6294, 4752, 6293, 5985, 4752, 5990, 5994, 4752, 4752, 4752, 6298, 6367, 5927, 4752, 4752, 4752, 6243, 4759, 6930, 4752, 4752, 5741, 4752, 4752, 6938, 6005, 6421, 6050, 6014, 4752, 4752, 5505, 4752, 4752, 4752, 6437, 4752, 6209, 5755, 5755, 6022, 6026, 6110, 4752, 4962, 4961, 4752, 4752, 6111, 4752, 4752, 4752, 6317, 6031, 6026, 6110, 4752, 4966, 4752, 5225, 5398, 4752, 5400, 4752, 4752, 4752, 6254, 4752, 6366, 5926, 4752, 4752, 5561, 5225, 5266, 4752, 4752, 5224, 6352, 4752, 6628, 4752, 4972, 5386, 5066, 6048, 5970, 4752, 4752, 5573, 5398, 4752, 6208, 4752, 4752, 5596, 4752, 6059, 5779, 6064, 4752, 4977, 4821, 6882, 6069, 6065, 4752, 4752, 5699, 4752, 4752, 6001, 5925, 5251, 4752, 4752, 4752, 6247, 4752, 5739, 4752, 6353, 4752, 6629, 4752, 5973, 4752, 6569, 6074, 6089, 6569, 6084, 6088, 5251, 6082, 6086, 6090, 4752, 4979, 4579, 4752, 4752, 4752, 6422, 4752, 6423, 6722, 4752, 4752, 4752, 6321, 6322, 5389, 6627, 4752, 5971, 4980, 4580, 4752, 4752, 4752, 6320, 4757, 4752, 5740, 4752, 5075, 5968, 4752, 4977, 5523, 6665, 6354, 6627, 4752, 5972, 4752, 4752, 6036, 4753, 6937, 4752, 4752, 4752, 6418, 6252, 4752, 4752, 4752, 6423, 6860, 6869, 4752, 4752, 5720, 5813, 5555, 4752, 4752, 4752, 5809, 6354, 6627, 4752, 4753, 6937, 4978, 4581, 4752, 4752, 4752, 6429, 4752, 4979, 4581, 4752, 4752, 5722, 5337, 5263, 4752, 6861, 6870, 4752, 5287, 5297, 4758, 4752, 5742, 6353, 6860, 6869, 4758, 5740, 5390, 5998, 6234, 4752, 4752, 4752, 6102, 4752, 5386, 6234, 5505, 6935, 4755, 6239, 4752, 5971, 4752, 4752, 4752, 5386, 4754, 5720, 4581, 4752, 4752, 5741, 6936, 4752, 6863, 5739, 4752, 5076, 4752, 4752, 5720, 5335, 5341, 4752, 6869, 4752, 6313, 4752, 6311, 4752, 6608, 4752, 4752, 5745, 4752, 6259, 4752, 4618, 6121, 6232, 6230, 6230, 5741, 6935, 4752, 4752, 6201, 5189, 4752, 6134, 6132, 6140, 6144, 6151, 6145, 6145, 6150, 6146, 6155, 6159, 6163, 6167, 6169, 6174, 6176, 6169, 6169, 6170, 6186, 6187, 6180, 6180, 6185, 6180, 6180, 6181, 6191, 4752, 4752, 4752, 6545, 6229, 6841, 5573, 5061, 6250, 4752, 4752, 4752, 6569, 5524, 4752, 6247, 6251, 4752, 5107, 4752, 4752, 4753, 6719, 6266, 6265, 6267, 4752, 5110, 4752, 5111, 4752, 5113, 5111, 4752, 5956, 4752, 5192, 4752, 6621, 5747, 6333, 4752, 4752, 5797, 5191, 6271, 6276, 5252, 4961, 4752, 6281, 6287, 6251, 4752, 4752, 4752, 6570, 6286, 6291, 4752, 4752, 5751, 4752, 5833, 5832, 5831, 4752, 5110, 6077, 4752, 4752, 6362, 4752, 4752, 4770, 4752, 4752, 4752, 6717, 5589, 4752, 6202, 5190, 4752, 5110, 6929, 4752, 4752, 6307, 4752, 4752, 6934, 4752, 4752, 4752, 6934, 4759, 6304, 5573, 4961, 5831, 5831, 5831, 4752, 5112, 4752, 4752, 5742, 5580, 4769, 6009, 4752, 4752, 6387, 4752, 5126, 4752, 6331, 4961, 4753, 5534, 5538, 5542, 4752, 6282, 5536, 5540, 4752, 5112, 6427, 5932, 5582, 4771, 4752, 4752, 4752, 6546, 5782, 5243, 4752, 5579, 5536, 5540, 5862, 5538, 5542, 4752, 5114, 5993, 4752, 4961, 4752, 5797, 4768, 5153, 4752, 4752, 5804, 6899, 5787, 6318, 4752, 4752, 5957, 4752, 6213, 6334, 4752, 4752, 4752, 6731, 4752, 6234, 6343, 5539, 6009, 4752, 4752, 5769, 4752, 4752, 5938, 6343, 5539, 4752, 6425, 4961, 4752, 5193, 4752, 4752, 6231, 4752, 5377, 5401, 4752, 6254, 6318, 4752, 4752, 6255, 4752, 6425, 4752, 4752, 5409, 6311, 4961, 4752, 4752, 5823, 4752, 4752, 4752, 6240, 4752, 4752, 4752, 5103, 5454, 6009, 4752, 4752, 5844, 5146, 5452, 6377, 4752, 4752, 5846, 5145, 6860, 6009, 4752, 5190, 6375, 6009, 6422, 6424, 4752, 6868, 4752, 4752, 4752, 5388, 5380, 6254, 6362, 4752, 5124, 5122, 4752, 4752, 6322, 6322, 6322, 6322, 4707, 4707, 4707, 4707, 4708, 4735, 4735, 6381, 4752, 6009, 5377, 6389, 4752, 4752, 6885, 6009, 4752, 4752, 6868, 5377, 6253, 6887, 4752, 4752, 6887, 4752, 4752, 6886, 4752, 6403, 5971, 6255, 4752, 4752, 5853, 4752, 4752, 4752, 6936, 6255, 6886, 5971, 6255, 5191, 4752, 4752, 5752, 4752, 4756, 6589, 6886, 6401, 6885, 6885, 4752, 6886, 5377, 6885, 6394, 6394, 4703, 4703, 4703, 4752, 5185, 4752, 4752, 4757, 5110, 4960, 5744, 6398, 4752, 5187, 6451, 4752, 4752, 6409, 4752, 6411, 5750, 6215, 6417, 5744, 6435, 6217, 4752, 5189, 6447, 6457, 6461, 6462, 6466, 6486, 6469, 6484, 6472, 6478, 6475, 6480, 6498, 6492, 6490, 6496, 6496, 6500, 6506, 6506, 6507, 6504, 6506, 6506, 6506, 6511, 6514, 4752, 4752, 5854, 4752, 4752, 4752, 6619, 4824, 5749, 6417, 6518, 4752, 4752, 4752, 6756, 5187, 4752, 4752, 4752, 6834, 6431, 4752, 4752, 4752, 6836, 5834, 6009, 6522, 6527, 6869, 4752, 6430, 4752, 5188, 4752, 5223, 4752, 4752, 4752, 6253, 4752, 6540, 6551, 6561, 5402, 6575, 4752, 4752, 5945, 4752, 4752, 6755, 6009, 4752, 5188, 5194, 4752, 4752, 4752, 6252, 6255, 4752, 6756, 5962, 4752, 5222, 5392, 5390, 4752, 6849, 6848, 4752, 5231, 6032, 6027, 6850, 4752, 4752, 4752, 6854, 6619, 4824, 5749, 6582, 5518, 4752, 4752, 4752, 6861, 4753, 6634, 4752, 4752, 5945, 5691, 4752, 4752, 6589, 4752, 4753, 4752, 4757, 5561, 4752, 6597, 4752, 6607, 4752, 5235, 4752, 4752, 4752, 5225, 6612, 5541, 4752, 6617, 5229, 6351, 5401, 6625, 4752, 5753, 4752, 6633, 5359, 6640, 6645, 6009, 4944, 5540, 4752, 4752, 5955, 4752, 6649, 6238, 5686, 5686, 5144, 4752, 5744, 4752, 4752, 4752, 4753, 4980, 6619, 4824, 6272, 6654, 5754, 4753, 4752, 6311, 4752, 4752, 6312, 4752, 4752, 5355, 5359, 5550, 6658, 6009, 5357, 6678, 4944, 5541, 4752, 5571, 4752, 6597, 6597, 6597, 6597, 4752, 4752, 4752, 6928, 4752, 4752, 5110, 6426, 4752, 5746, 6423, 4752, 5266, 4752, 4564, 4752, 6662, 5550, 6671, 6670, 6009, 4752, 4752, 5977, 4752, 6664, 6669, 5153, 4752, 5270, 6423, 5505, 4823, 5748, 5401, 5189, 4752, 4752, 4752, 5739, 6322, 5752, 4753, 4752, 4752, 5741, 5390, 4752, 6675, 6690, 6429, 6694, 4752, 4752, 5193, 6234, 4824, 5750, 4752, 5369, 4752, 4955, 4752, 4752, 5385, 5753, 4756, 4752, 6239, 4752, 6240, 4752, 5349, 4758, 4752, 6705, 6429, 4752, 5372, 4758, 5592, 4752, 6705, 6429, 5572, 6238, 6913, 4752, 4752, 6009, 4752, 4752, 5712, 4752, 4752, 6010, 6536, 4714, 6709, 4752, 4752, 6016, 4752, 4756, 4752, 6240, 4752, 5379, 6255, 4752, 5388, 4752, 6257, 6419, 5074, 6720, 4752, 4752, 6042, 4752, 5749, 4752, 4752, 4752, 6929, 4752, 4752, 5971, 6717, 6429, 4752, 4752, 6042, 5417, 6914, 6241, 4752, 5747, 6233, 4752, 4752, 4752, 6926, 4752, 6729, 4752, 4752, 4752, 6933, 6727, 4563, 4752, 5747, 6741, 5389, 5192, 5222, 4752, 5986, 4561, 5748, 4752, 6936, 6934, 4562, 5749, 6934, 5853, 4563, 6935, 4752, 5387, 5748, 4752, 4752, 6735, 6371, 4563, 6936, 6934, 4752, 4752, 6739, 6680, 6421, 4744, 6300, 6231, 5091, 4752, 5389, 5748, 4752, 4752, 6701, 4581, 6039, 6745, 6748, 4620, 6733, 6752, 6760, 6768, 6762, 6764, 6771, 6775, 6779, 6782, 6784, 6788, 6790, 6794, 6797, 6801, 6804, 6809, 6808, 6813, 6815, 6819, 6817, 6823, 6827, 6830, 4752, 5391, 5223, 5222, 6421, 4752, 4752, 4759, 5112, 4760, 4752, 5113, 4752, 5428, 6533, 4752, 4752, 6388, 4752, 4752, 6393, 4752, 4752, 6428, 4752, 4752, 6428, 6260, 6840, 5381, 4752, 6845, 4584, 4752, 6043, 4752, 5495, 4752, 4752, 4753, 6197, 4769, 6859, 6044, 4752, 4752, 6195, 5582, 4752, 6739, 6907, 5191, 4752, 6867, 6915, 4752, 5506, 5505, 4752, 5973, 4752, 4563, 4752, 5386, 4752, 5533, 5537, 5541, 5389, 5388, 4752, 4752, 6232, 4752, 4752, 5747, 6741, 6355, 6235, 4752, 6543, 6238, 5400, 4752, 5188, 4752, 4752, 6891, 5777, 5700, 4752, 5562, 6253, 4752, 4752, 6912, 4752, 4752, 6932, 4752, 4752, 6935, 4752, 4753, 5435, 5440, 5445, 5388, 5388, 4752, 4752, 6242, 6042, 4752, 5739, 6934, 4752, 5571, 4752, 5398, 4752, 4751, 5401, 5401, 5399, 5793, 4753, 6898, 5778, 4563, 4752, 5388, 5749, 6601, 5747, 6906, 5192, 6236, 4752, 6897, 5777, 4563, 4752, 5130, 4752, 4752, 6338, 4752, 4752, 6231, 4752, 4752, 6920, 4752, 4752, 4752, 6261, 4752, 5775, 6919, 4752, 5386, 6258, 4781, 5595, 5193, 6237, 4752, 5571, 4752, 5399, 4760, 4752, 5740, 6935, 4752, 4752, 6107, 4752, 4752, 6924, 4752, 4752, 6281, 5535, 6896, 6942, 4752, 4752, 6311, 4752, 4752, 4752, 6530, 4759, 4752, 5740, 6935, 6951, 4752, 4752, 4752, 6311, 5770, 4977, 6959, 4752, 4752, 6312, 5113, 4752, 6957, 4752, 4752, 6313, 4752, 4752, 4752, 6453, 2, 4, 8, 262144, 0, 0, 0, 0x80000000, 1073741824, 0, 0, 1075838976, 2097152, 2097152, 268435456, 4194432, 4194560, 4196352, 270532608, 2097152, 4194304, 50331648, 0, 0, 0, 4194304, 0, 0, 541065216, 541065216, -2143289344, -2143289344, 4194304, 4194304, 4196352, -2143289344, 4194304, 4194432, 37748736, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 4194304, 4194304, 4198144, 4196352, 8540160, 4194304, 4194304, 4194304, 4196352, 276901888, 4194304, 4194304, 8425488, 4194304, 1, 0, 1024, 137363456, 66, 37748736, 742391808, 239075328, -1405091840, 775946240, 775946240, 775946240, 171966464, 742391808, 742391808, 742391808, 775946240, -1371537408, 775946240, 775946240, -1405091840, -1371537408, 775946240, 775946240, 775946240, 775946240, 4718592, -1371537408, 775946240, -1371537408, 775946240, -1371537408, 171966464, 775946240, 171966464, 171966464, 171966464, 171966464, 239075328, 171966464, 775946240, 239075328, 64, 4718592, 2097216, 4720640, 541589504, 4194368, 541589504, 4194400, 4194368, 541065280, 4194368, 4194368, -2143289280, 4194368, -2143285440, -2143285408, -2143285408, 776470528, -2143285408, -2109730976, -2143285408, -2143285408, -2143285408, -2109730976, -2143285408, 775946336, 775946304, 775946304, 776470528, 775946304, -1908404384, 775946304, -1908404384, 0, 2097152, 4194304, 128, 0, 256, 2048, 0, 0, 16777216, 16777216, 16777216, 16777216, 64, 64, 64, 64, 96, 96, 96, 64, 0, 0, 0, 24, 64, 0, 96, 96, 0, 0, 0, 288, 8388608, 0, 0, 8388608, 4096, 4096, 4096, 32, 96, 96, 96, 96, 262144, 96, 96, 1048576, 128, 0, 1048576, 0, 0, 2048, 2048, 2048, 2048, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 96, 96, 128, 128, 2048, 524288, 268435456, 536870912, 1073741824, 0, 0, 8388608, 4096, 0, 64, 0, 2048, 524288, 536870912, 0, 64, 524288, 64, 96, 64, 524288, 524288, 96, 96, 64, 524288, 96, 64, 80, 528, 524304, 1048592, 2097168, 268435472, 16, 16, 2, 536936448, 16, 262160, 16, 536936448, 16, 17, 17, 20, 16, 48, 16, 16, 20, 48, 64, 128, 1024, 134217728, 0, 0, 24, 560, 48, 2097680, 3145744, 1048592, 1048592, 2097168, 16, 1049104, 16, 16, 20, 560, 2097168, 2097168, 16, 16, 16, 16, 20, 16, 2097552, 3146256, 16, 16, 16, 28, 0, 2, 2098064, 17, 21, 16, 16, 163577856, 17, 528, 528, 16, 528, 2228784, -161430188, -161429680, -161430188, -161430188, -161430188, -161429680, -161430188, -161429676, -160905388, -161429676, -161430188, -161429676, -161429676, -161429676, -161429676, -161429675, -161349072, -161349072, -161429675, -161349072, -161349072, -161349072, -161349072, -161347728, -161347728, -161347728, -161347728, -161298576, -160299088, -161298576, -161298572, -161298572, -161298572, -161298572, -18860267, -160774284, -18729163, -160774288, -160299084, -161298572, -160774284, -161298572, -161298572, 16, 16, 28, 16, 16, 112, 21, 53, 146804757, 146812949, 0, 16, 0, 48, 3146256, 2097680, 1048592, 146862101, 146863389, -161429676, 146863389, 146863421, 146863389, 146863389, 146863389, 146863421, -161429740, -161429676, -160905388, -161298572, 0, 65536, 524288, 1048576, 33554432, 0, 159383552, 0, 0, 0, 1157627904, -1073741824, 0, 0, 0, 300, 142606336, 0, 8192, 0, 0, 0, 384, 0, 243269632, 0, 0, 0, 1862270976, 1, 32768, 131328, 131072, 16777216, 0, 0, 1, 2, 4, 128, 2097152, 0, 1073741825, 0x80000000, 0x80000000, 8, 16777216, 1073774592, 278528, 1226014816, 100665360, 100665360, 100665360, 100665360, 100665360, 100665360, -2046818288, 1091799136, -2044196848, 1091799136, 1091799136, 1091799136, 1091799136, 1091799136, 1091803360, 1091799136, 1091799136, 1158908000, 1158908001, 1192462432, 1192462448, 1192462448, 1192462448, 1192462448, 1200851056, 1091799393, 1200851056, 1200851056, 1192462448, 1870630720, 1870647104, 1870630720, 1870647104, 1870630720, 1870647104, 1870647104, 1870647104, 1870647104, 1870647104, 1870647120, 1870647124, 1870647124, 1870647124, 1870630736, 1870655316, 1870655316, 1870655316, 1870655317, 1870655348, 1870647120, 1870647120, 1870647120, 1879019376, 1879035760, 1870647124, 1879035760, 1879035764, 32768, 131072, 524288, 2097152, 8388608, 16777216, 134217728, 268435456, 1073741824, 0x80000000, 131328, 0, 0, 0, 832, 0, 164096, 0, 0, 0, 520, 4333568, 1048576, 1224736768, 0, 0, 1, 4, 0, 0, 235712, 0, 1090519040, 0, 0, 0, 999, 259072, 1191182336, 0, 0, 9437184, 0, 0, 1048576, 0, 128, 128, 128, 128, 2048, 2048, 231744, 0, 0, 0, 1007, 495424, 7864320, 1862270976, 0, 0, 0, 1024, 0, 0, 0, 63, 520000, 1862270976, 1862270976, 16252928, 0, 0, 16252928, 0, 0, 0, 1536, 0x80000000, 64, 98304, 1048576, 150994944, 0, 64, 256, 3584, 16384, 98304, 393216, 98304, 393216, 524288, 1048576, 2097152, 4194304, 0x80000000, 0, 0, 2097152, 4194304, 251658240, 536870912, 1073741824, 0, 0, 8192, 1073741824, 1073741824, 8388608, 2097152, 16777216, 134217728, 268435456, 2048, 65536, 262144, 524288, 1048576, 2097152, 1048576, 2097152, 4194304, 117440512, 64, 256, 1536, 16384, 65536, 117440512, 134217728, 536870912, 1073741824, 0, 0, 100663296, 0, 0, 0, 4096, 0, 0, 0, 64, 0, 0, 128, -2113929216, 64, 256, 1536, 65536, 262144, 524288, 4194304, 16777216, 100663296, 134217728, 536870912, 1073741824, 1048576, 2097152, 4194304, 16777216, 4194432, 3145728, 524288, 2097152, 134217728, 268435456, 65536, 1048576, 0, 0, 0, 2048, 0, 0, 134217728, 0, 0, 0, 15, 16, 524288, 2097152, 1073741824, 0x80000000, 0x80000000, 0, 1048576, 2097152, 67108864, 1073741824, 0, 0, 0, 0, 2097152, 1073741824, 0x80000000, 0, 0, 0, 768, 0, 2097152, 0x80000000, 0, -872415232, 0, -872415232, 67108864, 134217728, 1073741824, 0, 0x80000000, 0, 0, 0, 8192, 4096, 0, 0, 1536, 524288, 64, 64, 96, 64, 0, 524288, 0, 1073741824, 2621440, 1073741824, 9476, 512, 0, 32, 384, 8192, 0, 0, 1, 8, 512, 512, 9476, 134218240, 1050624, 262144, 512, 50331649, 1275208192, 4194312, 4194312, 4194312, 4194312, 541065224, 4194312, 4194312, 4194344, -869654016, 4203820, -869654016, -869654016, -869654016, -869654016, 1279402504, 1279402504, 1279402504, 1279402504, 2143549415, 2143549415, 2143549415, 2143549415, 2143549415, 2143549423, 2143549415, 2143549423, 2143549423, 2143549423, 2143549423, 16, 32, 256, 1024, 8192, 33554432, 8192, 33554432, 67108864, 134217728, 0, 0, 536870912, 9216, 0, 0, 1792, 0x80000000, 0, 1050624, 0, 0, 1, 14, 16, 32, 1024, 2048, 77824, 524288, 0, 512, 139264, 1275068416, 512, 2760704, -872415232, 0, 0, 1856, 0x80000000, 4203520, 0, 0, 0, 32768, 0, 0, 0, 58624, 520, 0, 0, 0, 131072, 0, 0, 0, 512, 0, 1048576, 0, 1275068416, 0, 0, 0, 65536, 0, 0, 0, 12561, 0, 1007, 1007, 0, 0, 2048, 524288, 0, 536870912, 0, 512, 0, 2048, 1048576, 0, 0, 40, 0, 2621440, 0, 0, 0x80000000, 999, 259072, 4194304, 25165824, 100663296, 402653184, 1, 102, 384, 512, 5120, 5120, 8192, 16384, 229376, 4194304, 4194304, 25165824, 33554432, 67108864, 402653184, 402653184, 536870912, 1073741824, 0, 0, 2048, 3145728, 16777216, 536870912, 110, 110, 0, 0, 1, 30, 32, 0, 40, 0, 524288, 64, 96, 1, 6, 96, 384, 512, 1024, 4096, 8192, 16384, 229376, 67108864, 402653184, 536870912, 0, 2, 16, 104, 0, 104, 104, 8192, 33554432, 134217728, 0, 0, 2048, 100663296, 0, 229376, 25165824, 33554432, 402653184, 536870912, 8192, 33554432, 0, 0, 0, 17408, 0, 524288, 2097152, 0, 0, 2048, 268435456, 536870912, 0, 0, 268435456, 49152, 2, 4, 32, 64, 256, 512, 1024, 8, 8, 0, 0, 1, 64, 128, 3584, 16384, 3145728, 16777216, 67108864, 134217728, 805306368, 1073741824, 0, 0, 4, 64, 256, 1024, 4096, 8192, 65536, 524288, 98304, 131072, 25165824, 268435456, 536870912, 0, 2, 4, 256, 1024, 0, 2048, 0, 98304, 131072, 16777216, 268435456, 0, 0, 0, 262144, 0, 0, 65536, 268435456, 0, 0, 1, 128, 512, 2048, 524288, 2048, 524288, 67108864, 536870912, 0, 262144, 0, 0, 2432, 0, 0, 4096, 8192, 0, 32, 4100, 67108864, 0, 32768, 0, 32768, 0, 0, 134348800, 134348800, 1049088, 1049088, 8192, 1049088, 12845065, 12845065, 12845065, 12845065, 270532608, 0, 1049088, 0, 134348800, 12845065, 12845065, 147193865, 5505537, 5591557, 5587465, 5587457, 5587457, 147202057, 5587457, 5587457, 5591557, 5587457, 13894153, 13894153, 13894153, 13894153, -1881791493, 13894153, 81003049, 13894153, 13894153, -1881791493, -1881791493, -1881791493, -1881791493, 0, 9, 0, 0, 1, 5505024, 142606336, 0, 0, 0, 278528, 0, 82432, 0, 0, 1, 16777216, 0, 0, 0, 139264, 0, 0, 0, 229440, 0, 5, 86528, 9, 4456448, 8388608, 0, 0, 8192, 8392704, 9, 8388608, 0, 0, 256, 1024, 65536, 16777216, 268435456, 0, 0, 41, 75497472, 0, 0, 16384, 262144, 0, 0, 0, 512, 1048576, 0, 0, 262144, 4194304, 8388608, 0, 0, 16384, 4194304, 0x80000000, 0, 0, 81920, 0, 0, 2, 4, 16, 32, 8192, 131072, 262144, 1048576, 4194304, 8388608, 4194304, 8388608, 16777216, 33554432, -1946157056, 0, -1946157056, 0, 0, 0, 524288, 0, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0, 12, 0, 0, 0, 13, 0, 1, 2, 56, 64, 896, 8192, 131072, 0, 0, 33554432, 1024, 0, 4, 0, 8, 16, 32, 64, 128, 1024, 2048, 16384, 65536, 262144, 524288, 2097152, 384, 512, 8192, 131072, 1048576, 0, 16384, 65536, 0, 65536, 0, 0, 131072, 0, 32, 0, 32768, 134217728, 0, 0, 2, 8, 16, 0, 2, 8, 32, 64, 256, 1024, 98304, 131072, 1048576, 33554432, 134217728, 0x80000000, 8, 32, 384, 8192, 131072, 33554432, 131072, 33554432, 0x80000000, 0, 0, 24576, 0, 0, 0, 50331648, 0, 8396800, 4194304, 134217728, 2048, 134217728, 0, 0, 2, 16384, 32768, 1048576, 2097152, 0, 8396800, 0, 0, 4, 8, 0, 0, 16384, 0, 2, 4, 128, 3584, 16384, 16384, 16384, 16777216, 16384, 229376, 25165824, 33554432, 268435456, 536870912, 524288, 268567040, 16384, -2113929088, 2113544, 68423701, 68423701, 68423701, 68423701, 68489237, 68423701, 68423701, 68423701, 85200917, 68423701, 68489237, 72618005, 68423701, 68423701, -2079059883, 68423701, -2079059883, 68425749, 68423703, 69488664, 85200919, 69488664, 69488664, 69488664, 69488664, 70537244, 70537245, 70537245, 70537245, 70537245, 70537245, 70539293, -2022351809, -2076946339, 70537245, -2076946339, -2076946339, -2022351681, -2022351681, -2022351681, -2022351681, -2022351809, -2022351681, -2022351809, -2022351681, 32768, 65536, 4194304, 16777216, 0x80000000, 0, 0, 0, 8388608, 134217728, 1073741824, 131584, 268435456, 0, 0, 4, 128, 1048576, 67108864, 0, 0, 4, 256, 1024, 98304, 0, 0, 5242880, -2080374784, 268288, 0, 0, 4, 16777216, 0, 0, 23, 0, 0, 0, 867391, 24, 282624, 0, 0, 6, 0, 0, 0, 2097152, 0, 0, 0, 28, 3145728, 0, 0, 32768, 65536, 0, 284672, 0, 0, 0, 1048576, 0, 63, 128, 351232, 7340032, -2030043136, 0, 0, 131072, 268435456, 0, 0, 8, 32, 64, 16, 4096, 262144, 1048576, 1073741824, 0, 0, 0, -2046820352, 0, 20480, 0, 0, 8, 4194304, 0, 0, 15, 16, 32, 3072, 20480, 65536, 262144, 7340032, 50331648, 16, 32, 128, 3072, 20480, 0, 1, 4, 1048576, 4096, 1048576, 512, 0, 0, 0, 150528, 0, 0, 0, 5242880, 0, 7, 0, 14, 32, 1024, 2048, 12288, 1, 14, 32, 128, 1024, 7340032, 50331648, 0x80000000, 0, 0, 2048, 16384, 65536, 7340032, 50331648, 8, 32, 1024, 65536, 262144, 2097152, 1073741824, 0, 1, 6, 8, 32, 128, 1024, 65536, 2097152, 4194304, 50331648, 0x80000000, 0, 1, 2, 4, 2097152, 4194304, 67108864, 134217728, 536870912, 0, 32768, 4194304, 16777216, 0, 1, 2, 4, 50331648, 67108864, 0x80000000, 0, 0, 128, 50331648, 0, 0, 8, 33554432, 4096, 4194304, 268435456, 0, 0, 32768, 131072, 131072, 0, 32768, 32768, 268435968, 268435968, 1073743872, 268435968, 0, 128, 6144, 0, 229376, 128, 268435968, 16777220, 268436032, 256, 256, 256, 256, 257, 256, 256, 536871168, 256, 256, 256, 256, 384, -1879046336, -1879046334, 1073744256, -1879046334, -1879046326, -1879046334, -1879046334, -1879046326, -1879046326, -1845491902, -1878784182, 268444480, 268444480, 268444480, 268444480, 2100318145, 268436288, 268436288, 268436288, 268436288, 268436289, 268436288, 2100318149, 2100318149, 2100318149, 2100318149, 2100326337, 2100318149, 2100318149, 2100318145, 2100318149, 2100318145, 2100318149, 2100326341, 2100318149, 2100326341, 2100326341, 0, 1, 16, 32, 128, 512, 0, 4194304, 1, 1024, 0, 0, 229376, 0, 0, 12, 3145728, 0, 0, 576, 0, 0, 16, 8192, 0, 0, 16, 262144, 0, 384, 0, 0, 21, 266240, 1864, 0, 0, 0, 8388608, 0, 0, 0, 128, 0, 0, 0, 256, 0, 0, 0, 260, 512, 0, 1, 4036, 19939328, 2080374784, 0, 0, 0, 16777216, 0, 0, 0, 32, 0, 0, 0, 40, 67108864, 0, 19947520, 0, 0, 0, 19947520, 2304, 0, 8, 0, 512, 301989888, 0, 0, 262144, 16777216, 0, 1, 4, 64, 128, 64, 128, 3840, 16384, 19922944, 19922944, 2080374784, 0, 0, 29, 0, 0, 1536, 0x80000000, 0, 0, 32, 1, 8, 0, 33554432, 0, 0, 32768, 196608, 0, 0, 0, 33554432, 0, 0, 32768, 65536, 131072, 0, 0, 524288, 524288, 524288, 524288, 64, 64, 64, 32, 96, 8, 0, 33554432, 262144, 8192, 0, 0, 4194304, 1024, 0, 4096, 0, 1024, 2048, 16384, 3145728, 2048, 524288, 536870912, 1073741824, 8, 0, 0, 512, 131072, 0, 0, 64, 256, 1536, 2048, 33554432, 8192, 0, 0, 32, 64, 256, 32768, 65536, 16777216, 134217728, 536870912, 1073741824, 0, 3145728, 16777216, 536870912, 1073741824, 0, 0, 8192, 8192, 8192, 9216, 33554432, 0, 2097152, 16777216, 1073741824, 0, 0, 32768, 0, 16777216, 0, 16777216, 64, 0, 2, 0, 0, 32768, 16777216, 0, 0, 32, 512, 128, 131072, 0, 134218752, 0, 0, 44, 0, 66048, 0, 0, 0, 67108864, 0, 0, 0, 8192, 0, 8192, 0, 536870912, 0, 0, 0, 12289, 0, 268500992, 4243456, 0, 0, 59, 140224, 5505024, -1887436800, 0, 0, 2, 2, 4096, 4096, 0, 4096, 8192, 67108864, 0, 0, 1, 4032, 0, 4243456, 4096, 1048588, 12289, 1124073472, 1124073472, 1124073472, 1124073472, 1124073472, 1124073488, 1124073472, 1124073472, 1124073474, 1124073472, 1124073472, 1392574464, 1124073472, 12289, 1073754113, 12289, 12289, 1124073472, 12289, 12289, 1098920193, 1098920193, 1124073488, 1124073472, 1258292224, 1124073472, 1124073472, 1124073472, 1124085761, 1258304513, 1124085761, 1124085761, 1124085761, 1124085777, 1132474625, 1098920209, 1132474625, 1132474625, 1132474625, 1132474625, 1400975617, 2132360255, 2132622399, 2132622399, 2132360255, 2132360255, 2132360255, 2132360255, 2132622399, 2132360255, 2132360255, 2132360255, 2140749119, 2132360255, 2140749119, 2140749119, 0, 65536, 268435456, 49152, 184549376, 0, 0, 0, 83886080, 0, 0, 318767104, 0, 0, 32768, 100663296, 402653184, 1610612736, 0, 0, 0, 231488, 0, 12545, 25165824, 0, 0, 49152, 0, 0, 256, 1536, 65536, 0, 0, 58720256, 0, 0, 131072, 32768, 0, 0, 134217728, 0, 12305, 13313, 0, 0, 331776, 83886080, 117440512, 0, 0, 1, 6, 32, 64, 0, 78081, 327155712, 0, 0, 511808, 7864320, 512, 65536, 0, 0, 64, 65536, 1048576, 0, 0, 33554432, 1073741824, 0, 0, 110, 0, 0, 256, 8388608, 0, 0, 524288, 2097152, 0x80000000, 0, 0, 77824, 0, 0, 0, 268435456, 524288, 1048576, 16777216, 100663296, 134217728, 0, 339968, 0, 0, 128, 131072, 1024, 134217728, 0, 268435456, 0, 0, 128, 33554432, 0, 0, 1, 12288, 0, 0, 0, 134217728, 2048, 12288, 65536, 524288, 1048576, 1048576, 33554432, 67108864, 134217728, 805306368, 0, 327680, 0, 0, 256, 65536, 0, 0, 268435456, 1048576, 33554432, 134217728, 805306368, 1, 14, 16, 1024, 4096, 8192, 229376, 65536, 524288, 33554432, 134217728, 536870912, 1073741824, 0, 1, 14, 1024, 2048, 4096, 8192, 131072, 1048576, 8388608, 33554432, 134217728, 0x80000000, 0, 0, 4096, 65536, 524288, 134217728, 16384, 4194304, 0, 0, 999, 29619200, 2113929216, 0, 0, 0, 148480, 1, 12, 1024, 134217728, 0, 128, 134217728, 8, 0, 8, 8, 8, 0, 1, 4, 8, 134217728, 536870912, 0, 0, 1073741824, 32768, 0, 4, 8, 536870912, 0, 0, 1024, 1024, 0, 1024, 2048, 3145728, 0, 8, 32, 512, 4096, 8192, 0, 0, 68157440, 137363456, 0, 66, 66, 524288, 4100, 1024, 0, 0, 605247, 1058013184, 1073741824, 100680704, 25165824, 92274688, 25165824, 25165824, 92274688, 92274688, 25165952, 25165824, 25165824, 26214400, 92274688, 25165824, 92274688, 93323264, 92274688, 92274688, 92274688, 92274688, 92274720, 93323264, 25165890, 100721664, 25165890, 100721928, 100721928, 100787464, 100853000, 100721928, 100721928, 125977600, 125977600, 125977600, 125977600, 125846528, 125846528, 126895104, 125846528, 125846528, 125846528, 125846560, 125977600, 127026176, 125977600, 125977600, 127026176, 127026176, 281843, 1330419, 281843, 1330419, 281843, 281843, 1330419, 1330419, 281843, 281843, 5524723, 5524723, 5524723, 5524723, 93605107, 5524723, 39079155, 72633587, 72633587, 5524723, 92556531, 93605107, 93605107, 127290611, 97799411, 127290611, 131484915, 2097152, 134217728, 0, 0, 1024, 65536, 58368, 0, 0, 0, 301989888, 8, 124160, 189696, 0, 0, 605503, 1066401792, 0, 0, 3, 240, 19456, 262144, 0, 150528, 0, 0, 0, 536870912, 0, 1073741824, 0, 57344, 0, 0, 0, 1073741824, 0, 0, 0, 1, 2, 112, 128, 3072, 16384, 262144, 2048, 16384, 262144, 0, 0, 2097152, 16777216, 0, 0, 0, 1, 2, 48, 64, 0, 1, 2, 16, 32, 64, 384, 8192, 131072, 1048576, 32, 4096, 8192, 131072, 0, 0, 32768, 0, 256, 0, 256, 0, 65536, 1024, 2048, 262144, 0, 0, 32768, 256, 0, 0, 1024, 2097152, 0, 0, 0, 16384, 0, 0, 0, 4, 0, 0, 0, 5, 64, 128, 262144, 0, 0, 2097152, 268435456, 0, 0, 64, 128, 0, 0, 1536, 1792, 1, 2, 16, 64, 0, 0
-];
-
-XQueryParser.TOKEN =
-[
-  "(0)",
-  "PragmaContents",
-  "DirCommentContents",
-  "DirPIContents",
-  "CDataSection",
-  "Wildcard",
-  "EQName",
-  "URILiteral",
-  "IntegerLiteral",
-  "DecimalLiteral",
-  "DoubleLiteral",
-  "StringLiteral",
-  "PredefinedEntityRef",
-  "'\"\"'",
-  "EscapeApos",
-  "ElementContentChar",
-  "QuotAttrContentChar",
-  "AposAttrContentChar",
-  "PITarget",
-  "NCName",
-  "QName",
-  "S",
-  "S",
-  "CharRef",
-  "CommentContents",
-  "EOF",
-  "'!'",
-  "'!='",
-  "'\"'",
-  "'#'",
-  "'#)'",
-  "'$'",
-  "'%'",
-  "''''",
-  "'('",
-  "'(#'",
-  "'(:'",
-  "')'",
-  "'*'",
-  "'*'",
-  "'+'",
-  "','",
-  "'-'",
-  "'-->'",
-  "'.'",
-  "'..'",
-  "'/'",
-  "'//'",
-  "'/>'",
-  "':'",
-  "':)'",
-  "'::'",
-  "':='",
-  "';'",
-  "'<'",
-  "'<!--'",
-  "'</'",
-  "'<<'",
-  "'<='",
-  "'<?'",
-  "'='",
-  "'>'",
-  "'>='",
-  "'>>'",
-  "'?'",
-  "'?>'",
-  "'@'",
-  "'NaN'",
-  "'['",
-  "']'",
-  "'after'",
-  "'all'",
-  "'allowing'",
-  "'ancestor'",
-  "'ancestor-or-self'",
-  "'and'",
-  "'any'",
-  "'append'",
-  "'array'",
-  "'as'",
-  "'ascending'",
-  "'at'",
-  "'attribute'",
-  "'base-uri'",
-  "'before'",
-  "'boundary-space'",
-  "'break'",
-  "'by'",
-  "'case'",
-  "'cast'",
-  "'castable'",
-  "'catch'",
-  "'check'",
-  "'child'",
-  "'collation'",
-  "'collection'",
-  "'comment'",
-  "'constraint'",
-  "'construction'",
-  "'contains'",
-  "'content'",
-  "'context'",
-  "'continue'",
-  "'copy'",
-  "'copy-namespaces'",
-  "'count'",
-  "'decimal-format'",
-  "'decimal-separator'",
-  "'declare'",
-  "'default'",
-  "'delete'",
-  "'descendant'",
-  "'descendant-or-self'",
-  "'descending'",
-  "'diacritics'",
-  "'different'",
-  "'digit'",
-  "'distance'",
-  "'div'",
-  "'document'",
-  "'document-node'",
-  "'element'",
-  "'else'",
-  "'empty'",
-  "'empty-sequence'",
-  "'encoding'",
-  "'end'",
-  "'entire'",
-  "'eq'",
-  "'every'",
-  "'exactly'",
-  "'except'",
-  "'exit'",
-  "'external'",
-  "'first'",
-  "'following'",
-  "'following-sibling'",
-  "'for'",
-  "'foreach'",
-  "'foreign'",
-  "'from'",
-  "'ft-option'",
-  "'ftand'",
-  "'ftnot'",
-  "'ftor'",
-  "'function'",
-  "'ge'",
-  "'greatest'",
-  "'group'",
-  "'grouping-separator'",
-  "'gt'",
-  "'idiv'",
-  "'if'",
-  "'import'",
-  "'in'",
-  "'index'",
-  "'infinity'",
-  "'inherit'",
-  "'insensitive'",
-  "'insert'",
-  "'instance'",
-  "'integrity'",
-  "'intersect'",
-  "'into'",
-  "'is'",
-  "'item'",
-  "'json'",
-  "'json-item'",
-  "'key'",
-  "'language'",
-  "'last'",
-  "'lax'",
-  "'le'",
-  "'least'",
-  "'let'",
-  "'levels'",
-  "'loop'",
-  "'lowercase'",
-  "'lt'",
-  "'minus-sign'",
-  "'mod'",
-  "'modify'",
-  "'module'",
-  "'most'",
-  "'namespace'",
-  "'namespace-node'",
-  "'ne'",
-  "'next'",
-  "'no'",
-  "'no-inherit'",
-  "'no-preserve'",
-  "'node'",
-  "'nodes'",
-  "'not'",
-  "'object'",
-  "'occurs'",
-  "'of'",
-  "'on'",
-  "'only'",
-  "'option'",
-  "'or'",
-  "'order'",
-  "'ordered'",
-  "'ordering'",
-  "'paragraph'",
-  "'paragraphs'",
-  "'parent'",
-  "'pattern-separator'",
-  "'per-mille'",
-  "'percent'",
-  "'phrase'",
-  "'position'",
-  "'preceding'",
-  "'preceding-sibling'",
-  "'preserve'",
-  "'previous'",
-  "'processing-instruction'",
-  "'relationship'",
-  "'rename'",
-  "'replace'",
-  "'return'",
-  "'returning'",
-  "'revalidation'",
-  "'same'",
-  "'satisfies'",
-  "'schema'",
-  "'schema-attribute'",
-  "'schema-element'",
-  "'score'",
-  "'self'",
-  "'sensitive'",
-  "'sentence'",
-  "'sentences'",
-  "'skip'",
-  "'sliding'",
-  "'some'",
-  "'stable'",
-  "'start'",
-  "'stemming'",
-  "'stop'",
-  "'strict'",
-  "'strip'",
-  "'structured-item'",
-  "'switch'",
-  "'text'",
-  "'then'",
-  "'thesaurus'",
-  "'times'",
-  "'to'",
-  "'treat'",
-  "'try'",
-  "'tumbling'",
-  "'type'",
-  "'typeswitch'",
-  "'union'",
-  "'unique'",
-  "'unordered'",
-  "'updating'",
-  "'uppercase'",
-  "'using'",
-  "'validate'",
-  "'value'",
-  "'variable'",
-  "'version'",
-  "'weight'",
-  "'when'",
-  "'where'",
-  "'while'",
-  "'wildcards'",
-  "'window'",
-  "'with'",
-  "'without'",
-  "'word'",
-  "'words'",
-  "'xquery'",
-  "'zero-digit'",
-  "'{'",
-  "'{{'",
-  "'{|'",
-  "'|'",
-  "'||'",
-  "'|}'",
-  "'}'",
-  "'}}'"
-];
-                                                            });
-
-define('ace/mode/xquery/visitors/SemanticHighlighter', ['require', 'exports', 'module' ], function(require, exports, module) {
-
-  var SemanticHighlighter = exports.SemanticHighlighter = function(ast) {
-    
-    this.tokens = {};
-
-    this.getTokens = function() {
-      this.visit(ast);
-      return this.tokens;
-    };
-
-   this.EQName = this.NCName = function(node)
-   {
-     var row = node.pos.sl;
-     this.tokens[row] = this.tokens[row] === undefined ? [] : this.tokens[row];
-     node.pos.type = "support.function";
-     this.tokens[row].push(node.pos);
-     return true;
-   };
-
-    this.visit = function(node) {
-      var name = node.name;
-      var skip = false;
-
-      if (typeof this[name] === "function") skip = this[name](node) === true ? true : false;
-
-      if (!skip) {
-        this.visitChildren(node);
-      }
-    };
-
-    this.visitChildren = function(node, handler) {
-      for (var i = 0; i < node.children.length; i++) {
-        var child = node.children[i];
-        if (handler !== undefined && typeof handler[child.name] === "function") {
-          handler[child.name](child);
-        }
-        else {
-          this.visit(child);
-        }
-      }
-    };
-    
-  };
-  
-});
diff --git a/try/index.html b/try/index.html
deleted file mode 100644
index f142d06..0000000
--- a/try/index.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<html>
-	<head>
-		<title>Try out tv4</title>
-		<script src="../tv4.js"></script>
-		<style type="text/css" media="screen">
-			#page-table {
-				position: absolute;
-				top: 0;
-				bottom: 0;
-				left: 0;
-				right: 0;
-				width: 100%;
-				height: 100%;
-				overflow: hidden;
-			}
-			#editor-data-title, #editor-schema-title {
-				font-size: 16px;
-				font-weight: bold;
-				font-family: Verdana;
-				text-align: center;
-				border-bottom: 2px solid black;
-				height: 25px;
-			}
-			#editor-data-title {
-				left: 0;
-				width: 50%;
-				background-color: #CDE;
-				border-right: 1px solid black;
-			}
-			#editor-schema-title {
-				right: 0;
-				width: 50%;
-				background-color: #EDC;
-				border-left: 1px solid black;
-			}
-			#editor-data { 
-				width: 100%;
-				height: 100%;
-				border-right: 1px solid black;
-			}
-			#editor-schema { 
-				width: 100%;
-				height: 100%;
-				border-left: 1px solid black;
-			}
-			#run-button-cell {
-				height: 25px;
-			}
-			#run-button {
-				float: left;
-				width: 90%;
-				height: 25px;
-				font-weight: bold;
-			}
-			#save-button {
-				float: right;
-				width: 9.99%;
-				height: 25px;
-			}
-			#result-cell {
-				vertical-align: top;
-				height: 20em;
-				font-size: 0.9em;
-				font-family: Consolas, Courier New, sans;
-			}
-			#result {
-				height: 100%;
-				overflow: auto;
-				padding: 0.5em;
-			}
-		</style>
-	</head>
-	<body>
-		<table id="page-table" cellspacing=0 cellpadding=0>
-			<thead>
-				<tr>
-					<td id="editor-data-title">data</td>
-					<td id="editor-schema-title">schema</td>
-				</tr>
-			</thead>
-			<tbody>
-				<tr>
-					<td style="position: relative">
-<div id="editor-data">{
-	"foo": "bar"
-}</div>
-					</td>
-					<td style="position: relative">
-<div id="editor-schema">{
-	"type": "object",
-	"properties": {
-		"foo": {
-			"type": "string"
-		}
-	},
-	"required": ["foo"]
-}</div>
-					</td>
-				</tr>
-				<tr>
-					<td colspan=2 id="run-button-cell">
-						<input id="run-button" type="button" value="validate" onclick="validate()"></input>
-						<input id="save-button" type="button" value="save to URL" onclick="saveToFragment()"></input>
-					</td>
-				</tr>
-				<tr>
-					<td colspan=2 id="result-cell">
-						<pre id="result">&nbsp;</pre>
-					</td>
-				</tr>
-			</tbody>
-		</table>
-
-		<script src="ace/ace.js" type="text/javascript" charset="utf-8"></script>
-		<script>
-			var editorData = ace.edit("editor-data");
-			editorData.setTheme("ace/theme/dawn");
-			editorData.getSession().setMode("ace/mode/json");
-			
-			var editorSchema = ace.edit("editor-schema");
-			editorSchema.setTheme("ace/theme/dawn");
-			editorSchema.getSession().setMode("ace/mode/json");
-			
-			var hash = (window.location.href.indexOf('#') == -1) ? '#' : window.location.href.substring(window.location.href.indexOf('#'));
-			console.log(hash);
-			if (hash.charAt(1) == "?") {
-				var parts = hash.substring(2).split("&");
-				for (var i = 0; i < parts.length; i++) {
-					var pair = parts[i].split('=');
-					var key = pair[0];
-					var value = decodeURIComponent(pair.length ? parts[i].substring(key.length + 1) : "");
-					if (key == "data") {
-						editorData.getSession().setValue(value);
-					} else if (key == "schema") {
-						editorSchema.getSession().setValue(value);
-					}
-				}
-			}
-			
-			function validate() {
-				var dataJson = editorData.getSession().getValue();
-				try {
-					var data = JSON.parse(dataJson);
-				} catch (e) {
-					return output("Error parsing data JSON:\n" + e);
-				}
-				var schemaJson = editorSchema.getSession().getValue();
-				try {
-					var schema = JSON.parse(schemaJson);
-				} catch (e) {
-					return output("Error parsing schema JSON:\n" + e);
-				}
-				output(tv4.validateMultiple(data, schema));
-			}
-			
-			function saveToFragment() {
-				var dataJson = editorData.getSession().getValue();
-				var schemaJson = editorSchema.getSession().getValue();
-				var hash = "#?data=" + encodeURIComponent(dataJson) + "&schema=" + encodeURIComponent(schemaJson);
-				window.location.href = hash;
-			}
-
-			function output(result) {
-				var target = document.getElementById('result');
-				if (typeof result != 'string') {
-					result = JSON.stringify(result, null, 4)
-				}
-				target.innerHTML = result.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
-			}
-			
-			validate();
-		</script>
-	</body>
-</html>
\ No newline at end of file
diff --git a/tv4.js b/tv4.js
index 614f443..6bf6ad8 100644
--- a/tv4.js
+++ b/tv4.js
@@ -1577,6 +1577,15 @@ function createApi(language) {
 			this.error = error;
 			this.missing = context.missing;
 			this.valid = (error === null);
+
+			this.toString = function () {
+				if (this.error) {
+					return this.error.message;
+				} else {
+					return 'Object passed schema validation';
+				}
+			};
+
 			return this.valid;
 		},
 		validateResult: function () {
@@ -1674,4 +1683,4 @@ tv4.tv4 = tv4;
 
 return tv4; // used by _header.js to globalise.
 
-}));
\ No newline at end of file
+}));
diff --git a/tv4.min.js b/tv4.min.js
deleted file mode 100644
index addcc9c..0000000
--- a/tv4.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.tv4=b()}(this,function(){function a(a){return encodeURI(a).replace(/%25[0-9][0-9]/g,function(a){return"%"+a.substring(3)})}function b(b){var c="";m[b.charAt(0)]&&(c=b.charAt(0),b=b.substring(1));var d="",e="",f=!0,g=!1,h=!1;"+"===c?f=!1:"."===c?(e=".",d="."):"/"===c?(e="/",d="/"):"#"===c?(e="#",f=!1):";"===c?(e=";",d=";",g=!0,h=!0):"?"===c?(e="?",d="&",g=!0):"&"===c&&(e="&",d="&",g=!0);for(var i=[],j=b.split(","),k=[],l={},o=0;o<j.length;o++){var p=j[o],q=null;if(-1!==p.indexOf(":")){var r=p.split(":");p=r[0],q=parseInt(r[1],10)}for(var s={};n[p.charAt(p.length-1)];)s[p.charAt(p.length-1)]=!0,p=p.substring(0,p.length-1);var t={truncate:q,name:p,suffices:s};k.push(t),l[p]=t,i.push(p)}var u=function(b){for(var c="",i=0,j=0;j<k.length;j++){var l=k[j],m=b(l.name);if(null===m||void 0===m||Array.isArray(m)&&0===m.length||"object"==typeof m&&0===Object.keys(m).length)i++;else if(c+=j===i?e:d||",",Array.isArray(m)){g&&(c+=l.name+"=");for(var n=0;n<m.length;n++)n>0&&(c+=l.suffices["*"]?d||",":",",l.suffices["*"]&&g&&(c+=l.name+"=")),c+=f?encodeURIComponent(m[n]).replace(/!/g,"%21"):a(m[n])}else if("object"==typeof m){g&&!l.suffices["*"]&&(c+=l.name+"=");var o=!0;for(var p in m)o||(c+=l.suffices["*"]?d||",":","),o=!1,c+=f?encodeURIComponent(p).replace(/!/g,"%21"):a(p),c+=l.suffices["*"]?"=":",",c+=f?encodeURIComponent(m[p]).replace(/!/g,"%21"):a(m[p])}else g&&(c+=l.name,h&&""===m||(c+="=")),null!=l.truncate&&(m=m.substring(0,l.truncate)),c+=f?encodeURIComponent(m).replace(/!/g,"%21"):a(m)}return c};return u.varNames=i,{prefix:e,substitution:u}}function c(a){if(!(this instanceof c))return new c(a);for(var d=a.split("{"),e=[d.shift()],f=[],g=[],h=[];d.length>0;){var i=d.shift(),j=i.split("}")[0],k=i.substring(j.length+1),l=b(j);g.push(l.substitution),f.push(l.prefix),e.push(k),h=h.concat(l.substitution.varNames)}this.fill=function(a){for(var b=e[0],c=0;c<g.length;c++){var d=g[c];b+=d(a),b+=e[c+1]}return b},this.varNames=h,this.template=a}function d(a,b){if(a===b)return!0;if(a&&b&&"object"==typeof a&&"object"==typeof b){if(Array.isArray(a)!==Array.isArray(b))return!1;if(Array.isArray(a)){if(a.length!==b.length)return!1;for(var c=0;c<a.length;c++)if(!d(a[c],b[c]))return!1}else{var e;for(e in a)if(void 0===b[e]&&void 0!==a[e])return!1;for(e in b)if(void 0===a[e]&&void 0!==b[e])return!1;for(e in a)if(!d(a[e],b[e]))return!1}return!0}return!1}function e(a){var b=String(a).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);return b?{href:b[0]||"",protocol:b[1]||"",authority:b[2]||"",host:b[3]||"",hostname:b[4]||"",port:b[5]||"",pathname:b[6]||"",search:b[7]||"",hash:b[8]||""}:null}function f(a,b){function c(a){var b=[];return a.replace(/^(\.\.?(\/|$))+/,"").replace(/\/(\.(\/|$))+/g,"/").replace(/\/\.\.$/,"/../").replace(/\/?[^\/]*/g,function(a){"/.."===a?b.pop():b.push(a)}),b.join("").replace(/^\//,"/"===a.charAt(0)?"/":"")}return b=e(b||""),a=e(a||""),b&&a?(b.protocol||a.protocol)+(b.protocol||b.authority?b.authority:a.authority)+c(b.protocol||b.authority||"/"===b.pathname.charAt(0)?b.pathname:b.pathname?(a.authority&&!a.pathname?"/":"")+a.pathname.slice(0,a.pathname.lastIndexOf("/")+1)+b.pathname:a.pathname)+(b.protocol||b.authority||b.pathname?b.search:b.search||a.search)+b.hash:null}function g(a){return a.split("#")[0]}function h(a,b){if(a&&"object"==typeof a)if(void 0===b?b=a.id:"string"==typeof a.id&&(b=f(b,a.id),a.id=b),Array.isArray(a))for(var c=0;c<a.length;c++)h(a[c],b);else{"string"==typeof a.$ref&&(a.$ref=f(b,a.$ref));for(var d in a)"enum"!==d&&h(a[d],b)}}function i(a){a=a||"en";var b=v[a];return function(a){var c=b[a.code]||u[a.code];if("string"!=typeof c)return"Unknown error code "+a.code+": "+JSON.stringify(a.messageParams);var d=a.params;return c.replace(/\{([^{}]*)\}/g,function(a,b){var c=d[b];return"string"==typeof c||"number"==typeof c?c:a})}}function j(a,b,c,d,e){if(Error.call(this),void 0===a)throw new Error("No error code supplied: "+d);this.message="",this.params=b,this.code=a,this.dataPath=c||"",this.schemaPath=d||"",this.subErrors=e||null;var f=new Error(this.message);if(this.stack=f.stack||f.stacktrace,!this.stack)try{throw f}catch(f){this.stack=f.stack||f.stacktrace}}function k(a,b){if(b.substring(0,a.length)===a){var c=b.substring(a.length);if(b.length>0&&"/"===b.charAt(a.length-1)||"#"===c.charAt(0)||"?"===c.charAt(0))return!0}return!1}function l(a){var b,c,d=new o,e={setErrorReporter:function(a){return"string"==typeof a?this.language(a):(c=a,!0)},addFormat:function(){d.addFormat.apply(d,arguments)},language:function(a){return a?(v[a]||(a=a.split("-")[0]),v[a]?(b=a,a):!1):b},addLanguage:function(a,b){var c;for(c in r)b[c]&&!b[r[c]]&&(b[r[c]]=b[c]);var d=a.split("-")[0];if(v[d]){v[a]=Object.create(v[d]);for(c in b)"undefined"==typeof v[d][c]&&(v[d][c]=b[c]),v[a][c]=b[c]}else v[a]=b,v[d]=b;return this},freshApi:function(a){var b=l();return a&&b.language(a),b},validate:function(a,e,f,g){var h=i(b),j=c?function(a,b,d){return c(a,b,d)||h(a,b,d)}:h,k=new o(d,!1,j,f,g);"string"==typeof e&&(e={$ref:e}),k.addSchema("",e);var l=k.validateAll(a,e,null,null,"");return!l&&g&&(l=k.banUnknownProperties(a,e)),this.error=l,this.missing=k.missing,this.valid=null===l,this.valid},validateResult:function(){var a={};return this.validate.apply(a,arguments),a},validateMultiple:function(a,e,f,g){var h=i(b),j=c?function(a,b,d){return c(a,b,d)||h(a,b,d)}:h,k=new o(d,!0,j,f,g);"string"==typeof e&&(e={$ref:e}),k.addSchema("",e),k.validateAll(a,e,null,null,""),g&&k.banUnknownProperties(a,e);var l={};return l.errors=k.errors,l.missing=k.missing,l.valid=0===l.errors.length,l},addSchema:function(){return d.addSchema.apply(d,arguments)},getSchema:function(){return d.getSchema.apply(d,arguments)},getSchemaMap:function(){return d.getSchemaMap.apply(d,arguments)},getSchemaUris:function(){return d.getSchemaUris.apply(d,arguments)},getMissingUris:function(){return d.getMissingUris.apply(d,arguments)},dropSchemas:function(){d.dropSchemas.apply(d,arguments)},defineKeyword:function(){d.defineKeyword.apply(d,arguments)},defineError:function(a,b,c){if("string"!=typeof a||!/^[A-Z]+(_[A-Z]+)*$/.test(a))throw new Error("Code name must be a string in UPPER_CASE_WITH_UNDERSCORES");if("number"!=typeof b||b%1!==0||1e4>b)throw new Error("Code number must be an integer > 10000");if("undefined"!=typeof r[a])throw new Error("Error already defined: "+a+" as "+r[a]);if("undefined"!=typeof s[b])throw new Error("Error code already used: "+s[b]+" as "+b);r[a]=b,s[b]=a,u[a]=u[b]=c;for(var d in v){var e=v[d];e[a]&&(e[b]=e[b]||e[a])}},reset:function(){d.reset(),this.error=null,this.missing=[],this.valid=!0},missing:[],error:null,valid:!0,normSchema:h,resolveUrl:f,getDocumentUri:g,errorCodes:r};return e.language(a||"en"),e}Object.keys||(Object.keys=function(){var a=Object.prototype.hasOwnProperty,b=!{toString:null}.propertyIsEnumerable("toString"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],d=c.length;return function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on non-object");var f=[];for(var g in e)a.call(e,g)&&f.push(g);if(b)for(var h=0;d>h;h++)a.call(e,c[h])&&f.push(c[h]);return f}}()),Object.create||(Object.create=function(){function a(){}return function(b){if(1!==arguments.length)throw new Error("Object.create implementation only accepts one parameter.");return a.prototype=b,new a}}()),Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){if(null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>1&&(d=Number(arguments[1]),d!==d?d=0:0!==d&&d!==1/0&&d!==-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1}),Object.isFrozen||(Object.isFrozen=function(a){for(var b="tv4_test_frozen_key";a.hasOwnProperty(b);)b+=Math.random();try{return a[b]=!0,delete a[b],!1}catch(c){return!0}});var m={"+":!0,"#":!0,".":!0,"/":!0,";":!0,"?":!0,"&":!0},n={"*":!0};c.prototype={toString:function(){return this.template},fillFromObject:function(a){return this.fill(function(b){return a[b]})}};var o=function(a,b,c,d,e){if(this.missing=[],this.missingMap={},this.formatValidators=a?Object.create(a.formatValidators):{},this.schemas=a?Object.create(a.schemas):{},this.collectMultiple=b,this.errors=[],this.handleError=b?this.collectError:this.returnError,d&&(this.checkRecursive=!0,this.scanned=[],this.scannedFrozen=[],this.scannedFrozenSchemas=[],this.scannedFrozenValidationErrors=[],this.validatedSchemasKey="tv4_validation_id",this.validationErrorsKey="tv4_validation_errors_id"),e&&(this.trackUnknownProperties=!0,this.knownPropertyPaths={},this.unknownPropertyPaths={}),this.errorReporter=c||i("en"),"string"==typeof this.errorReporter)throw new Error("debug");if(this.definedKeywords={},a)for(var f in a.definedKeywords)this.definedKeywords[f]=a.definedKeywords[f].slice(0)};o.prototype.defineKeyword=function(a,b){this.definedKeywords[a]=this.definedKeywords[a]||[],this.definedKeywords[a].push(b)},o.prototype.createError=function(a,b,c,d,e,f,g){var h=new j(a,b,c,d,e);return h.message=this.errorReporter(h,f,g),h},o.prototype.returnError=function(a){return a},o.prototype.collectError=function(a){return a&&this.errors.push(a),null},o.prototype.prefixErrors=function(a,b,c){for(var d=a;d<this.errors.length;d++)this.errors[d]=this.errors[d].prefixWith(b,c);return this},o.prototype.banUnknownProperties=function(a,b){for(var c in this.unknownPropertyPaths){var d=this.createError(r.UNKNOWN_PROPERTY,{path:c},c,"",null,a,b),e=this.handleError(d);if(e)return e}return null},o.prototype.addFormat=function(a,b){if("object"==typeof a){for(var c in a)this.addFormat(c,a[c]);return this}this.formatValidators[a]=b},o.prototype.resolveRefs=function(a,b){if(void 0!==a.$ref){if(b=b||{},b[a.$ref])return this.createError(r.CIRCULAR_REFERENCE,{urls:Object.keys(b).join(", ")},"","",null,void 0,a);b[a.$ref]=!0,a=this.getSchema(a.$ref,b)}return a},o.prototype.getSchema=function(a,b){var c;if(void 0!==this.schemas[a])return c=this.schemas[a],this.resolveRefs(c,b);var d=a,e="";if(-1!==a.indexOf("#")&&(e=a.substring(a.indexOf("#")+1),d=a.substring(0,a.indexOf("#"))),"object"==typeof this.schemas[d]){c=this.schemas[d];var f=decodeURIComponent(e);if(""===f)return this.resolveRefs(c,b);if("/"!==f.charAt(0))return void 0;for(var g=f.split("/").slice(1),h=0;h<g.length;h++){var i=g[h].replace(/~1/g,"/").replace(/~0/g,"~");if(void 0===c[i]){c=void 0;break}c=c[i]}if(void 0!==c)return this.resolveRefs(c,b)}void 0===this.missing[d]&&(this.missing.push(d),this.missing[d]=d,this.missingMap[d]=d)},o.prototype.searchSchemas=function(a,b){if(Array.isArray(a))for(var c=0;c<a.length;c++)this.searchSchemas(a[c],b);else if(a&&"object"==typeof a){"string"==typeof a.id&&k(b,a.id)&&void 0===this.schemas[a.id]&&(this.schemas[a.id]=a);for(var d in a)if("enum"!==d)if("object"==typeof a[d])this.searchSchemas(a[d],b);else if("$ref"===d){var e=g(a[d]);e&&void 0===this.schemas[e]&&void 0===this.missingMap[e]&&(this.missingMap[e]=e)}}},o.prototype.addSchema=function(a,b){if("string"!=typeof a||"undefined"==typeof b){if("object"!=typeof a||"string"!=typeof a.id)return;b=a,a=b.id}a===g(a)+"#"&&(a=g(a)),this.schemas[a]=b,delete this.missingMap[a],h(b,a),this.searchSchemas(b,a)},o.prototype.getSchemaMap=function(){var a={};for(var b in this.schemas)a[b]=this.schemas[b];return a},o.prototype.getSchemaUris=function(a){var b=[];for(var c in this.schemas)(!a||a.test(c))&&b.push(c);return b},o.prototype.getMissingUris=function(a){var b=[];for(var c in this.missingMap)(!a||a.test(c))&&b.push(c);return b},o.prototype.dropSchemas=function(){this.schemas={},this.reset()},o.prototype.reset=function(){this.missing=[],this.missingMap={},this.errors=[]},o.prototype.validateAll=function(a,b,c,d,e){var f;if(b=this.resolveRefs(b),!b)return null;if(b instanceof j)return this.errors.push(b),b;var g,h=this.errors.length,i=null,k=null;if(this.checkRecursive&&a&&"object"==typeof a){if(f=!this.scanned.length,a[this.validatedSchemasKey]){var l=a[this.validatedSchemasKey].indexOf(b);if(-1!==l)return this.errors=this.errors.concat(a[this.validationErrorsKey][l]),null}if(Object.isFrozen(a)&&(g=this.scannedFrozen.indexOf(a),-1!==g)){var m=this.scannedFrozenSchemas[g].indexOf(b);if(-1!==m)return this.errors=this.errors.concat(this.scannedFrozenValidationErrors[g][m]),null}if(this.scanned.push(a),Object.isFrozen(a))-1===g&&(g=this.scannedFrozen.length,this.scannedFrozen.push(a),this.scannedFrozenSchemas.push([])),i=this.scannedFrozenSchemas[g].length,this.scannedFrozenSchemas[g][i]=b,this.scannedFrozenValidationErrors[g][i]=[];else{if(!a[this.validatedSchemasKey])try{Object.defineProperty(a,this.validatedSchemasKey,{value:[],configurable:!0}),Object.defineProperty(a,this.validationErrorsKey,{value:[],configurable:!0})}catch(n){a[this.validatedSchemasKey]=[],a[this.validationErrorsKey]=[]}k=a[this.validatedSchemasKey].length,a[this.validatedSchemasKey][k]=b,a[this.validationErrorsKey][k]=[]}}var o=this.errors.length,p=this.validateBasic(a,b,e)||this.validateNumeric(a,b,e)||this.validateString(a,b,e)||this.validateArray(a,b,e)||this.validateObject(a,b,e)||this.validateCombinations(a,b,e)||this.validateHypermedia(a,b,e)||this.validateFormat(a,b,e)||this.validateDefinedKeywords(a,b,e)||null;if(f){for(;this.scanned.length;){var q=this.scanned.pop();delete q[this.validatedSchemasKey]}this.scannedFrozen=[],this.scannedFrozenSchemas=[]}if(p||o!==this.errors.length)for(;c&&c.length||d&&d.length;){var r=c&&c.length?""+c.pop():null,s=d&&d.length?""+d.pop():null;p&&(p=p.prefixWith(r,s)),this.prefixErrors(o,r,s)}return null!==i?this.scannedFrozenValidationErrors[g][i]=this.errors.slice(h):null!==k&&(a[this.validationErrorsKey][k]=this.errors.slice(h)),this.handleError(p)},o.prototype.validateFormat=function(a,b){if("string"!=typeof b.format||!this.formatValidators[b.format])return null;var c=this.formatValidators[b.format].call(null,a,b);return"string"==typeof c||"number"==typeof c?this.createError(r.FORMAT_CUSTOM,{message:c},"","/format",null,a,b):c&&"object"==typeof c?this.createError(r.FORMAT_CUSTOM,{message:c.message||"?"},c.dataPath||"",c.schemaPath||"/format",null,a,b):null},o.prototype.validateDefinedKeywords=function(a,b,c){for(var d in this.definedKeywords)if("undefined"!=typeof b[d])for(var e=this.definedKeywords[d],f=0;f<e.length;f++){var g=e[f],h=g(a,b[d],b,c);if("string"==typeof h||"number"==typeof h)return this.createError(r.KEYWORD_CUSTOM,{key:d,message:h},"","",null,a,b).prefixWith(null,d);if(h&&"object"==typeof h){var i=h.code;if("string"==typeof i){if(!r[i])throw new Error("Undefined error code (use defineError): "+i);i=r[i]}else"number"!=typeof i&&(i=r.KEYWORD_CUSTOM);var j="object"==typeof h.message?h.message:{key:d,message:h.message||"?"},k=h.schemaPath||"/"+d.replace(/~/g,"~0").replace(/\//g,"~1");return this.createError(i,j,h.dataPath||null,k,null,a,b)}}return null},o.prototype.validateBasic=function(a,b,c){var d;return(d=this.validateType(a,b,c))?d.prefixWith(null,"type"):(d=this.validateEnum(a,b,c))?d.prefixWith(null,"type"):null},o.prototype.validateType=function(a,b){if(void 0===b.type)return null;var c=typeof a;null===a?c="null":Array.isArray(a)&&(c="array");var d=b.type;Array.isArray(d)||(d=[d]);for(var e=0;e<d.length;e++){var f=d[e];if(f===c||"integer"===f&&"number"===c&&a%1===0)return null}return this.createError(r.INVALID_TYPE,{type:c,expected:d.join("/")},"","",null,a,b)},o.prototype.validateEnum=function(a,b){if(void 0===b["enum"])return null;for(var c=0;c<b["enum"].length;c++){var e=b["enum"][c];if(d(a,e))return null}return this.createError(r.ENUM_MISMATCH,{value:"undefined"!=typeof JSON?JSON.stringify(a):a},"","",null,a,b)},o.prototype.validateNumeric=function(a,b,c){return this.validateMultipleOf(a,b,c)||this.validateMinMax(a,b,c)||this.validateNaN(a,b,c)||null};var p=Math.pow(2,-51),q=1-p;o.prototype.validateMultipleOf=function(a,b){var c=b.multipleOf||b.divisibleBy;if(void 0===c)return null;if("number"==typeof a){var d=a/c%1;if(d>=p&&q>d)return this.createError(r.NUMBER_MULTIPLE_OF,{value:a,multipleOf:c},"","",null,a,b)}return null},o.prototype.validateMinMax=function(a,b){if("number"!=typeof a)return null;if(void 0!==b.minimum){if(a<b.minimum)return this.createError(r.NUMBER_MINIMUM,{value:a,minimum:b.minimum},"","/minimum",null,a,b);if(b.exclusiveMinimum&&a===b.minimum)return this.createError(r.NUMBER_MINIMUM_EXCLUSIVE,{value:a,minimum:b.minimum},"","/exclusiveMinimum",null,a,b)}if(void 0!==b.maximum){if(a>b.maximum)return this.createError(r.NUMBER_MAXIMUM,{value:a,maximum:b.maximum},"","/maximum",null,a,b);if(b.exclusiveMaximum&&a===b.maximum)return this.createError(r.NUMBER_MAXIMUM_EXCLUSIVE,{value:a,maximum:b.maximum},"","/exclusiveMaximum",null,a,b)}return null},o.prototype.validateNaN=function(a,b){return"number"!=typeof a?null:isNaN(a)===!0||a===1/0||a===-(1/0)?this.createError(r.NUMBER_NOT_A_NUMBER,{value:a},"","/type",null,a,b):null},o.prototype.validateString=function(a,b,c){return this.validateStringLength(a,b,c)||this.validateStringPattern(a,b,c)||null},o.prototype.validateStringLength=function(a,b){return"string"!=typeof a?null:void 0!==b.minLength&&a.length<b.minLength?this.createError(r.STRING_LENGTH_SHORT,{length:a.length,minimum:b.minLength},"","/minLength",null,a,b):void 0!==b.maxLength&&a.length>b.maxLength?this.createError(r.STRING_LENGTH_LONG,{length:a.length,maximum:b.maxLength},"","/maxLength",null,a,b):null},o.prototype.validateStringPattern=function(a,b){if("string"!=typeof a||"string"!=typeof b.pattern&&!(b.pattern instanceof RegExp))return null;var c;if(b.pattern instanceof RegExp)c=b.pattern;else{var d,e="",f=b.pattern.match(/^\/(.+)\/([img]*)$/);f?(d=f[1],e=f[2]):d=b.pattern,c=new RegExp(d,e)}return c.test(a)?null:this.createError(r.STRING_PATTERN,{pattern:b.pattern},"","/pattern",null,a,b)},o.prototype.validateArray=function(a,b,c){return Array.isArray(a)?this.validateArrayLength(a,b,c)||this.validateArrayUniqueItems(a,b,c)||this.validateArrayItems(a,b,c)||null:null},o.prototype.validateArrayLength=function(a,b){var c;return void 0!==b.minItems&&a.length<b.minItems&&(c=this.createError(r.ARRAY_LENGTH_SHORT,{length:a.length,minimum:b.minItems},"","/minItems",null,a,b),this.handleError(c))?c:void 0!==b.maxItems&&a.length>b.maxItems&&(c=this.createError(r.ARRAY_LENGTH_LONG,{length:a.length,maximum:b.maxItems},"","/maxItems",null,a,b),this.handleError(c))?c:null},o.prototype.validateArrayUniqueItems=function(a,b){if(b.uniqueItems)for(var c=0;c<a.length;c++)for(var e=c+1;e<a.length;e++)if(d(a[c],a[e])){var f=this.createError(r.ARRAY_UNIQUE,{match1:c,match2:e},"","/uniqueItems",null,a,b);if(this.handleError(f))return f}return null},o.prototype.validateArrayItems=function(a,b,c){if(void 0===b.items)return null;var d,e;if(Array.isArray(b.items)){for(e=0;e<a.length;e++)if(e<b.items.length){if(d=this.validateAll(a[e],b.items[e],[e],["items",e],c+"/"+e))return d}else if(void 0!==b.additionalItems)if("boolean"==typeof b.additionalItems){if(!b.additionalItems&&(d=this.createError(r.ARRAY_ADDITIONAL_ITEMS,{},"/"+e,"/additionalItems",null,a,b),this.handleError(d)))return d}else if(d=this.validateAll(a[e],b.additionalItems,[e],["additionalItems"],c+"/"+e))return d}else for(e=0;e<a.length;e++)if(d=this.validateAll(a[e],b.items,[e],["items"],c+"/"+e))return d;return null},o.prototype.validateObject=function(a,b,c){return"object"!=typeof a||null===a||Array.isArray(a)?null:this.validateObjectMinMaxProperties(a,b,c)||this.validateObjectRequiredProperties(a,b,c)||this.validateObjectProperties(a,b,c)||this.validateObjectDependencies(a,b,c)||null},o.prototype.validateObjectMinMaxProperties=function(a,b){var c,d=Object.keys(a);return void 0!==b.minProperties&&d.length<b.minProperties&&(c=this.createError(r.OBJECT_PROPERTIES_MINIMUM,{propertyCount:d.length,minimum:b.minProperties},"","/minProperties",null,a,b),this.handleError(c))?c:void 0!==b.maxProperties&&d.length>b.maxProperties&&(c=this.createError(r.OBJECT_PROPERTIES_MAXIMUM,{propertyCount:d.length,maximum:b.maxProperties},"","/maxProperties",null,a,b),this.handleError(c))?c:null},o.prototype.validateObjectRequiredProperties=function(a,b){if(void 0!==b.required)for(var c=0;c<b.required.length;c++){var d=b.required[c];if(void 0===a[d]){var e=this.createError(r.OBJECT_REQUIRED,{key:d},"","/required/"+c,null,a,b);if(this.handleError(e))return e}}return null},o.prototype.validateObjectProperties=function(a,b,c){var d;for(var e in a){var f=c+"/"+e.replace(/~/g,"~0").replace(/\//g,"~1"),g=!1;if(void 0!==b.properties&&void 0!==b.properties[e]&&(g=!0,d=this.validateAll(a[e],b.properties[e],[e],["properties",e],f)))return d;if(void 0!==b.patternProperties)for(var h in b.patternProperties){var i=new RegExp(h);if(i.test(e)&&(g=!0,d=this.validateAll(a[e],b.patternProperties[h],[e],["patternProperties",h],f)))return d}if(g)this.trackUnknownProperties&&(this.knownPropertyPaths[f]=!0,delete this.unknownPropertyPaths[f]);else if(void 0!==b.additionalProperties){if(this.trackUnknownProperties&&(this.knownPropertyPaths[f]=!0,delete this.unknownPropertyPaths[f]),"boolean"==typeof b.additionalProperties){if(!b.additionalProperties&&(d=this.createError(r.OBJECT_ADDITIONAL_PROPERTIES,{key:e},"","/additionalProperties",null,a,b).prefixWith(e,null),this.handleError(d)))return d}else if(d=this.validateAll(a[e],b.additionalProperties,[e],["additionalProperties"],f))return d}else this.trackUnknownProperties&&!this.knownPropertyPaths[f]&&(this.unknownPropertyPaths[f]=!0)}return null},o.prototype.validateObjectDependencies=function(a,b,c){var d;if(void 0!==b.dependencies)for(var e in b.dependencies)if(void 0!==a[e]){var f=b.dependencies[e];if("string"==typeof f){if(void 0===a[f]&&(d=this.createError(r.OBJECT_DEPENDENCY_KEY,{key:e,missing:f},"","",null,a,b).prefixWith(null,e).prefixWith(null,"dependencies"),this.handleError(d)))return d}else if(Array.isArray(f))for(var g=0;g<f.length;g++){var h=f[g];if(void 0===a[h]&&(d=this.createError(r.OBJECT_DEPENDENCY_KEY,{key:e,missing:h},"","/"+g,null,a,b).prefixWith(null,e).prefixWith(null,"dependencies"),this.handleError(d)))return d}else if(d=this.validateAll(a,f,[],["dependencies",e],c))return d}return null},o.prototype.validateCombinations=function(a,b,c){return this.validateAllOf(a,b,c)||this.validateAnyOf(a,b,c)||this.validateOneOf(a,b,c)||this.validateNot(a,b,c)||null},o.prototype.validateAllOf=function(a,b,c){if(void 0===b.allOf)return null;for(var d,e=0;e<b.allOf.length;e++){var f=b.allOf[e];if(d=this.validateAll(a,f,[],["allOf",e],c))return d}return null},o.prototype.validateAnyOf=function(a,b,c){if(void 0===b.anyOf)return null;var d,e,f=[],g=this.errors.length;this.trackUnknownProperties&&(d=this.unknownPropertyPaths,e=this.knownPropertyPaths);for(var h=!0,i=0;i<b.anyOf.length;i++){this.trackUnknownProperties&&(this.unknownPropertyPaths={},this.knownPropertyPaths={});var j=b.anyOf[i],k=this.errors.length,l=this.validateAll(a,j,[],["anyOf",i],c);if(null===l&&k===this.errors.length){if(this.errors=this.errors.slice(0,g),this.trackUnknownProperties){for(var m in this.knownPropertyPaths)e[m]=!0,delete d[m];for(var n in this.unknownPropertyPaths)e[n]||(d[n]=!0);h=!1;continue}return null}l&&f.push(l.prefixWith(null,""+i).prefixWith(null,"anyOf"))}return this.trackUnknownProperties&&(this.unknownPropertyPaths=d,this.knownPropertyPaths=e),h?(f=f.concat(this.errors.slice(g)),this.errors=this.errors.slice(0,g),this.createError(r.ANY_OF_MISSING,{},"","/anyOf",f,a,b)):void 0},o.prototype.validateOneOf=function(a,b,c){if(void 0===b.oneOf)return null;var d,e,f=null,g=[],h=this.errors.length;this.trackUnknownProperties&&(d=this.unknownPropertyPaths,e=this.knownPropertyPaths);for(var i=0;i<b.oneOf.length;i++){this.trackUnknownProperties&&(this.unknownPropertyPaths={},this.knownPropertyPaths={});var j=b.oneOf[i],k=this.errors.length,l=this.validateAll(a,j,[],["oneOf",i],c);if(null===l&&k===this.errors.length){if(null!==f)return this.errors=this.errors.slice(0,h),this.createError(r.ONE_OF_MULTIPLE,{index1:f,index2:i},"","/oneOf",null,a,b);if(f=i,this.trackUnknownProperties){for(var m in this.knownPropertyPaths)e[m]=!0,delete d[m];for(var n in this.unknownPropertyPaths)e[n]||(d[n]=!0)}}else l&&g.push(l)}return this.trackUnknownProperties&&(this.unknownPropertyPaths=d,this.knownPropertyPaths=e),null===f?(g=g.concat(this.errors.slice(h)),this.errors=this.errors.slice(0,h),this.createError(r.ONE_OF_MISSING,{},"","/oneOf",g,a,b)):(this.errors=this.errors.slice(0,h),null)},o.prototype.validateNot=function(a,b,c){if(void 0===b.not)return null;var d,e,f=this.errors.length;this.trackUnknownProperties&&(d=this.unknownPropertyPaths,e=this.knownPropertyPaths,this.unknownPropertyPaths={},this.knownPropertyPaths={});var g=this.validateAll(a,b.not,null,null,c),h=this.errors.slice(f);return this.errors=this.errors.slice(0,f),this.trackUnknownProperties&&(this.unknownPropertyPaths=d,this.knownPropertyPaths=e),null===g&&0===h.length?this.createError(r.NOT_PASSED,{},"","/not",null,a,b):null},o.prototype.validateHypermedia=function(a,b,d){if(!b.links)return null;for(var e,f=0;f<b.links.length;f++){var g=b.links[f];if("describedby"===g.rel){for(var h=new c(g.href),i=!0,j=0;j<h.varNames.length;j++)if(!(h.varNames[j]in a)){i=!1;break}if(i){var k=h.fillFromObject(a),l={$ref:k};if(e=this.validateAll(a,l,[],["links",f],d))return e}}}};var r={INVALID_TYPE:0,ENUM_MISMATCH:1,ANY_OF_MISSING:10,ONE_OF_MISSING:11,ONE_OF_MULTIPLE:12,NOT_PASSED:13,NUMBER_MULTIPLE_OF:100,NUMBER_MINIMUM:101,NUMBER_MINIMUM_EXCLUSIVE:102,NUMBER_MAXIMUM:103,NUMBER_MAXIMUM_EXCLUSIVE:104,NUMBER_NOT_A_NUMBER:105,STRING_LENGTH_SHORT:200,STRING_LENGTH_LONG:201,STRING_PATTERN:202,OBJECT_PROPERTIES_MINIMUM:300,OBJECT_PROPERTIES_MAXIMUM:301,OBJECT_REQUIRED:302,OBJECT_ADDITIONAL_PROPERTIES:303,OBJECT_DEPENDENCY_KEY:304,ARRAY_LENGTH_SHORT:400,ARRAY_LENGTH_LONG:401,ARRAY_UNIQUE:402,ARRAY_ADDITIONAL_ITEMS:403,FORMAT_CUSTOM:500,KEYWORD_CUSTOM:501,CIRCULAR_REFERENCE:600,UNKNOWN_PROPERTY:1e3},s={};for(var t in r)s[r[t]]=t;var u={INVALID_TYPE:"Invalid type: {type} (expected {expected})",ENUM_MISMATCH:"No enum match for: {value}",ANY_OF_MISSING:'Data does not match any schemas from "anyOf"',ONE_OF_MISSING:'Data does not match any schemas from "oneOf"',ONE_OF_MULTIPLE:'Data is valid against more than one schema from "oneOf": indices {index1} and {index2}',NOT_PASSED:'Data matches schema from "not"',NUMBER_MULTIPLE_OF:"Value {value} is not a multiple of {multipleOf}",NUMBER_MINIMUM:"Value {value} is less than minimum {minimum}",NUMBER_MINIMUM_EXCLUSIVE:"Value {value} is equal to exclusive minimum {minimum}",NUMBER_MAXIMUM:"Value {value} is greater than maximum {maximum}",NUMBER_MAXIMUM_EXCLUSIVE:"Value {value} is equal to exclusive maximum {maximum}",NUMBER_NOT_A_NUMBER:"Value {value} is not a valid number",STRING_LENGTH_SHORT:"String is too short ({length} chars), minimum {minimum}",STRING_LENGTH_LONG:"String is too long ({length} chars), maximum {maximum}",STRING_PATTERN:"String does not match pattern: {pattern}",OBJECT_PROPERTIES_MINIMUM:"Too few properties defined ({propertyCount}), minimum {minimum}",OBJECT_PROPERTIES_MAXIMUM:"Too many properties defined ({propertyCount}), maximum {maximum}",OBJECT_REQUIRED:"Missing required property: {key}",OBJECT_ADDITIONAL_PROPERTIES:"Additional properties not allowed",OBJECT_DEPENDENCY_KEY:"Dependency failed - key must exist: {missing} (due to key: {key})",ARRAY_LENGTH_SHORT:"Array is too short ({length}), minimum {minimum}",ARRAY_LENGTH_LONG:"Array is too long ({length}), maximum {maximum}",ARRAY_UNIQUE:"Array items are not unique (indices {match1} and {match2})",ARRAY_ADDITIONAL_ITEMS:"Additional items not allowed",FORMAT_CUSTOM:"Format validation failed ({message})",KEYWORD_CUSTOM:"Keyword failed: {key} ({message})",CIRCULAR_REFERENCE:"Circular $refs: {urls}",UNKNOWN_PROPERTY:"Unknown property (not in schema)"};j.prototype=Object.create(Error.prototype),j.prototype.constructor=j,j.prototype.name="ValidationError",j.prototype.prefixWith=function(a,b){if(null!==a&&(a=a.replace(/~/g,"~0").replace(/\//g,"~1"),this.dataPath="/"+a+this.dataPath),null!==b&&(b=b.replace(/~/g,"~0").replace(/\//g,"~1"),this.schemaPath="/"+b+this.schemaPath),null!==this.subErrors)for(var c=0;c<this.subErrors.length;c++)this.subErrors[c].prefixWith(a,b);return this};var v={},w=l();return w.addLanguage("en-gb",u),w.tv4=w,w});
\ No newline at end of file

Debdiff

File lists identical (after any substitutions)

No differences were encountered in the control files

More details

Full run details