├── .gitignore ├── .gitmodules ├── .travis.yml ├── README.md ├── bin └── jsedn ├── build.sh ├── component.json ├── index.html ├── index.js ├── jsedn.js ├── lib ├── atPath.js ├── atoms.js ├── collections.js ├── compile.js ├── encode.js ├── memo.js ├── reader.js ├── tags.js ├── tokens.js ├── type.js └── unify.js ├── package.json ├── src ├── atPath.coffee ├── atoms.coffee ├── collections.coffee ├── compile.coffee ├── encode.coffee ├── memo.coffee ├── reader.coffee ├── tags.coffee ├── tokens.coffee ├── type.coffee └── unify.coffee └── test ├── all-edn-tests.coffee ├── all-invalid-edn-tests.coffee ├── assertion.coffee ├── perf.coffee ├── performance-json ├── items.edn ├── large-keyword-map.json ├── large-symbol-map.json ├── list-of-nil.json ├── map-of-maps.json ├── map-tree.json ├── mixed-vector.json ├── set-of-keywords.json ├── set-of-longs.json ├── set-of-symbols.json ├── vector-of-bigdecs.json ├── vector-of-bigints.json ├── vector-of-booleans.json ├── vector-of-chars.json ├── vector-of-doubles.json ├── vector-of-instants.json ├── vector-of-ints.json ├── vector-of-keywords.json ├── vector-of-longs.json ├── vector-of-maps.json ├── vector-of-nil.json ├── vector-of-strings.json ├── vector-of-symbols.json ├── vector-of-uuid.json ├── vector-of-vectors.json └── vector-tree.json ├── performance-tests.coffee ├── primitives.coffee ├── test.edn └── unify.coffee /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /components 3 | /node_modules 4 | .nyc_output 5 | coverage -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "test/edn-tests"] 2 | path = test/edn-tests 3 | url = https://github.com/shaunxcode/edn-tests.git 4 | 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.12" 4 | - "4" 5 | - "6" 6 | - "7" 7 | before_script: 8 | - git submodule update --init 9 | after_script: 10 | - coveralls < coverage/lcov.info 11 | env: 12 | - CXX=g++-4.8 13 | addons: 14 | apt: 15 | sources: 16 | - ubuntu-toolchain-r-test 17 | packages: 18 | - g++-4.8 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | jsedn 2 | ===== 3 | 4 | A javascript implementation of [edn](https://github.com/edn-format/edn). To see it in action checkout the [edn playground](https://shaunxcode.github.com/jsedn). If you open your browser console you will have access to a global jsedn object with which you can try things beside JSON encoding. I recommend `jsedn.unify("[?x was always better than ?y]", {x: "sonic", y: "mario"}).jsEncode()`. 5 | 6 | [![Build Status](https://travis-ci.org/shaunxcode/jsedn.svg?branch=master)](https://travis-ci.org/shaunxcode/jsedn) 7 | [![npm version](https://badge.fury.io/js/jsedn.svg)](https://www.npmjs.com/package/jsedn) 8 | [![Coverage Status](https://coveralls.io/repos/github/shaunxcode/jsedn/badge.svg?branch=master)](https://coveralls.io/github/shaunxcode/jsedn?branch=master) 9 | 10 | 11 | ## Getting Started 12 | 13 | ### Install 14 | 15 | ```bash 16 | npm install jsedn 17 | ``` 18 | 19 | ### Use in a web page directly 20 | Use `jsedn.js`, which is a standalone version that will provide a global "jsedn". 21 | 22 | ### Code 23 | ```js 24 | var edn = require("jsedn"); 25 | var map = edn.parse("{:a 5 [1 2] {:name :mike :age 40}}"); 26 | console.log(map.at(new edn.Vector([1, 2])).at(edn.kw(":name"))); 27 | ``` 28 | 29 | Will output `"mike"`. 30 | 31 | Now the other way: 32 | 33 | ```js 34 | edn.encode({a: 1, "id": 333}); 35 | ``` 36 | 37 | Will output: 38 | 39 | ```clojure 40 | {"a" 1 "id" 333} 41 | ``` 42 | 43 | Finally lets encode js into edn then back to js: 44 | 45 | ```js 46 | edn.parse(edn.encode({ 47 | a: 1, 48 | b: { 49 | age: 30, 50 | feeling: ["electric", "pink"] 51 | } 52 | })).at("b").at("feeling").at(0) 53 | ``` 54 | Will output `"electric"`. Definitely working in both directions. 55 | 56 | ###Command Line 57 | If you have installed via `npm` you will have a jsedn script that accepts input via pipe/stdin. Currently takes: 58 | 59 | * `-s` flag for "select" which you pass a path separated by space 60 | * `-j` encodes input as JSON 61 | * `-p` indicates pretty print for json output 62 | 63 | ```bash 64 | > echo "{:a first-item :b [{:name :walter :age 50 :kids [:A :B :C]}]}" | jsedn -s ":b 0 :kids 2" 65 | outputs: :b 0 :kids 2 => :C 66 | ``` 67 | 68 | ### Testing 69 | I have developed this in a very test driven manner e.g. each test written before the next feature is implemented. Baring that in mind it means any bugs you find it would be awesome if you could edit the tests adding one which clearly indicates the bug/feature request. 70 | 71 | ```bash 72 | npm install 73 | git submodule update --init 74 | npm test 75 | ``` 76 | 77 | ## API 78 | #####parse (ednString) 79 | Will turn a valid edn string into a js object structure based upon the classes details below. 80 | 81 | ```js 82 | edn.parse("{:a-keyword! [1 2 -3.4]}"); 83 | ``` 84 | 85 | #####encode (jsObj) 86 | Will encode both native JS and any object providing a ednEncode method. 87 | 88 | ```js 89 | edn.encode({"a-keyword!": [1,2,-3.4]}); 90 | ``` 91 | 92 | #####setTagAction (tag, action) 93 | Will add the tag action to be performed on any data prepended by said tag. 94 | 95 | ```js 96 | edn.setTagAction(new edn.Tag('myApp', 'tagName'), function(obj) { 97 | //do stuff with obj here and then return it 98 | var mutatedObj = thingsHandlerDoes(obj); 99 | return mutatedObj; 100 | }); 101 | ``` 102 | 103 | #####setTokenPattern (tokenName, pattern) 104 | If for some reason you would like to over-ride or add a new token pattern. 105 | 106 | ```js 107 | edn.setTokenPattern())) 108 | ``` 109 | 110 | #####setTokenAction (tokenName, actionCallback) 111 | Allows for customization of token handling upon match. For instance if you decided you would prefer nil to be represented by undefined instead of null (default). 112 | 113 | ```js 114 | edn.setTokenAction('nil', function(token) { return undefined;}); 115 | ``` 116 | 117 | #####setTypeClass (type, class) 118 | This is useful if you want to over-ride the naive implementations of Map etc. 119 | 120 | ```js 121 | edn.setTypeClass('List', MyListClass)); 122 | ``` 123 | 124 | ##### atPath (obj, path) 125 | Simple way to lookup a value in elements returned from parse. 126 | 127 | ```js 128 | var parsed = edn.parse("[[{:name :frank :kids [{:eye-color :red} {:eye-color :blue}]}]]"); 129 | edn.atPath(parsed, "0 0 :kids 1 :eye-color"); 130 | ``` 131 | 132 | path is a space separated string which consists of index (remember Array/Set/Vector are all 0 indexed) and key locations. 133 | 134 | ##### encodeJson 135 | Provides a json encoding including type information e.g. Vector, List, Set etc. 136 | 137 | ```js 138 | console.log(edn.encodeJson(edn.parse("[1 2 3 {:x 5 :y 6}]"))); 139 | ``` 140 | yields: 141 | ```js 142 | {"Vector":[1,2,3,{"Map":[{"Keyword": ":x"},5,{"Keyword":":y"},6]}]} 143 | ``` 144 | 145 | ##### toJS 146 | Attempts to return a "plain" js object. Bear in mind this will yield poor results if you have any **Map** objects which utilize composite objects as keys. If an object has a **hashId** method it will use that when building the js dict. 147 | 148 | ```js 149 | var jsobj = edn.toJS(edn.parse("[1 2 {:name {:first :ray :last :cappo}}]")); 150 | ``` 151 | yields: 152 | ```js 153 | [1, 2, {":name": {":first": ":ray", ":last": ":cappo"}}] 154 | ``` 155 | 156 | Notice that you can not always go back the other direction. In the example above if you were to edn.parse it you would end up with: 157 | 158 | ```clojure 159 | [1 2 {":name" {":first" ":ray" ":last" ":cappo"}}] 160 | ``` 161 | 162 | In which you have strings for keys instead of keywords. At one point I would "infer" that if a string started with a ":" it would be treated as a keyword. This caused more problems than it resolved which brings us to our next methods. 163 | 164 | ##### kw (string) 165 | Interns a valid keyword into an `edn.Keyword` object e.g: 166 | 167 | ```js 168 | edn.kw(":myns/kw") 169 | ``` 170 | 171 | ##### sym (string) 172 | Interns a valid symbol into an `edn.Symbol` object e.g: 173 | 174 | ```js 175 | edn.sym("?name") 176 | ``` 177 | 178 | ##### unify (data, values, [tokenStart]) 179 | Unifies the first form with the second. Useful for populating a "data template". It accepts either edn objects or strings as arguments. 180 | 181 | ```js 182 | edn.unify("{?key1 ?key1-val ?key2 ?key2-val :all [?key1-val ?key2-val]}", "{key1 :x key1-val 200 key2 :y key2-val 300}"); 183 | ``` 184 | yields: 185 | ```clojure 186 | {:x 200 :y 300 :all [200 300]} 187 | ``` 188 | 189 | A third argument is expected which can be used to indicate the "tokenStart" first character for unify tokens. This defaults to "?". 190 | 191 | An example with Map as data and js obj as values and changing the tokenStart to $ 192 | 193 | ```js 194 | edn.unify(new edn.Map([edn.kw(":place"), edn.sym("$place")]), {place: "salt lake city"}, "$"); 195 | ``` 196 | yields: 197 | ```clojure 198 | {:place "salt lake city"} 199 | ``` 200 | 201 | ## Classes/Interfaces 202 | 203 | #### Symbol 204 | Used to create symbols from with in js for encoding into edn. 205 | 206 | ### Keyword 207 | As above but for keywords. Note that the constructor enforced that keywords start with a ":" character. 208 | 209 | ####Iterable [List Vector Set] 210 | List, Vector and Set all implement the following methods: 211 | 212 | * `exists (key)` -> boolean indicating existance of key 213 | * `at (key)` -> value at key in collection 214 | * `set (key, val)` -> sets key/index to given value 215 | * `each (iter)` -> iterate overa all members calling iter on each, returns results 216 | * `map (iter)` -> iterate over all members calling iter on each and returning a new instace of self 217 | * `walk (iter)` -> recursively walk the data returning a new instance of self 218 | 219 | ####Map 220 | Supports any type of object as key. Supports all of the methods listed for Iterable plus `indexOf` which returns the index of the item, which can be 0 and thus non-truthy. 221 | 222 | `each`, `map` and `walk` all accept a callback which takes the value as the first argument and the key as the second. In the case of map and walk if you want to modify the key you must return a `Pair` object e.g. 223 | 224 | ```js 225 | edn.parse("{:x 300 y: 800}").map(function(val, key){ 226 | return new edn.Pair(edn.kw("#{key}-squared"), val * val); 227 | }); 228 | ``` 229 | yields: 230 | ```clojure 231 | {:x-squared 90000 :y-squared 640000} 232 | ``` 233 | 234 | ####Tag 235 | Used for defining Tag Actions. Has a constructor which accepts 2..n args where the first arg is your a namespace and the rest are used to categorize the tag. **Tag** provides two methods `ns` and `dn`: 236 | 237 | ```js 238 | var tag = new edn.Tag('myApp', 'people', 'special', 'stuff'); 239 | console.log(tag.ns()); => myApp 240 | console.log(tag.dn()); => myApp/people/special/stuff 241 | ``` 242 | 243 | Constructor also supports being passed single argument delimited by / e.g: 244 | ```js 245 | new edn.Tag('myApp/people/special/stuff') 246 | ``` 247 | 248 | ####Tagged 249 | If you do not have tag handlers specified for a given tag you will end up with **Tagged** items in your result which have two methods: 250 | 251 | tag() -> Tag object found 252 | obj() -> Object to be tagged 253 | 254 | **Tagged** pairs can also be used when you want to serialize a js obj into edn w/ said tagging e.g. 255 | 256 | ```js 257 | edn.encode(new edn.Tagged(new edn.Tag("myApp", "Person"), {name: "walter", age: 300})); 258 | ``` 259 | 260 | outputs: 261 | 262 | ```clojure 263 | #myApp/person {"name" "walter" "age" 300} 264 | ``` 265 | 266 | ##Conversion Table 267 | 268 | | element | edn | jsedn | js | 269 | | --------------- | -------------------- | ------------------ | --- | 270 | | nil | ```nil``` | ```null``` | ```null``` | 271 | | boolean | ```true false``` | ```true false``` | ```true false``` | 272 | | character | ```\c``` | ```"c"``` | ```"c"``` | 273 | | string | ```"some string"``` | ```"some string"``` | ```"some string"``` | 274 | | symbol | ```?sym~b~o!ol``` | ```edn.sym "?sym~b~o!ol"``` | ```"?sym~b~o!ol"``` | 275 | | keywords | ```:keyword``` | ```edn.kw ":keyword"```| ```":keyword"``` | 276 | | integer | ```666``` | ```666``` | ```666``` | 277 | | floating point | ```-6.66``` | ```-6.66``` | ```-6.66``` | 278 | | list | ```(a b (c d))``` | ```new edn.List([edn.sym("a"), edn.sym("b"), new edn.List([edn.sym("c"), edn.sym("d")])])``` | ```["a", "b", ["c", "d"]]``` | 279 | | vector | ```[a b c]``` | ```new edn.Vector([edn.sym("a"), edn.sym("b"), edn.sym("c")])``` | ```["a", "b", "c"]``` | 280 | | map | ```{:a 1 :b 2}``` | ```new edn.Map([edn.kw(":a"), 1, edn.kw(":b"), 2])``` | ```{a: 1, b: 2}``` | 281 | | set | ```#{1 2 3}``` | ```new edn.Set([1, 2, 3])``` | ```[1 2 3]``` | 282 | | tagged elements | ```#tagName [1 2]``` | ```new edn.Tagged(new edn.Tag("tagName"), new edn.Vector([1, 2]))``` | n/a | 283 | -------------------------------------------------------------------------------- /bin/jsedn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var program = require('commander'); 4 | var edn = require('../index.js'); 5 | var pkg = require('../package.json'); 6 | 7 | program 8 | .version(pkg.version) 9 | .option('-s, --select [path]', 'select') 10 | .option('-j, --json', 'json') 11 | .option('-p, --pretty', 'pretty') 12 | .parse(process.argv); 13 | 14 | process.stdin.resume(); 15 | process.stdin.setEncoding('utf8'); 16 | 17 | var input = '' 18 | 19 | process.stdin.on('data', function(data) { 20 | input += data; 21 | }); 22 | 23 | process.stdin.on('end', function() { 24 | var parsed = edn.parse(input); 25 | if (program.select) { 26 | console.log(program.select + " => " + edn.encode(edn.atPath(parsed, program.select))); 27 | } else if (program.json) { 28 | console.log(edn.encodeJson(parsed, program.pretty)); 29 | } else { 30 | console.log(edn.encode(parsed)); 31 | } 32 | 33 | process.stdin.destroy(); 34 | }); 35 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | coffee -o lib -c src 2 | component install 3 | component build --standalone jsedn 4 | cp build/build.js ./jsedn.js 5 | 6 | -------------------------------------------------------------------------------- /component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsedn", 3 | "repo": "shaunxcode/jsedn", 4 | "description": "edn parser, encode/decode for js", 5 | "version": "0.3.4", 6 | "keywords": ["edn", "clojure", "datomic", "lisp"], 7 | "dependencies": { 8 | "jkroso/equals": "*", 9 | "component/type": "*" 10 | }, 11 | "development": { 12 | "component/underscore": "*" 13 | }, 14 | "scripts": [ 15 | "index.js", 16 | "lib/atoms.js", 17 | "lib/atPath.js", 18 | "lib/collections.js", 19 | "lib/compile.js", 20 | "lib/encode.js", 21 | "lib/memo.js", 22 | "lib/reader.js", 23 | "lib/tags.js", 24 | "lib/tokens.js", 25 | "lib/type.js", 26 | "lib/unify.js" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | edn playground 5 | 6 | 7 | 8 | 9 | 37 | 38 | 39 | jsedn github 40 |

EDN

41 | 42 | 43 |

JSON

44 |

45 | 	
46 | 	
57 | 
58 | 
59 | 


--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | module.exports = require("./lib/reader.js");


--------------------------------------------------------------------------------
/lib/atPath.js:
--------------------------------------------------------------------------------
 1 | // Generated by CoffeeScript 1.6.1
 2 | (function() {
 3 |   var kw;
 4 | 
 5 |   kw = require("./atoms").kw;
 6 | 
 7 |   module.exports = function(obj, path) {
 8 |     var part, value, _i, _len;
 9 |     path = path.trim().replace(/[ ]{2,}/g, ' ').split(' ');
10 |     value = obj;
11 |     for (_i = 0, _len = path.length; _i < _len; _i++) {
12 |       part = path[_i];
13 |       if (part[0] === ":") {
14 |         part = kw(part);
15 |       }
16 |       if (value.exists) {
17 |         if (value.exists(part) != null) {
18 |           value = value.at(part);
19 |         } else {
20 |           throw "Could not find " + part;
21 |         }
22 |       } else {
23 |         throw "Not a composite object";
24 |       }
25 |     }
26 |     return value;
27 |   };
28 | 
29 | }).call(this);
30 | 


--------------------------------------------------------------------------------
/lib/atoms.js:
--------------------------------------------------------------------------------
  1 | // Generated by CoffeeScript 1.6.1
  2 | (function() {
  3 |   var BigInt, Char, Discard, Keyword, Prim, StringObj, Symbol, bigInt, char, charMap, kw, memo, sym, type,
  4 |     __hasProp = {}.hasOwnProperty,
  5 |     __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; },
  6 |     __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; },
  7 |     __slice = [].slice;
  8 | 
  9 |   type = require("./type");
 10 | 
 11 |   memo = require("./memo");
 12 | 
 13 |   Prim = (function() {
 14 | 
 15 |     function Prim(val) {
 16 |       var x;
 17 |       if (type(val) === "array") {
 18 |         this.val = (function() {
 19 |           var _i, _len, _results;
 20 |           _results = [];
 21 |           for (_i = 0, _len = val.length; _i < _len; _i++) {
 22 |             x = val[_i];
 23 |             if (!(x instanceof Discard)) {
 24 |               _results.push(x);
 25 |             }
 26 |           }
 27 |           return _results;
 28 |         })();
 29 |       } else {
 30 |         this.val = val;
 31 |       }
 32 |     }
 33 | 
 34 |     Prim.prototype.value = function() {
 35 |       return this.val;
 36 |     };
 37 | 
 38 |     Prim.prototype.toString = function() {
 39 |       return JSON.stringify(this.val);
 40 |     };
 41 | 
 42 |     return Prim;
 43 | 
 44 |   })();
 45 | 
 46 |   BigInt = (function(_super) {
 47 | 
 48 |     __extends(BigInt, _super);
 49 | 
 50 |     function BigInt() {
 51 |       return BigInt.__super__.constructor.apply(this, arguments);
 52 |     }
 53 | 
 54 |     BigInt.prototype.ednEncode = function() {
 55 |       return this.val;
 56 |     };
 57 | 
 58 |     BigInt.prototype.jsEncode = function() {
 59 |       return this.val;
 60 |     };
 61 | 
 62 |     BigInt.prototype.jsonEncode = function() {
 63 |       return {
 64 |         BigInt: this.val
 65 |       };
 66 |     };
 67 | 
 68 |     return BigInt;
 69 | 
 70 |   })(Prim);
 71 | 
 72 |   StringObj = (function(_super) {
 73 | 
 74 |     __extends(StringObj, _super);
 75 | 
 76 |     function StringObj() {
 77 |       return StringObj.__super__.constructor.apply(this, arguments);
 78 |     }
 79 | 
 80 |     StringObj.prototype.toString = function() {
 81 |       return this.val;
 82 |     };
 83 | 
 84 |     StringObj.prototype.is = function(test) {
 85 |       return this.val === test;
 86 |     };
 87 | 
 88 |     return StringObj;
 89 | 
 90 |   })(Prim);
 91 | 
 92 |   charMap = {
 93 |     newline: "\n",
 94 |     "return": "\r",
 95 |     space: " ",
 96 |     tab: "\t",
 97 |     formfeed: "\f"
 98 |   };
 99 | 
100 |   Char = (function(_super) {
101 | 
102 |     __extends(Char, _super);
103 | 
104 |     Char.prototype.ednEncode = function() {
105 |       return "\\" + this.val;
106 |     };
107 | 
108 |     Char.prototype.jsEncode = function() {
109 |       return charMap[this.val] || this.val;
110 |     };
111 | 
112 |     Char.prototype.jsonEncode = function() {
113 |       return {
114 |         Char: this.val
115 |       };
116 |     };
117 | 
118 |     function Char(val) {
119 |       if (charMap[val] || val.length === 1) {
120 |         this.val = val;
121 |       } else {
122 |         throw "Char may only be newline, return, space, tab, formfeed or a single character - you gave [" + val + "]";
123 |       }
124 |     }
125 | 
126 |     return Char;
127 | 
128 |   })(StringObj);
129 | 
130 |   Discard = (function() {
131 | 
132 |     function Discard() {}
133 | 
134 |     return Discard;
135 | 
136 |   })();
137 | 
138 |   Symbol = (function(_super) {
139 | 
140 |     __extends(Symbol, _super);
141 | 
142 |     Symbol.prototype.validRegex = /[0-9A-Za-z.*+!\-_?$%&=:#/]+/;
143 | 
144 |     Symbol.prototype.invalidFirstChars = [":", "#", "/"];
145 | 
146 |     Symbol.prototype.valid = function(word) {
147 |       var _ref, _ref1, _ref2;
148 |       if (((_ref = word.match(this.validRegex)) != null ? _ref[0] : void 0) !== word) {
149 |         throw "provided an invalid symbol " + word;
150 |       }
151 |       if (word.length === 1 && word[0] !== "/") {
152 |         if (_ref1 = word[0], __indexOf.call(this.invalidFirstChars, _ref1) >= 0) {
153 |           throw "Invalid first character in symbol " + word[0];
154 |         }
155 |       }
156 |       if (((_ref2 = word[0]) === "-" || _ref2 === "+" || _ref2 === ".") && (word[1] != null) && word[1].match(/[0-9]/)) {
157 |         throw "If first char is " + word[0] + " the second char can not be numeric. You had " + word[1];
158 |       }
159 |       if (word[0].match(/[0-9]/)) {
160 |         throw "first character may not be numeric. You provided " + word[0];
161 |       }
162 |       return true;
163 |     };
164 | 
165 |     function Symbol() {
166 |       var args, parts;
167 |       args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
168 |       switch (args.length) {
169 |         case 1:
170 |           if (args[0] === "/") {
171 |             this.ns = null;
172 |             this.name = "/";
173 |           } else {
174 |             parts = args[0].split("/");
175 |             if (parts.length === 1) {
176 |               this.ns = null;
177 |               this.name = parts[0];
178 |               if (this.name === ":") {
179 |                 throw "can not have a symbol of only :";
180 |               }
181 |             } else if (parts.length === 2) {
182 |               this.ns = parts[0];
183 |               if (this.ns === "") {
184 |                 throw "can not have a slash at start of symbol";
185 |               }
186 |               if (this.ns === ":") {
187 |                 throw "can not have a namespace of :";
188 |               }
189 |               this.name = parts[1];
190 |               if (this.name.length === 0) {
191 |                 throw "symbol may not end with a slash.";
192 |               }
193 |             } else {
194 |               throw "Can not have more than 1 forward slash in a symbol";
195 |             }
196 |           }
197 |           break;
198 |         case 2:
199 |           this.ns = args[0];
200 |           this.name = args[1];
201 |       }
202 |       if (this.name.length === 0) {
203 |         throw "Symbol can not be empty";
204 |       }
205 |       this.val = "" + (this.ns ? "" + this.ns + "/" : "") + this.name;
206 |       this.valid(this.val);
207 |     }
208 | 
209 |     Symbol.prototype.toString = function() {
210 |       return this.val;
211 |     };
212 | 
213 |     Symbol.prototype.ednEncode = function() {
214 |       return this.val;
215 |     };
216 | 
217 |     Symbol.prototype.jsEncode = function() {
218 |       return this.val;
219 |     };
220 | 
221 |     Symbol.prototype.jsonEncode = function() {
222 |       return {
223 |         Symbol: this.val
224 |       };
225 |     };
226 | 
227 |     return Symbol;
228 | 
229 |   })(Prim);
230 | 
231 |   Keyword = (function(_super) {
232 | 
233 |     __extends(Keyword, _super);
234 | 
235 |     Keyword.prototype.invalidFirstChars = ["#", "/"];
236 | 
237 |     function Keyword() {
238 |       Keyword.__super__.constructor.apply(this, arguments);
239 |       if (this.val[0] !== ":") {
240 |         throw "keyword must start with a :";
241 |       }
242 |       if ((this.val[1] != null) === "/") {
243 |         throw "keyword can not have a slash with out a namespace";
244 |       }
245 |     }
246 | 
247 |     Keyword.prototype.jsonEncode = function() {
248 |       return {
249 |         Keyword: this.val
250 |       };
251 |     };
252 | 
253 |     return Keyword;
254 | 
255 |   })(Symbol);
256 | 
257 |   char = memo(Char);
258 | 
259 |   kw = memo(Keyword);
260 | 
261 |   sym = memo(Symbol);
262 | 
263 |   bigInt = memo(BigInt);
264 | 
265 |   module.exports = {
266 |     Prim: Prim,
267 |     Symbol: Symbol,
268 |     Keyword: Keyword,
269 |     StringObj: StringObj,
270 |     Char: Char,
271 |     Discard: Discard,
272 |     BigInt: BigInt,
273 |     char: char,
274 |     kw: kw,
275 |     sym: sym,
276 |     bigInt: bigInt
277 |   };
278 | 
279 | }).call(this);
280 | 


--------------------------------------------------------------------------------
/lib/collections.js:
--------------------------------------------------------------------------------
  1 | // Generated by CoffeeScript 1.6.1
  2 | (function() {
  3 |   var Iterable, List, Map, Pair, Prim, Set, Vector, encode, equals, type,
  4 |     __hasProp = {}.hasOwnProperty,
  5 |     __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; },
  6 |     __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; };
  7 | 
  8 |   type = require("./type");
  9 | 
 10 |   equals = require("equals");
 11 | 
 12 |   Prim = require("./atoms").Prim;
 13 | 
 14 |   encode = require("./encode").encode;
 15 | 
 16 |   Iterable = (function(_super) {
 17 | 
 18 |     __extends(Iterable, _super);
 19 | 
 20 |     function Iterable() {
 21 |       return Iterable.__super__.constructor.apply(this, arguments);
 22 |     }
 23 | 
 24 |     Iterable.prototype.hashId = function() {
 25 |       return this.ednEncode();
 26 |     };
 27 | 
 28 |     Iterable.prototype.ednEncode = function() {
 29 |       return (this.map(function(i) {
 30 |         return encode(i);
 31 |       })).val.join(" ");
 32 |     };
 33 | 
 34 |     Iterable.prototype.jsonEncode = function() {
 35 |       return this.map(function(i) {
 36 |         if (i.jsonEncode != null) {
 37 |           return i.jsonEncode();
 38 |         } else {
 39 |           return i;
 40 |         }
 41 |       });
 42 |     };
 43 | 
 44 |     Iterable.prototype.jsEncode = function() {
 45 |       return (this.map(function(i) {
 46 |         if ((i != null ? i.jsEncode : void 0) != null) {
 47 |           return i.jsEncode();
 48 |         } else {
 49 |           return i;
 50 |         }
 51 |       })).val;
 52 |     };
 53 | 
 54 |     Iterable.prototype.exists = function(index) {
 55 |       return this.val[index] != null;
 56 |     };
 57 | 
 58 |     Iterable.prototype.each = function(iter) {
 59 |       var i, _i, _len, _ref, _results;
 60 |       _ref = this.val;
 61 |       _results = [];
 62 |       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 63 |         i = _ref[_i];
 64 |         _results.push(iter(i));
 65 |       }
 66 |       return _results;
 67 |     };
 68 | 
 69 |     Iterable.prototype.map = function(iter) {
 70 |       return this.each(iter);
 71 |     };
 72 | 
 73 |     Iterable.prototype.walk = function(iter) {
 74 |       return this.map(function(i) {
 75 |         if ((i.walk != null) && type(i.walk) === "function") {
 76 |           return i.walk(iter);
 77 |         } else {
 78 |           return iter(i);
 79 |         }
 80 |       });
 81 |     };
 82 | 
 83 |     Iterable.prototype.at = function(index) {
 84 |       if (this.exists(index)) {
 85 |         return this.val[index];
 86 |       }
 87 |     };
 88 | 
 89 |     Iterable.prototype.set = function(index, val) {
 90 |       this.val[index] = val;
 91 |       return this;
 92 |     };
 93 | 
 94 |     return Iterable;
 95 | 
 96 |   })(Prim);
 97 | 
 98 |   List = (function(_super) {
 99 | 
100 |     __extends(List, _super);
101 | 
102 |     function List() {
103 |       return List.__super__.constructor.apply(this, arguments);
104 |     }
105 | 
106 |     List.prototype.ednEncode = function() {
107 |       return "(" + (List.__super__.ednEncode.call(this)) + ")";
108 |     };
109 | 
110 |     List.prototype.jsonEncode = function() {
111 |       return {
112 |         List: List.__super__.jsonEncode.call(this)
113 |       };
114 |     };
115 | 
116 |     List.prototype.map = function(iter) {
117 |       return new List(this.each(iter));
118 |     };
119 | 
120 |     return List;
121 | 
122 |   })(Iterable);
123 | 
124 |   Vector = (function(_super) {
125 | 
126 |     __extends(Vector, _super);
127 | 
128 |     function Vector() {
129 |       return Vector.__super__.constructor.apply(this, arguments);
130 |     }
131 | 
132 |     Vector.prototype.ednEncode = function() {
133 |       return "[" + (Vector.__super__.ednEncode.call(this)) + "]";
134 |     };
135 | 
136 |     Vector.prototype.jsonEncode = function() {
137 |       return {
138 |         Vector: Vector.__super__.jsonEncode.call(this)
139 |       };
140 |     };
141 | 
142 |     Vector.prototype.map = function(iter) {
143 |       return new Vector(this.each(iter));
144 |     };
145 | 
146 |     return Vector;
147 | 
148 |   })(Iterable);
149 | 
150 |   Set = (function(_super) {
151 | 
152 |     __extends(Set, _super);
153 | 
154 |     Set.prototype.ednEncode = function() {
155 |       return "\#{" + (Set.__super__.ednEncode.call(this)) + "}";
156 |     };
157 | 
158 |     Set.prototype.jsonEncode = function() {
159 |       return {
160 |         Set: Set.__super__.jsonEncode.call(this)
161 |       };
162 |     };
163 | 
164 |     function Set(val) {
165 |       var item, _i, _len;
166 |       Set.__super__.constructor.call(this);
167 |       this.val = [];
168 |       for (_i = 0, _len = val.length; _i < _len; _i++) {
169 |         item = val[_i];
170 |         if (__indexOf.call(this.val, item) >= 0) {
171 |           throw "set not distinct";
172 |         } else {
173 |           this.val.push(item);
174 |         }
175 |       }
176 |     }
177 | 
178 |     Set.prototype.map = function(iter) {
179 |       return new Set(this.each(iter));
180 |     };
181 | 
182 |     return Set;
183 | 
184 |   })(Iterable);
185 | 
186 |   Pair = (function() {
187 | 
188 |     function Pair(key, val) {
189 |       this.key = key;
190 |       this.val = val;
191 |     }
192 | 
193 |     return Pair;
194 | 
195 |   })();
196 | 
197 |   Map = (function() {
198 | 
199 |     Map.prototype.hashId = function() {
200 |       return this.ednEncode();
201 |     };
202 | 
203 |     Map.prototype.ednEncode = function() {
204 |       var i;
205 |       return "{" + (((function() {
206 |         var _i, _len, _ref, _results;
207 |         _ref = this.value();
208 |         _results = [];
209 |         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
210 |           i = _ref[_i];
211 |           _results.push(encode(i));
212 |         }
213 |         return _results;
214 |       }).call(this)).join(" ")) + "}";
215 |     };
216 | 
217 |     Map.prototype.jsonEncode = function() {
218 |       var i;
219 |       return {
220 |         Map: (function() {
221 |           var _i, _len, _ref, _results;
222 |           _ref = this.value();
223 |           _results = [];
224 |           for (_i = 0, _len = _ref.length; _i < _len; _i++) {
225 |             i = _ref[_i];
226 |             _results.push(i.jsonEncode != null ? i.jsonEncode() : i);
227 |           }
228 |           return _results;
229 |         }).call(this)
230 |       };
231 |     };
232 | 
233 |     Map.prototype.jsEncode = function() {
234 |       var hashId, i, k, result, _i, _len, _ref, _ref1;
235 |       result = {};
236 |       _ref = this.keys;
237 |       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
238 |         k = _ref[i];
239 |         hashId = (k != null ? k.hashId : void 0) != null ? k.hashId() : k;
240 |         result[hashId] = ((_ref1 = this.vals[i]) != null ? _ref1.jsEncode : void 0) != null ? this.vals[i].jsEncode() : this.vals[i];
241 |       }
242 |       return result;
243 |     };
244 | 
245 |     function Map(val) {
246 |       var i, v, _i, _len, _ref;
247 |       this.val = val != null ? val : [];
248 |       if (this.val.length && this.val.length % 2 !== 0) {
249 |         throw "Map accepts an array with an even number of items. You provided " + this.val.length + " items";
250 |       }
251 |       this.keys = [];
252 |       this.vals = [];
253 |       _ref = this.val;
254 |       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
255 |         v = _ref[i];
256 |         if (i % 2 === 0) {
257 |           this.keys.push(v);
258 |         } else {
259 |           this.vals.push(v);
260 |         }
261 |       }
262 |       this.val = false;
263 |     }
264 | 
265 |     Map.prototype.value = function() {
266 |       var i, result, v, _i, _len, _ref;
267 |       result = [];
268 |       _ref = this.keys;
269 |       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
270 |         v = _ref[i];
271 |         result.push(v);
272 |         if (this.vals[i] !== void 0) {
273 |           result.push(this.vals[i]);
274 |         }
275 |       }
276 |       return result;
277 |     };
278 | 
279 |     Map.prototype.indexOf = function(key) {
280 |       var i, k, _i, _len, _ref;
281 |       _ref = this.keys;
282 |       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
283 |         k = _ref[i];
284 |         if (equals(k, key)) {
285 |           return i;
286 |         }
287 |       }
288 |       return void 0;
289 |     };
290 | 
291 |     Map.prototype.exists = function(key) {
292 |       return this.indexOf(key) != null;
293 |     };
294 | 
295 |     Map.prototype.at = function(key) {
296 |       var id;
297 |       if ((id = this.indexOf(key)) != null) {
298 |         return this.vals[id];
299 |       } else {
300 |         throw "key does not exist";
301 |       }
302 |     };
303 | 
304 |     Map.prototype.set = function(key, val) {
305 |       var id;
306 |       if ((id = this.indexOf(key)) != null) {
307 |         this.vals[id] = val;
308 |       } else {
309 |         this.keys.push(key);
310 |         this.vals.push(val);
311 |       }
312 |       return this;
313 |     };
314 | 
315 |     Map.prototype.each = function(iter) {
316 |       var k, _i, _len, _ref, _results;
317 |       _ref = this.keys;
318 |       _results = [];
319 |       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
320 |         k = _ref[_i];
321 |         _results.push(iter(this.at(k), k));
322 |       }
323 |       return _results;
324 |     };
325 | 
326 |     Map.prototype.map = function(iter) {
327 |       var result;
328 |       result = new Map;
329 |       this.each(function(v, k) {
330 |         var nv, _ref;
331 |         nv = iter(v, k);
332 |         if (nv instanceof Pair) {
333 |           _ref = [nv.key, nv.val], k = _ref[0], nv = _ref[1];
334 |         }
335 |         return result.set(k, nv);
336 |       });
337 |       return result;
338 |     };
339 | 
340 |     Map.prototype.walk = function(iter) {
341 |       return this.map(function(v, k) {
342 |         if (type(v.walk) === "function") {
343 |           return iter(v.walk(iter), k);
344 |         } else {
345 |           return iter(v, k);
346 |         }
347 |       });
348 |     };
349 | 
350 |     return Map;
351 | 
352 |   })();
353 | 
354 |   module.exports = {
355 |     Iterable: Iterable,
356 |     List: List,
357 |     Vector: Vector,
358 |     Set: Set,
359 |     Pair: Pair,
360 |     Map: Map
361 |   };
362 | 
363 | }).call(this);
364 | 


--------------------------------------------------------------------------------
/lib/compile.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | 
4 |   module.exports = function(string) {
5 |     return "return require('jsedn').parse(\"" + (string.replace(/"/g, '\\"').replace(/\n/g, " ").trim()) + "\")";
6 |   };
7 | 
8 | }).call(this);
9 | 


--------------------------------------------------------------------------------
/lib/encode.js:
--------------------------------------------------------------------------------
  1 | // Generated by CoffeeScript 1.6.1
  2 | (function() {
  3 |   var encode, encodeHandlers, encodeJson, tokenHandlers, type;
  4 | 
  5 |   type = require("./type");
  6 | 
  7 |   tokenHandlers = require("./tokens").tokenHandlers;
  8 | 
  9 |   encodeHandlers = {
 10 |     array: {
 11 |       test: function(obj) {
 12 |         return type(obj) === "array";
 13 |       },
 14 |       action: function(obj) {
 15 |         var v;
 16 |         return "[" + (((function() {
 17 |           var _i, _len, _results;
 18 |           _results = [];
 19 |           for (_i = 0, _len = obj.length; _i < _len; _i++) {
 20 |             v = obj[_i];
 21 |             _results.push(encode(v));
 22 |           }
 23 |           return _results;
 24 |         })()).join(" ")) + "]";
 25 |       }
 26 |     },
 27 |     integer: {
 28 |       test: function(obj) {
 29 |         return type(obj) === "number" && tokenHandlers.integer.pattern.test(obj);
 30 |       },
 31 |       action: function(obj) {
 32 |         return parseInt(obj);
 33 |       }
 34 |     },
 35 |     float: {
 36 |       test: function(obj) {
 37 |         return type(obj) === "number" && tokenHandlers.float.pattern.test(obj);
 38 |       },
 39 |       action: function(obj) {
 40 |         return parseFloat(obj);
 41 |       }
 42 |     },
 43 |     string: {
 44 |       test: function(obj) {
 45 |         return type(obj) === "string";
 46 |       },
 47 |       action: function(obj) {
 48 |         return "\"" + (obj.toString().replace(/"|\\/g, '\\$&')) + "\"";
 49 |       }
 50 |     },
 51 |     boolean: {
 52 |       test: function(obj) {
 53 |         return type(obj) === "boolean";
 54 |       },
 55 |       action: function(obj) {
 56 |         if (obj) {
 57 |           return "true";
 58 |         } else {
 59 |           return "false";
 60 |         }
 61 |       }
 62 |     },
 63 |     "null": {
 64 |       test: function(obj) {
 65 |         return type(obj) === "null";
 66 |       },
 67 |       action: function(obj) {
 68 |         return "nil";
 69 |       }
 70 |     },
 71 |     date: {
 72 |       test: function(obj) {
 73 |         return type(obj) === "date";
 74 |       },
 75 |       action: function(obj) {
 76 |         return "#inst \"" + (obj.toISOString()) + "\"";
 77 |       }
 78 |     },
 79 |     object: {
 80 |       test: function(obj) {
 81 |         return type(obj) === "object";
 82 |       },
 83 |       action: function(obj) {
 84 |         var k, result, v;
 85 |         result = [];
 86 |         for (k in obj) {
 87 |           v = obj[k];
 88 |           result.push(encode(k));
 89 |           result.push(encode(v));
 90 |         }
 91 |         return "{" + (result.join(" ")) + "}";
 92 |       }
 93 |     }
 94 |   };
 95 | 
 96 |   encode = function(obj) {
 97 |     var handler, name;
 98 |     if ((obj != null ? obj.ednEncode : void 0) != null) {
 99 |       return obj.ednEncode();
100 |     }
101 |     for (name in encodeHandlers) {
102 |       handler = encodeHandlers[name];
103 |       if (handler.test(obj)) {
104 |         return handler.action(obj);
105 |       }
106 |     }
107 |     throw "unhandled encoding for " + (JSON.stringify(obj));
108 |   };
109 | 
110 |   encodeJson = function(obj, prettyPrint) {
111 |     if (obj.jsonEncode != null) {
112 |       return encodeJson(obj.jsonEncode(), prettyPrint);
113 |     }
114 |     if (prettyPrint) {
115 |       return JSON.stringify(obj, null, 4);
116 |     } else {
117 |       return JSON.stringify(obj);
118 |     }
119 |   };
120 | 
121 |   module.exports = {
122 |     encodeHandlers: encodeHandlers,
123 |     encode: encode,
124 |     encodeJson: encodeJson
125 |   };
126 | 
127 | }).call(this);
128 | 


--------------------------------------------------------------------------------
/lib/memo.js:
--------------------------------------------------------------------------------
 1 | // Generated by CoffeeScript 1.6.1
 2 | (function() {
 3 |   var memo;
 4 | 
 5 |   module.exports = memo = function(klass) {
 6 |     memo[klass] = {};
 7 |     return function(val) {
 8 |       if (memo[klass][val] == null) {
 9 |         memo[klass][val] = new klass(val);
10 |       }
11 |       return memo[klass][val];
12 |     };
13 |   };
14 | 
15 | }).call(this);
16 | 


--------------------------------------------------------------------------------
/lib/reader.js:
--------------------------------------------------------------------------------
  1 | // Generated by CoffeeScript 1.6.1
  2 | (function() {
  3 |   var BigInt, Char, Discard, Iterable, Keyword, List, Map, Pair, Prim, Set, StringObj, Symbol, Tag, Tagged, Vector, bigInt, char, encode, encodeHandlers, encodeJson, escapeChar, fs, handleToken, kw, lex, parenTypes, parens, parse, read, specialChars, sym, tagActions, tokenHandlers, type, typeClasses, _ref, _ref1, _ref2, _ref3, _ref4,
  4 |     __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; };
  5 | 
  6 |   type = require("./type");
  7 | 
  8 |   _ref = require("./atoms"), Prim = _ref.Prim, Symbol = _ref.Symbol, Keyword = _ref.Keyword, StringObj = _ref.StringObj, Char = _ref.Char, Discard = _ref.Discard, BigInt = _ref.BigInt, char = _ref.char, kw = _ref.kw, sym = _ref.sym, bigInt = _ref.bigInt;
  9 | 
 10 |   _ref1 = require("./collections"), Iterable = _ref1.Iterable, List = _ref1.List, Vector = _ref1.Vector, Set = _ref1.Set, Pair = _ref1.Pair, Map = _ref1.Map;
 11 | 
 12 |   _ref2 = require("./tags"), Tag = _ref2.Tag, Tagged = _ref2.Tagged, tagActions = _ref2.tagActions;
 13 | 
 14 |   _ref3 = require("./encode"), encodeHandlers = _ref3.encodeHandlers, encode = _ref3.encode, encodeJson = _ref3.encodeJson;
 15 | 
 16 |   _ref4 = require("./tokens"), handleToken = _ref4.handleToken, tokenHandlers = _ref4.tokenHandlers;
 17 | 
 18 |   typeClasses = {
 19 |     Map: Map,
 20 |     List: List,
 21 |     Vector: Vector,
 22 |     Set: Set,
 23 |     Discard: Discard,
 24 |     Tag: Tag,
 25 |     Tagged: Tagged,
 26 |     StringObj: StringObj
 27 |   };
 28 | 
 29 |   parens = '()[]{}';
 30 | 
 31 |   specialChars = parens + ' \t\n\r,';
 32 | 
 33 |   escapeChar = '\\';
 34 | 
 35 |   parenTypes = {
 36 |     '(': {
 37 |       closing: ')',
 38 |       "class": "List"
 39 |     },
 40 |     '[': {
 41 |       closing: ']',
 42 |       "class": "Vector"
 43 |     },
 44 |     '{': {
 45 |       closing: '}',
 46 |       "class": "Map"
 47 |     }
 48 |   };
 49 | 
 50 |   lex = function(string) {
 51 |     var c, escaping, in_comment, in_string, line, lines, list, token, _i, _len;
 52 |     list = [];
 53 |     lines = [];
 54 |     line = 1;
 55 |     token = '';
 56 |     for (_i = 0, _len = string.length; _i < _len; _i++) {
 57 |       c = string[_i];
 58 |       if (c === "\n" || c === "\r") {
 59 |         line++;
 60 |       }
 61 |       if ((typeof in_string === "undefined" || in_string === null) && c === ";" && (typeof escaping === "undefined" || escaping === null)) {
 62 |         in_comment = true;
 63 |       }
 64 |       if (in_comment) {
 65 |         if (c === "\n") {
 66 |           in_comment = void 0;
 67 |           if (token) {
 68 |             list.push(token);
 69 |             lines.push(line);
 70 |             token = '';
 71 |           }
 72 |         }
 73 |         continue;
 74 |       }
 75 |       if (c === '"' && (typeof escaping === "undefined" || escaping === null)) {
 76 |         if (typeof in_string !== "undefined" && in_string !== null) {
 77 |           list.push(new StringObj(in_string));
 78 |           lines.push(line);
 79 |           in_string = void 0;
 80 |         } else {
 81 |           in_string = '';
 82 |         }
 83 |         continue;
 84 |       }
 85 |       if (in_string != null) {
 86 |         if (c === escapeChar && (typeof escaping === "undefined" || escaping === null)) {
 87 |           escaping = true;
 88 |           continue;
 89 |         }
 90 |         if (escaping != null) {
 91 |           escaping = void 0;
 92 |           if (c === "t" || c === "n" || c === "f" || c === "r") {
 93 |             in_string += escapeChar;
 94 |           }
 95 |         }
 96 |         in_string += c;
 97 |       } else if (__indexOf.call(specialChars, c) >= 0 && (escaping == null)) {
 98 |         if (token) {
 99 |           list.push(token);
100 |           lines.push(line);
101 |           token = '';
102 |         }
103 |         if (__indexOf.call(parens, c) >= 0) {
104 |           list.push(c);
105 |           lines.push(line);
106 |         }
107 |       } else {
108 |         if (escaping) {
109 |           escaping = void 0;
110 |         } else if (c === escapeChar) {
111 |           escaping = true;
112 |         }
113 |         if (token === "#_") {
114 |           list.push(token);
115 |           lines.push(line);
116 |           token = '';
117 |         }
118 |         token += c;
119 |       }
120 |     }
121 |     if (token) {
122 |       list.push(token);
123 |       lines.push(line);
124 |     }
125 |     return {
126 |       tokens: list,
127 |       tokenLines: lines
128 |     };
129 |   };
130 | 
131 |   read = function(ast) {
132 |     var read_ahead, result, token1, tokenLines, tokens;
133 |     tokens = ast.tokens, tokenLines = ast.tokenLines;
134 |     read_ahead = function(token, tokenIndex, expectSet) {
135 |       var L, closeParen, handledToken, paren, tagged;
136 |       if (tokenIndex == null) {
137 |         tokenIndex = 0;
138 |       }
139 |       if (expectSet == null) {
140 |         expectSet = false;
141 |       }
142 |       if (token === void 0) {
143 |         return;
144 |       }
145 |       if ((!(token instanceof StringObj)) && (paren = parenTypes[token])) {
146 |         closeParen = paren.closing;
147 |         L = [];
148 |         while (true) {
149 |           token = tokens.shift();
150 |           if (token === void 0) {
151 |             throw "unexpected end of list at line " + tokenLines[tokenIndex];
152 |           }
153 |           tokenIndex++;
154 |           if (token === paren.closing) {
155 |             return new typeClasses[expectSet ? "Set" : paren["class"]](L);
156 |           } else {
157 |             L.push(read_ahead(token, tokenIndex));
158 |           }
159 |         }
160 |       } else if (__indexOf.call(")]}", token) >= 0) {
161 |         throw "unexpected " + token + " at line " + tokenLines[tokenIndex];
162 |       } else {
163 |         handledToken = handleToken(token);
164 |         if (handledToken instanceof Tag) {
165 |           token = tokens.shift();
166 |           tokenIndex++;
167 |           if (token === void 0) {
168 |             throw "was expecting something to follow a tag at line " + tokenLines[tokenIndex];
169 |           }
170 |           tagged = new typeClasses.Tagged(handledToken, read_ahead(token, tokenIndex, handledToken.dn() === ""));
171 |           if (handledToken.dn() === "") {
172 |             if (tagged.obj() instanceof typeClasses.Set) {
173 |               return tagged.obj();
174 |             } else {
175 |               throw "Exepected a set but did not get one at line " + tokenLines[tokenIndex];
176 |             }
177 |           }
178 |           if (tagged.tag().dn() === "_") {
179 |             return new typeClasses.Discard;
180 |           }
181 |           if (tagActions[tagged.tag().dn()] != null) {
182 |             return tagActions[tagged.tag().dn()].action(tagged.obj());
183 |           }
184 |           return tagged;
185 |         } else {
186 |           return handledToken;
187 |         }
188 |       }
189 |     };
190 |     token1 = tokens.shift();
191 |     if (token1 === void 0) {
192 |       return void 0;
193 |     } else {
194 |       result = read_ahead(token1);
195 |       if (result instanceof typeClasses.Discard) {
196 |         return "";
197 |       }
198 |       return result;
199 |     }
200 |   };
201 | 
202 |   parse = function(string) {
203 |     return read(lex(string));
204 |   };
205 | 
206 |   module.exports = {
207 |     Char: Char,
208 |     char: char,
209 |     Iterable: Iterable,
210 |     Symbol: Symbol,
211 |     sym: sym,
212 |     Keyword: Keyword,
213 |     kw: kw,
214 |     BigInt: BigInt,
215 |     bigInt: bigInt,
216 |     List: List,
217 |     Vector: Vector,
218 |     Pair: Pair,
219 |     Map: Map,
220 |     Set: Set,
221 |     Tag: Tag,
222 |     Tagged: Tagged,
223 |     setTypeClass: function(typeName, klass) {
224 |       if (typeClasses[typeName] != null) {
225 |         module.exports[typeName] = klass;
226 |         return typeClasses[typeName] = klass;
227 |       }
228 |     },
229 |     setTagAction: function(tag, action) {
230 |       return tagActions[tag.dn()] = {
231 |         tag: tag,
232 |         action: action
233 |       };
234 |     },
235 |     setTokenHandler: function(handler, pattern, action) {
236 |       return tokenHandlers[handler] = {
237 |         pattern: pattern,
238 |         action: action
239 |       };
240 |     },
241 |     setTokenPattern: function(handler, pattern) {
242 |       return tokenHandlers[handler].pattern = pattern;
243 |     },
244 |     setTokenAction: function(handler, action) {
245 |       return tokenHandlers[handler].action = action;
246 |     },
247 |     setEncodeHandler: function(handler, test, action) {
248 |       return encodeHandlers[handler] = {
249 |         test: test,
250 |         action: action
251 |       };
252 |     },
253 |     setEncodeTest: function(type, test) {
254 |       return encodeHandlers[type].test = test;
255 |     },
256 |     setEncodeAction: function(type, action) {
257 |       return encodeHandlers[type].action = action;
258 |     },
259 |     parse: parse,
260 |     encode: encode,
261 |     encodeJson: encodeJson,
262 |     toJS: function(obj) {
263 |       if ((obj != null ? obj.jsEncode : void 0) != null) {
264 |         return obj.jsEncode();
265 |       } else {
266 |         return obj;
267 |       }
268 |     },
269 |     atPath: require("./atPath"),
270 |     unify: require("./unify")(parse),
271 |     compile: require("./compile")
272 |   };
273 | 
274 |   if (typeof window === "undefined") {
275 |     fs = require("fs");
276 |     module.exports.readFile = function(file, cb) {
277 |       return fs.readFile(file, "utf-8", function(err, data) {
278 |         if (err) {
279 |           throw err;
280 |         }
281 |         return cb(parse(data));
282 |       });
283 |     };
284 |     module.exports.readFileSync = function(file) {
285 |       return parse(fs.readFileSync(file, "utf-8"));
286 |     };
287 |   }
288 | 
289 | }).call(this);
290 | 


--------------------------------------------------------------------------------
/lib/tags.js:
--------------------------------------------------------------------------------
  1 | // Generated by CoffeeScript 1.6.1
  2 | (function() {
  3 |   var Prim, Tag, Tagged, tagActions, type,
  4 |     __slice = [].slice,
  5 |     __hasProp = {}.hasOwnProperty,
  6 |     __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; };
  7 | 
  8 |   Prim = require("./atoms").Prim;
  9 | 
 10 |   type = require("./type");
 11 | 
 12 |   Tag = (function() {
 13 | 
 14 |     function Tag() {
 15 |       var name, namespace, _ref;
 16 |       namespace = arguments[0], name = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
 17 |       this.namespace = namespace;
 18 |       this.name = name;
 19 |       if (arguments.length === 1) {
 20 |         _ref = arguments[0].split('/'), this.namespace = _ref[0], this.name = 2 <= _ref.length ? __slice.call(_ref, 1) : [];
 21 |       }
 22 |     }
 23 | 
 24 |     Tag.prototype.ns = function() {
 25 |       return this.namespace;
 26 |     };
 27 | 
 28 |     Tag.prototype.dn = function() {
 29 |       return [this.namespace].concat(this.name).join('/');
 30 |     };
 31 | 
 32 |     return Tag;
 33 | 
 34 |   })();
 35 | 
 36 |   Tagged = (function(_super) {
 37 | 
 38 |     __extends(Tagged, _super);
 39 | 
 40 |     function Tagged(_tag, _obj) {
 41 |       this._tag = _tag;
 42 |       this._obj = _obj;
 43 |     }
 44 | 
 45 |     Tagged.prototype.jsEncode = function() {
 46 |       return {
 47 |         tag: this.tag().dn(),
 48 |         value: this.obj().jsEncode()
 49 |       };
 50 |     };
 51 | 
 52 |     Tagged.prototype.ednEncode = function() {
 53 |       return "\#" + (this.tag().dn()) + " " + (require("./encode").encode(this.obj()));
 54 |     };
 55 | 
 56 |     Tagged.prototype.jsonEncode = function() {
 57 |       return {
 58 |         Tagged: [this.tag().dn(), this.obj().jsonEncode != null ? this.obj().jsonEncode() : this.obj()]
 59 |       };
 60 |     };
 61 | 
 62 |     Tagged.prototype.tag = function() {
 63 |       return this._tag;
 64 |     };
 65 | 
 66 |     Tagged.prototype.obj = function() {
 67 |       return this._obj;
 68 |     };
 69 | 
 70 |     Tagged.prototype.walk = function(iter) {
 71 |       return new Tagged(this._tag, type(this._obj.walk) === "function" ? this._obj.walk(iter) : iter(this._obj));
 72 |     };
 73 | 
 74 |     return Tagged;
 75 | 
 76 |   })(Prim);
 77 | 
 78 |   tagActions = {
 79 |     uuid: {
 80 |       tag: new Tag("uuid"),
 81 |       action: function(obj) {
 82 |         return obj;
 83 |       }
 84 |     },
 85 |     inst: {
 86 |       tag: new Tag("inst"),
 87 |       action: function(obj) {
 88 |         return new Date(Date.parse(obj));
 89 |       }
 90 |     }
 91 |   };
 92 | 
 93 |   module.exports = {
 94 |     Tag: Tag,
 95 |     Tagged: Tagged,
 96 |     tagActions: tagActions
 97 |   };
 98 | 
 99 | }).call(this);
100 | 


--------------------------------------------------------------------------------
/lib/tokens.js:
--------------------------------------------------------------------------------
 1 | // Generated by CoffeeScript 1.6.1
 2 | (function() {
 3 |   var Char, StringObj, Tag, bigInt, char, handleToken, kw, sym, tokenHandlers, _ref;
 4 | 
 5 |   _ref = require("./atoms"), Char = _ref.Char, StringObj = _ref.StringObj, char = _ref.char, kw = _ref.kw, sym = _ref.sym, bigInt = _ref.bigInt;
 6 | 
 7 |   Tag = require("./tags").Tag;
 8 | 
 9 |   handleToken = function(token) {
10 |     var handler, name;
11 |     if (token instanceof StringObj) {
12 |       return token.toString();
13 |     }
14 |     for (name in tokenHandlers) {
15 |       handler = tokenHandlers[name];
16 |       if (handler.pattern.test(token)) {
17 |         return handler.action(token);
18 |       }
19 |     }
20 |     return sym(token);
21 |   };
22 | 
23 |   tokenHandlers = {
24 |     nil: {
25 |       pattern: /^nil$/,
26 |       action: function(token) {
27 |         return null;
28 |       }
29 |     },
30 |     boolean: {
31 |       pattern: /^true$|^false$/,
32 |       action: function(token) {
33 |         return token === "true";
34 |       }
35 |     },
36 |     keyword: {
37 |       pattern: /^[\:].*$/,
38 |       action: function(token) {
39 |         return kw(token);
40 |       }
41 |     },
42 |     char: {
43 |       pattern: /^\\.*$/,
44 |       action: function(token) {
45 |         return char(token.slice(1));
46 |       }
47 |     },
48 |     integer: {
49 |       pattern: /^[\-\+]?[0-9]+N?$/,
50 |       action: function(token) {
51 |         if (/\d{15,}/.test(token)) {
52 |           return bigInt(token);
53 |         }
54 |         return parseInt(token === "-0" ? "0" : token);
55 |       }
56 |     },
57 |     float: {
58 |       pattern: /^[\-\+]?[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?M?$/,
59 |       action: function(token) {
60 |         return parseFloat(token);
61 |       }
62 |     },
63 |     tagged: {
64 |       pattern: /^#.*$/,
65 |       action: function(token) {
66 |         return new Tag(token.slice(1));
67 |       }
68 |     }
69 |   };
70 | 
71 |   module.exports = {
72 |     handleToken: handleToken,
73 |     tokenHandlers: tokenHandlers
74 |   };
75 | 
76 | }).call(this);
77 | 


--------------------------------------------------------------------------------
/lib/type.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 |   module.exports = typeof module !== "undefined" && this.module !== module ? require("type-component") : require("type");
4 | }).call(this);
5 | 


--------------------------------------------------------------------------------
/lib/unify.js:
--------------------------------------------------------------------------------
 1 | // Generated by CoffeeScript 1.6.1
 2 | (function() {
 3 |   var Map, Pair, Symbol, kw, sym, type, _ref, _ref1;
 4 | 
 5 |   type = require("./type");
 6 | 
 7 |   _ref = require("./collections"), Map = _ref.Map, Pair = _ref.Pair;
 8 | 
 9 |   _ref1 = require("./atoms"), Symbol = _ref1.Symbol, kw = _ref1.kw, sym = _ref1.sym;
10 | 
11 |   module.exports = function(parse) {
12 |     return function(data, values, tokenStart) {
13 |       var unifyToken, valExists;
14 |       if (tokenStart == null) {
15 |         tokenStart = "?";
16 |       }
17 |       if (type(data) === "string") {
18 |         data = parse(data);
19 |       }
20 |       if (type(values) === "string") {
21 |         values = parse(values);
22 |       }
23 |       valExists = function(v) {
24 |         if (values instanceof Map) {
25 |           if (values.exists(v)) {
26 |             return values.at(v);
27 |           } else if (values.exists(sym(v))) {
28 |             return values.at(sym(v));
29 |           } else if (values.exists(kw(":" + v))) {
30 |             return values.at(kw(":" + v));
31 |           }
32 |         } else {
33 |           return values[v];
34 |         }
35 |       };
36 |       unifyToken = function(t) {
37 |         var val;
38 |         if (t instanceof Symbol && ("" + t)[0] === tokenStart && ((val = valExists(("" + t).slice(1))) != null)) {
39 |           return val;
40 |         } else {
41 |           return t;
42 |         }
43 |       };
44 |       return data.walk(function(v, k) {
45 |         if (k != null) {
46 |           return new Pair(unifyToken(k), unifyToken(v));
47 |         } else {
48 |           return unifyToken(v);
49 |         }
50 |       });
51 |     };
52 |   };
53 | 
54 | }).call(this);
55 | 


--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "jsedn",
 3 |   "description": "js implementation of edn",
 4 |   "version": "0.4.1",
 5 |   "keywords": [
 6 |     "lisp",
 7 |     "clojure",
 8 |     "edn",
 9 |     "serialization",
10 |     "datomic"
11 |   ],
12 |   "maintainers": [
13 |     {
14 |       "name": "Shaun Gilchrist",
15 |       "email": "shaunxcode@gmail.com",
16 |       "web": "http://order-of-no.posterous.com"
17 |     }
18 |   ],
19 |   "contributors": [
20 |     {
21 |       "name": "Shaun Gilchrist",
22 |       "email": "shaunxcode@gmail.com",
23 |       "web": "http://order-of-no.posterous.com"
24 |     }
25 |   ],
26 |   "bugs": "http://www.github.com/shaunxcode/jsedn/issues",
27 |   "licenses": [
28 |     {
29 |       "type": "MIT",
30 |       "url": "http://www.opensource.org/licenses/mit-license.php"
31 |     }
32 |   ],
33 |   "repository": {
34 |     "type": "git",
35 |     "url": "http://www.github.com/shaunxcode/jsedn"
36 |   },
37 |   "devDependencies": {
38 |     "coffee-script": "latest",
39 |     "coveralls": "^2.11.14",
40 |     "microtime": "latest",
41 |     "nyc": "^8.3.2",
42 |     "pre-commit": "^1.1.3",
43 |     "underscore": "latest"
44 |   },
45 |   "dependencies": {
46 |     "commander": "latest",
47 |     "type-component": "latest",
48 |     "equals": "latest"
49 |   },
50 |   "bin": {
51 |     "jsedn": "./bin/jsedn"
52 |   },
53 |   "scripts": {
54 |     "test-perf": "coffee test/perf.coffee && coffee test/performance-tests.coffee",
55 |     "test-spec": "coffee test/all-edn-tests.coffee && coffee test/all-invalid-edn-tests.coffee && coffee test/assertion.coffee && coffee test/primitives.coffee && coffee test/unify.coffee",
56 |     "test": "npm run test-perf && nyc --extension .coffee npm run test-spec"
57 |   },
58 |   "nyc": {
59 |     "exclude": [
60 |       "test",
61 |       "node_modules"
62 |     ],
63 |     "reporter": [
64 |       "lcov",
65 |       "text-summary"
66 |     ]
67 |   },
68 |   "main": "index.js"
69 | }
70 | 


--------------------------------------------------------------------------------
/src/atPath.coffee:
--------------------------------------------------------------------------------
 1 | {kw} = require "./atoms"
 2 | 
 3 | module.exports = (obj, path) -> 
 4 | 	path = path.trim().replace(/[ ]{2,}/g, ' ').split(' ')
 5 | 	value = obj
 6 | 	for part in path
 7 | 		if part[0] is ":" 
 8 | 			part = kw part 
 9 | 			
10 | 		if value.exists 
11 | 			if value.exists(part)?
12 | 				value = value.at part 
13 | 			else
14 | 				throw "Could not find " + part
15 | 		else
16 | 			throw "Not a composite object"
17 | 	value


--------------------------------------------------------------------------------
/src/atoms.coffee:
--------------------------------------------------------------------------------
  1 | type = require "./type"
  2 | memo = require "./memo"
  3 | 
  4 | class Prim
  5 | 	constructor: (val) ->
  6 | 		if type(val) is "array"
  7 | 			@val = (x for x in val when (not (x instanceof Discard)))
  8 | 		else
  9 | 			@val = val
 10 | 			
 11 | 	value: -> @val
 12 | 	toString: -> JSON.stringify @val
 13 | 
 14 | class BigInt extends Prim 
 15 | 	ednEncode: -> @val
 16 | 	
 17 | 	jsEncode: -> @val
 18 | 	
 19 | 	jsonEncode: -> BigInt: @val 
 20 | 
 21 | class StringObj extends Prim 
 22 | 	toString: -> @val
 23 | 	is: (test) -> @val is test
 24 | 
 25 | charMap = newline: "\n", return: "\r", space: " ", tab: "\t", formfeed: "\f"
 26 | 	
 27 | class Char extends StringObj
 28 | 	ednEncode: -> "\\#{@val}"
 29 | 	
 30 | 	jsEncode: -> charMap[@val] or @val
 31 | 	
 32 | 	jsonEncode: -> Char: @val 
 33 | 	
 34 | 	constructor: (val) ->
 35 | 		if charMap[val] or val.length is 1
 36 | 			@val = val
 37 | 		else
 38 | 			throw "Char may only be newline, return, space, tab, formfeed or a single character - you gave [#{val}]"
 39 | 
 40 | class Discard
 41 | 	
 42 | class Symbol extends Prim
 43 | 
 44 | 	validRegex: /[0-9A-Za-z.*+!\-_?$%&=:#> 
 49 | 
 50 | 		if word.match(@validRegex)?[0] isnt word
 51 | 			throw "provided an invalid symbol #{word}"
 52 | 
 53 | 		if word.length is 1 and word[0] isnt "/"
 54 | 			if word[0] in @invalidFirstChars 
 55 | 				throw "Invalid first character in symbol #{word[0]}"
 56 | 
 57 | 		if word[0] in ["-", "+", "."] and word[1]? and word[1].match /[0-9]/
 58 | 			throw "If first char is #{word[0]} the second char can not be numeric. You had #{word[1]}"
 59 | 
 60 | 		if word[0].match /[0-9]/
 61 | 			throw "first character may not be numeric. You provided #{word[0]}"
 62 | 
 63 | 		true 
 64 | 
 65 | 	constructor: (args...) ->		
 66 | 		switch args.length
 67 | 			when 1
 68 | 				if args[0] is "/"
 69 | 					@ns = null
 70 | 					@name = "/"
 71 | 				else
 72 | 					parts = args[0].split "/"
 73 | 					#e.g. new Symbol ?cat
 74 | 					if parts.length is 1 
 75 | 						@ns = null
 76 | 						@name = parts[0]
 77 | 						if @name is ":"
 78 | 							throw "can not have a symbol of only :"
 79 | 					#e.g. new Symbol ":myPets.cats/cordelia"
 80 | 					else if parts.length is 2
 81 | 						@ns = parts[0]
 82 | 						if @ns is ""
 83 | 							throw "can not have a slash at start of symbol"
 84 | 						if @ns is ":"
 85 | 							throw "can not have a namespace of :"
 86 | 						@name = parts[1]
 87 | 						if @name.length is 0 
 88 | 							throw "symbol may not end with a slash."
 89 | 					else
 90 | 						throw "Can not have more than 1 forward slash in a symbol"
 91 | 					
 92 | 			#e.g. new Symbol ":myPets.cats", "margaret"
 93 | 			when 2
 94 | 				@ns = args[0]
 95 | 				@name = args[1]
 96 | 				
 97 | 		if @name.length is 0 
 98 | 			throw "Symbol can not be empty"
 99 | 		
100 | 		@val = "#{if @ns then "#{@ns}/" else ""}#{@name}"
101 | 		@valid @val 
102 | 
103 | 	toString: -> @val 
104 | 		
105 | 	ednEncode: -> @val
106 | 
107 | 	jsEncode: -> @val 
108 | 
109 | 	jsonEncode: -> 
110 | 		Symbol: @val 
111 | 
112 | class Keyword extends Symbol
113 | 	invalidFirstChars: ["#", "/"]
114 | 
115 | 	constructor: ->
116 | 		super
117 | 		if @val[0] isnt ":" then throw "keyword must start with a :"
118 | 		if @val[1]? is "/" then throw "keyword can not have a slash with out a namespace"
119 | 
120 | 	jsonEncode: ->
121 | 		Keyword: @val
122 | 
123 | char = memo Char
124 | kw = memo Keyword
125 | sym = memo Symbol
126 | bigInt = memo BigInt
127 | 	
128 | module.exports = {Prim, Symbol, Keyword, StringObj, Char, Discard, BigInt, char, kw, sym, bigInt}
129 | 


--------------------------------------------------------------------------------
/src/collections.coffee:
--------------------------------------------------------------------------------
  1 | type = require "./type"
  2 | equals = require "equals"
  3 | {Prim} = require "./atoms"
  4 | {encode} = require "./encode"
  5 | 
  6 | class Iterable extends Prim
  7 | 	hashId: -> 
  8 | 		@ednEncode()
  9 | 
 10 | 	ednEncode: ->
 11 | 		(@map (i) -> encode i).val.join " "
 12 | 	
 13 | 	jsonEncode: ->
 14 | 		(@map (i) -> if i.jsonEncode? then i.jsonEncode() else i)
 15 | 	
 16 | 	jsEncode: ->
 17 | 		(@map (i) -> if i?.jsEncode? then i.jsEncode() else i).val
 18 | 		
 19 | 	exists: (index) ->
 20 | 		@val[index]?
 21 | 
 22 | 	each: (iter) ->
 23 | 		(iter i for i in @val)
 24 | 
 25 | 	map: (iter) ->
 26 | 		@each iter 
 27 | 
 28 | 	walk: (iter) -> 
 29 | 		@map (i) -> 
 30 | 			if i.walk? and type(i.walk) is "function" 
 31 | 				i.walk iter
 32 | 			else
 33 | 				iter i
 34 | 		
 35 | 	at: (index) ->
 36 | 		if @exists index then @val[index]
 37 | 
 38 | 	set: (index, val) ->
 39 | 		@val[index] = val
 40 | 		
 41 | 		this
 42 | 		
 43 | class List extends Iterable
 44 | 	ednEncode: ->
 45 | 		"(#{super()})"
 46 | 
 47 | 	jsonEncode: ->
 48 | 		List: super()
 49 | 	
 50 | 	map: (iter) -> 
 51 | 		new List @each iter
 52 | 	
 53 | class Vector extends Iterable
 54 | 	ednEncode: ->
 55 | 		"[#{super()}]"
 56 | 
 57 | 	jsonEncode: ->
 58 | 		Vector: super()
 59 | 	
 60 | 	map: (iter) -> 
 61 | 		new Vector @each iter
 62 | 	
 63 | class Set extends Iterable
 64 | 	ednEncode: ->
 65 | 		"\#{#{super()}}"
 66 | 
 67 | 	jsonEncode: ->
 68 | 		Set: super()
 69 | 
 70 | 	constructor: (val) ->
 71 | 		super()
 72 | 		@val = []
 73 | 		for item in val
 74 | 			if item in @val 
 75 | 				throw "set not distinct"
 76 | 			else
 77 | 				@val.push item 
 78 | 
 79 | 	map: (iter) -> 
 80 | 		new Set @each iter
 81 | 
 82 | class Pair
 83 | 	constructor: (@key, @val) -> 
 84 | 
 85 | class Map
 86 | 	hashId: -> 
 87 | 		@ednEncode()
 88 | 		
 89 | 	ednEncode: ->
 90 | 		"{#{(encode i for i in @value()).join " "}}"
 91 | 	
 92 | 	jsonEncode: -> 
 93 | 		{Map: ((if i.jsonEncode? then i.jsonEncode() else i) for i in @value())}
 94 | 
 95 | 	jsEncode: ->
 96 | 		result = {}
 97 | 		for k, i in @keys
 98 | 			hashId = if k?.hashId? then k.hashId() else k 
 99 | 			result[hashId] = if @vals[i]?.jsEncode? then @vals[i].jsEncode() else @vals[i]
100 | 
101 | 		result
102 | 		
103 | 	constructor: (@val = []) ->
104 | 		if @val.length and @val.length % 2 isnt 0 
105 | 			throw "Map accepts an array with an even number of items. You provided #{@val.length} items"
106 |  
107 | 		@keys = []
108 | 		@vals = []
109 | 		
110 | 		for v, i in @val
111 | 			if i % 2 is 0
112 | 				@keys.push v
113 | 			else
114 | 				@vals.push v
115 | 
116 | 		@val = false
117 | 	
118 | 	value: -> 
119 | 		result = []
120 | 		for v, i in @keys
121 | 			result.push v
122 | 			if @vals[i] isnt undefined then result.push @vals[i]
123 | 		result
124 | 		
125 | 	indexOf: (key) -> 
126 | 		for k, i in @keys
127 | 			if equals k, key
128 | 				return i
129 | 		return undefined
130 | 		
131 | 	exists: (key) ->
132 | 		@indexOf(key)?
133 | 		
134 | 	at: (key) ->
135 | 		if (id = @indexOf key)?
136 | 			@vals[id]
137 | 		else
138 | 			throw "key does not exist"
139 | 
140 | 	set: (key, val) ->
141 | 		if (id = @indexOf key)?
142 | 			@vals[id] = val
143 | 		else
144 | 			@keys.push key
145 | 			@vals.push val
146 | 
147 | 		this
148 | 	each: (iter) -> 
149 | 		((iter (@at k), k) for k in @keys)
150 | 
151 | 	map: (iter) ->
152 | 		result = new Map
153 | 		@each (v, k) -> 
154 | 			nv = iter v, k
155 | 			if nv instanceof Pair then [k, nv] = [nv.key, nv.val] 
156 | 			result.set k, nv
157 | 		result
158 | 
159 | 	walk: (iter) -> 
160 | 		@map (v, k) ->  	
161 | 			if type(v.walk) is "function"
162 | 				iter (v.walk iter), k
163 | 			else
164 | 				iter v, k
165 | 				
166 | module.exports = {Iterable, List, Vector, Set, Pair, Map}
167 | 


--------------------------------------------------------------------------------
/src/compile.coffee:
--------------------------------------------------------------------------------
1 | module.exports = (string) ->
2 | 	"return require('jsedn').parse(\"#{string.replace(/"/g, '\\"').replace(/\n/g, " ").trim()}\")"


--------------------------------------------------------------------------------
/src/encode.coffee:
--------------------------------------------------------------------------------
 1 | type = require "./type"
 2 | {tokenHandlers} = require "./tokens"
 3 | 
 4 | encodeHandlers = 
 5 | 	array:
 6 | 		test: (obj) -> type(obj) is "array"
 7 | 		action: (obj) -> "[#{(encode v for v in obj).join " "}]"
 8 | 	integer: 
 9 | 		test: (obj) -> type(obj) is "number" and tokenHandlers.integer.pattern.test obj
10 | 		action: (obj) -> parseInt obj
11 | 	float:
12 | 		test: (obj) -> type(obj) is "number" and tokenHandlers.float.pattern.test obj
13 | 		action: (obj) -> parseFloat obj
14 | 	string:  
15 | 		test: (obj) -> type(obj) is "string"
16 | 		action: (obj) ->  "\"#{obj.toString().replace /"|\\/g, '\\$&'}\""
17 | 	boolean: 
18 | 		test: (obj) -> type(obj) is "boolean"
19 | 		action: (obj) -> if obj then "true" else "false"
20 | 	null:    
21 | 		test: (obj) -> type(obj) is "null"
22 | 		action: (obj) -> "nil"
23 | 	date:
24 | 		test: (obj) -> type(obj) is "date" 
25 | 		action: (obj) -> "#inst \"#{obj.toISOString()}\""
26 | 	object:  
27 | 		test: (obj) -> type(obj) is "object"
28 | 		action: (obj) -> 
29 | 			result = []
30 | 			for k, v of obj
31 | 				result.push encode k
32 | 				result.push encode v
33 | 			"{#{result.join " "}}"
34 | 
35 | encode = (obj) ->
36 | 	return obj.ednEncode() if obj?.ednEncode?
37 | 
38 | 	for name, handler of encodeHandlers
39 | 		if handler.test obj
40 | 			return handler.action obj
41 | 
42 | 	throw "unhandled encoding for #{JSON.stringify obj}"
43 | 
44 | encodeJson = (obj, prettyPrint) ->
45 | 	return (encodeJson obj.jsonEncode(), prettyPrint) if obj.jsonEncode?
46 | 
47 | 	return if prettyPrint then (JSON.stringify obj, null, 4) else JSON.stringify obj
48 | 
49 | module.exports = {encodeHandlers, encode, encodeJson}


--------------------------------------------------------------------------------
/src/memo.coffee:
--------------------------------------------------------------------------------
1 | module.exports = memo = (klass) -> 
2 | 	memo[klass] = {}
3 | 	(val) -> 
4 | 		if not memo[klass][val]? then memo[klass][val] = new klass val 
5 | 		memo[klass][val]


--------------------------------------------------------------------------------
/src/reader.coffee:
--------------------------------------------------------------------------------
  1 | type = require "./type"
  2 | {Prim, Symbol, Keyword, StringObj, Char, Discard, BigInt, char, kw, sym ,bigInt} = require "./atoms"
  3 | {Iterable, List, Vector, Set, Pair, Map} = require "./collections"
  4 | {Tag, Tagged, tagActions} = require "./tags"
  5 | {encodeHandlers, encode, encodeJson} = require "./encode"
  6 | {handleToken, tokenHandlers} = require "./tokens"
  7 | 
  8 | typeClasses = {Map, List, Vector, Set, Discard, Tag, Tagged, StringObj}
  9 | parens = '()[]{}'
 10 | specialChars = parens + ' \t\n\r,'
 11 | escapeChar = '\\'
 12 | parenTypes = 
 13 | 	'(' : closing: ')', class: "List"
 14 | 	'[' : closing: ']', class: "Vector"
 15 | 	'{' : closing: '}', class: "Map"
 16 | 
 17 | #based on the work of martin keefe: http://martinkeefe.com/dcpl/sexp_lib.html
 18 | lex = (string) ->
 19 | 	list = []
 20 | 	lines = []
 21 | 	line = 1
 22 | 	token = ''
 23 | 	for c in string
 24 | 		if c in ["\n", "\r"] then line++
 25 | 
 26 | 		if not in_string? and c is ";" and not escaping?
 27 | 			in_comment = true
 28 | 			
 29 | 		if in_comment
 30 | 			if c is "\n"
 31 | 				in_comment = undefined
 32 | 				if token 
 33 | 					list.push token
 34 | 					lines.push line 
 35 | 					token = ''
 36 | 			continue
 37 | 			
 38 | 		if c is '"' and not escaping?
 39 | 			if in_string?
 40 | 				list.push (new StringObj in_string)
 41 | 				lines.push line 
 42 | 				in_string = undefined
 43 | 			else
 44 | 				in_string = ''
 45 | 			continue
 46 | 
 47 | 		if in_string?
 48 | 			if c is escapeChar and not escaping?
 49 | 				escaping = true
 50 | 				continue
 51 | 
 52 | 			if escaping? 
 53 | 				escaping = undefined
 54 | 				if c in ["t", "n", "f", "r"] 
 55 | 					in_string += escapeChar
 56 | 
 57 | 			in_string += c
 58 | 		else if c in specialChars and not escaping?
 59 | 			if token
 60 | 				list.push token
 61 | 				lines.push line 
 62 | 				token = ''
 63 | 			if c in parens
 64 | 				list.push c
 65 | 				lines.push line 
 66 | 		else
 67 | 			if escaping
 68 | 				escaping = undefined
 69 | 			else if c is escapeChar
 70 | 				escaping = true
 71 | 			
 72 | 			if token is "#_"
 73 | 				list.push token
 74 | 				lines.push line
 75 | 				token = ''
 76 | 			token += c
 77 | 
 78 | 	if token
 79 | 		list.push(token)
 80 | 		lines.push line 
 81 | 	{tokens: list, tokenLines: lines}
 82 | 
 83 | #based roughly on the work of norvig from his lisp in python
 84 | read = (ast) ->
 85 | 	{tokens, tokenLines} = ast
 86 | 
 87 | 	read_ahead = (token, tokenIndex = 0, expectSet = false) ->
 88 | 		if token is undefined then return
 89 | 
 90 | 		if (not (token instanceof StringObj)) and paren = parenTypes[token]
 91 | 			closeParen = paren.closing
 92 | 			L = []
 93 | 			while true
 94 | 				token = tokens.shift()
 95 | 
 96 | 				if token is undefined then throw "unexpected end of list at line #{tokenLines[tokenIndex]}"
 97 | 
 98 | 				tokenIndex++
 99 | 				if token is paren.closing
100 | 					return new typeClasses[if expectSet then "Set" else paren.class] L
101 | 				else 
102 | 					L.push read_ahead token, tokenIndex
103 | 
104 | 		else if token in ")]}"
105 | 			throw "unexpected #{token} at line #{tokenLines[tokenIndex]}"
106 | 		else
107 | 			handledToken = handleToken token
108 | 			if handledToken instanceof Tag
109 | 				token = tokens.shift()
110 | 				tokenIndex++
111 | 
112 | 				if token is undefined then throw "was expecting something to follow a tag at line #{tokenLines[tokenIndex]}"
113 | 
114 | 				tagged = new typeClasses.Tagged handledToken, read_ahead token, tokenIndex, handledToken.dn() is ""
115 | 
116 | 				if handledToken.dn() is ""
117 | 					if tagged.obj() instanceof typeClasses.Set
118 | 						return tagged.obj()
119 | 					else
120 | 						throw "Exepected a set but did not get one at line #{tokenLines[tokenIndex]}"
121 | 					
122 | 				if tagged.tag().dn() is "_"
123 | 					return new typeClasses.Discard
124 | 				
125 | 				if tagActions[tagged.tag().dn()]?
126 | 					return tagActions[tagged.tag().dn()].action tagged.obj()
127 | 				
128 | 				return tagged
129 | 			else
130 | 				return handledToken
131 | 
132 | 	token1 = tokens.shift()
133 | 	if token1 is undefined
134 | 		return undefined 
135 | 	else
136 | 		result = read_ahead token1
137 | 		if result instanceof typeClasses.Discard 
138 | 			return ""
139 | 		return result
140 | 		
141 | parse = (string) -> read lex string 
142 | 
143 | module.exports = 
144 | 	Char: Char
145 | 	char: char
146 | 	Iterable: Iterable
147 | 	Symbol: Symbol
148 | 	sym: sym	
149 | 	Keyword: Keyword
150 | 	kw: kw
151 | 	BigInt: BigInt
152 | 	bigInt: bigInt 
153 | 	List: List
154 | 	Vector: Vector
155 | 	Pair: Pair
156 | 	Map: Map
157 | 	Set: Set
158 | 	Tag: Tag
159 | 	Tagged: Tagged
160 | 
161 | 	setTypeClass: (typeName, klass) -> 
162 | 		if typeClasses[typeName]?
163 | 			module.exports[typeName] = klass 
164 | 			typeClasses[typeName] = klass
165 | 			
166 | 	setTagAction: (tag, action) -> tagActions[tag.dn()] = tag: tag, action: action
167 | 	setTokenHandler: (handler, pattern, action) -> tokenHandlers[handler] = {pattern, action}
168 | 	setTokenPattern: (handler, pattern) -> tokenHandlers[handler].pattern = pattern
169 | 	setTokenAction: (handler, action) -> tokenHandlers[handler].action = action
170 | 	setEncodeHandler: (handler, test, action) -> encodeHandlers[handler] = {test, action}
171 | 	setEncodeTest: (type, test) -> encodeHandlers[type].test = test
172 | 	setEncodeAction: (type, action) -> encodeHandlers[type].action = action
173 | 	parse: parse
174 | 	encode: encode
175 | 	encodeJson: encodeJson
176 | 	toJS: (obj) -> if obj?.jsEncode? then obj.jsEncode() else obj
177 | 	atPath: require "./atPath"
178 | 	unify: require("./unify")(parse)
179 | 	compile: require "./compile"
180 | 
181 | if typeof window is "undefined"
182 | 	fs = require "fs"
183 | 	module.exports.readFile = (file, cb) -> 
184 | 		fs.readFile file, "utf-8", (err, data) -> 
185 | 			if err then throw err
186 | 			cb parse data
187 | 
188 | 	module.exports.readFileSync = (file) -> 
189 | 		parse fs.readFileSync file, "utf-8"
190 | 


--------------------------------------------------------------------------------
/src/tags.coffee:
--------------------------------------------------------------------------------
 1 | {Prim} = require "./atoms"
 2 | type = require "./type"
 3 | 
 4 | class Tag
 5 | 	constructor: (@namespace, @name...) ->
 6 | 		if arguments.length is 1
 7 | 			[@namespace, @name...] = arguments[0].split('/')
 8 | 			
 9 | 	ns: -> @namespace
10 | 	dn: -> [@namespace].concat(@name).join('/')
11 | 	
12 | class Tagged extends Prim
13 | 	constructor: (@_tag, @_obj) ->
14 | 
15 | 	jsEncode: -> 
16 | 		tag: @tag().dn(), value: @obj().jsEncode()
17 | 
18 | 	ednEncode: ->
19 | 		"\##{@tag().dn()} #{require("./encode").encode @obj()}"
20 | 
21 | 	jsonEncode: ->
22 | 		Tagged: [@tag().dn(), if @obj().jsonEncode? then @obj().jsonEncode() else @obj()]
23 | 		
24 | 	tag: -> @_tag
25 | 	obj: -> @_obj
26 | 
27 | 	walk: (iter) ->
28 | 		new Tagged @_tag, if type(@_obj.walk) is "function" then @_obj.walk iter else iter @_obj
29 | 		
30 | tagActions =
31 | 	uuid: tag: (new Tag "uuid"), action: (obj) -> obj
32 | 	inst: tag: (new Tag "inst"), action: (obj) -> new Date Date.parse obj
33 | 	
34 | module.exports = {Tag, Tagged, tagActions}
35 | 


--------------------------------------------------------------------------------
/src/tokens.coffee:
--------------------------------------------------------------------------------
 1 | {Char, StringObj, char, kw, sym, bigInt} = require "./atoms"
 2 | {Tag} = require "./tags"
 3 | 
 4 | handleToken = (token) ->
 5 | 	if token instanceof StringObj
 6 | 		return token.toString()
 7 | 		
 8 | 	for name, handler of tokenHandlers
 9 | 		if handler.pattern.test token
10 | 			return handler.action token
11 | 
12 | 	sym token
13 | 
14 | tokenHandlers =
15 | 	nil:       pattern: /^nil$/,               action: (token) -> null
16 | 	boolean:   pattern: /^true$|^false$/,      action: (token) -> token is "true"
17 | 	keyword:   pattern: /^[\:].*$/,            action: (token) -> kw token
18 | 	char:      pattern: /^\\.*$/,              action: (token) -> char token[1..-1]
19 | 	integer:   pattern: /^[\-\+]?[0-9]+N?$/,   action: (token) -> 
20 | 		#allows for numbers larger than js can handle
21 | 		#we purposely "box" it so that an error will occur
22 | 		#if someone attempts to treat it as a normal number
23 | 		if /\d{15,}/.test token then return bigInt token
24 | 		
25 | 		parseInt if token is "-0" then "0" else token
26 | 	float:     pattern: /^[\-\+]?[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?M?$/, action: (token) -> parseFloat token
27 | 	tagged:    pattern: /^#.*$/,               action: (token) -> new Tag token[1..-1]
28 | 
29 | module.exports = {handleToken, tokenHandlers}
30 | 


--------------------------------------------------------------------------------
/src/type.coffee:
--------------------------------------------------------------------------------
1 | module.exports = if typeof module isnt "undefined" and this.module isnt module
2 | 		require "type-component"
3 | 	else
4 | 		require "type"
5 | 


--------------------------------------------------------------------------------
/src/unify.coffee:
--------------------------------------------------------------------------------
 1 | type = require "./type"
 2 | {Map, Pair} = require "./collections"
 3 | {Symbol, kw, sym} = require "./atoms"
 4 | 
 5 | module.exports = (parse) -> (data, values, tokenStart = "?") ->
 6 | 	if type(data) is "string" then data = parse data 
 7 | 	if type(values) is "string" then values = parse values
 8 | 	
 9 | 	valExists = (v) -> 
10 | 		if values instanceof Map 
11 | 			if values.exists v then values.at v
12 | 			else if values.exists sym(v) then values.at sym(v)
13 | 			else if values.exists kw(":#{v}") then values.at kw(":#{v}")
14 | 		else
15 | 			values[v]
16 | 
17 | 	unifyToken = (t) -> 
18 | 		if t instanceof Symbol and "#{t}"[0] is tokenStart and (val = valExists "#{t}"[1..-1])? then return val else t
19 | 
20 | 	data.walk (v, k) -> 
21 | 		if k? then new Pair(unifyToken(k), unifyToken(v)) else unifyToken v


--------------------------------------------------------------------------------
/test/all-edn-tests.coffee:
--------------------------------------------------------------------------------
 1 | {assert, logTotals} = require "./assertion"
 2 | fs = require "fs"
 3 | equals = require "equals"
 4 | edn = require "../src/reader"
 5 | 
 6 | testDir = "./test/edn-tests/valid-edn"
 7 | jsDir = "./test/edn-tests/platforms/js"
 8 | 
 9 | files = fs.readdirSync "./test/edn-tests/valid-edn"
10 | files.forEach (file) -> 
11 | 	validEdn = fs.readFileSync "#{testDir}/#{file}", "utf-8"
12 | 	expectedJs = fs.readFileSync "#{jsDir}/#{file.replace(/\..+$/, '.js')}", "utf-8"
13 | 	expected = eval "(function(){return #{expectedJs}})()"
14 | 	parsedToJs = edn.toJS edn.parse validEdn
15 | 	assert file, parsedToJs, expected
16 | 
17 | logTotals()
18 | 


--------------------------------------------------------------------------------
/test/all-invalid-edn-tests.coffee:
--------------------------------------------------------------------------------
 1 | {assertNotParse, assertSkip, logTotals} = require "./assertion"
 2 | fs = require "fs"
 3 | equals = require "equals"
 4 | edn = require "../src/reader"
 5 | 
 6 | testDir = "./test/edn-tests/invalid-edn"
 7 | 
 8 | skipTests = [
 9 |     "brace-mismatch-nested-2.edn",
10 |     "curly-unopened.edn",
11 |     "hash-keyword.edn"
12 | ]
13 | 
14 | files = fs.readdirSync testDir
15 | files.forEach (file) ->
16 |     if skipTests.indexOf(file) == -1
17 |         invalidEdn = fs.readFileSync "#{testDir}/#{file}", "utf-8"
18 |         assertNotParse file, invalidEdn
19 |     else
20 |         assertSkip file
21 | 
22 | logTotals()
23 | 


--------------------------------------------------------------------------------
/test/assertion.coffee:
--------------------------------------------------------------------------------
 1 | edn = require "../src/reader"
 2 | us = require "underscore"
 3 | 
 4 | passed = 0
 5 | failed = 0
 6 | skipped = 0
 7 | 
 8 | isVal = (val) -> (comp) -> us.isEqual comp, val
 9 | 
10 | isNotVal = (val) -> (comp) -> not us.isEqual comp, val
11 | 
12 | assert = (desc, result, pred) ->
13 | 	if not us.isFunction pred
14 | 		pred = isVal pred
15 | 
16 | 	if pred result
17 | 		passed++
18 | 		console.log "[OK]", desc
19 | 	else
20 | 		failed++
21 | 		console.log "[FAIL]", desc
22 | 		console.log "we got:", if result.jsEncode? then result.jsEncode() else result
23 | 
24 | assertParse = (desc, str, pred) ->
25 | 	try	 
26 | 		result = edn.parse str
27 | 	catch e 
28 | 		result = e
29 | 
30 | 	assert desc, result, pred
31 | 
32 | assertNotParse = (desc, str) -> 
33 | 	try 
34 | 		edn.parse str
35 | 		result = false
36 | 	catch e
37 | 		result = true
38 | 
39 | 	assert desc, str, -> result
40 | 
41 | assertEncode = (desc, obj, pred) ->
42 | 	assert desc, (edn.encode obj), pred
43 | 	
44 | assertSkip = (desc) ->
45 | 	skipped++
46 | 	console.log "[SKIP]", desc
47 | 
48 | totalString = -> 
49 | 	"PASSED: #{passed}/#{passed + failed}" +
50 | 	(if skipped then ", SKIPPED: #{skipped}" else "")
51 | 
52 | logTotals = ->
53 | 	console.log totalString(), "\n"
54 | 	if failed > 0
55 | 		process.exit 1
56 | 	
57 | module.exports = {isVal, isNotVal, assert, assertParse, assertNotParse, assertEncode, assertSkip, logTotals}


--------------------------------------------------------------------------------
/test/perf.coffee:
--------------------------------------------------------------------------------
 1 | edn = require "../src/reader"
 2 | fs = require "fs"
 3 | micro = require "microtime"
 4 | 
 5 | testJson = (data) -> 
 6 | 	now = micro.now() 
 7 | 	JSON.parse data
 8 | 	end = micro.now()
 9 | 	console.log "JSON: #{end - now}"
10 | 
11 | testEdn = (data) -> 
12 | 	now = micro.now()
13 | 	edn.parse data
14 | 	end = micro.now()
15 | 	console.log "EDN: #{end - now}"
16 | 
17 | edn.readFileSync("./test/performance-json/items.edn").each (file) -> 
18 | 	console.log "COMPARE #{file}"
19 | 	testJson fs.readFileSync "./test/performance-json/#{file}.json", "utf-8"
20 | 	testEdn fs.readFileSync "./test/edn-tests/performance/#{file}.edn", "utf-8"
21 | 
22 | 


--------------------------------------------------------------------------------
/test/performance-json/items.edn:
--------------------------------------------------------------------------------
 1 | [vector-of-strings
 2 |  vector-of-uuid
 3 |  vector-of-instants
 4 |  map-of-maps
 5 |  vector-of-maps
 6 |  vector-of-bigints
 7 |  large-keyword-map
 8 |  large-symbol-map
 9 |  vector-of-longs
10 |  set-of-longs
11 |  vector-of-doubles
12 |  vector-of-bigdecs
13 |  map-tree
14 |  mixed-vector
15 |  set-of-keywords
16 |  vector-of-keywords
17 |  set-of-symbols
18 |  vector-of-symbols
19 |  vector-tree
20 |  vector-of-ints
21 |  vector-of-vectors
22 |  vector-of-booleans
23 |  list-of-nil
24 |  vector-of-nil
25 |  vector-of-chars]
26 | 


--------------------------------------------------------------------------------
/test/performance-json/list-of-nil.json:
--------------------------------------------------------------------------------
   1 | [
   2 |   null,
   3 |   null,
   4 |   null,
   5 |   null,
   6 |   null,
   7 |   null,
   8 |   null,
   9 |   null,
  10 |   null,
  11 |   null,
  12 |   null,
  13 |   null,
  14 |   null,
  15 |   null,
  16 |   null,
  17 |   null,
  18 |   null,
  19 |   null,
  20 |   null,
  21 |   null,
  22 |   null,
  23 |   null,
  24 |   null,
  25 |   null,
  26 |   null,
  27 |   null,
  28 |   null,
  29 |   null,
  30 |   null,
  31 |   null,
  32 |   null,
  33 |   null,
  34 |   null,
  35 |   null,
  36 |   null,
  37 |   null,
  38 |   null,
  39 |   null,
  40 |   null,
  41 |   null,
  42 |   null,
  43 |   null,
  44 |   null,
  45 |   null,
  46 |   null,
  47 |   null,
  48 |   null,
  49 |   null,
  50 |   null,
  51 |   null,
  52 |   null,
  53 |   null,
  54 |   null,
  55 |   null,
  56 |   null,
  57 |   null,
  58 |   null,
  59 |   null,
  60 |   null,
  61 |   null,
  62 |   null,
  63 |   null,
  64 |   null,
  65 |   null,
  66 |   null,
  67 |   null,
  68 |   null,
  69 |   null,
  70 |   null,
  71 |   null,
  72 |   null,
  73 |   null,
  74 |   null,
  75 |   null,
  76 |   null,
  77 |   null,
  78 |   null,
  79 |   null,
  80 |   null,
  81 |   null,
  82 |   null,
  83 |   null,
  84 |   null,
  85 |   null,
  86 |   null,
  87 |   null,
  88 |   null,
  89 |   null,
  90 |   null,
  91 |   null,
  92 |   null,
  93 |   null,
  94 |   null,
  95 |   null,
  96 |   null,
  97 |   null,
  98 |   null,
  99 |   null,
 100 |   null,
 101 |   null,
 102 |   null,
 103 |   null,
 104 |   null,
 105 |   null,
 106 |   null,
 107 |   null,
 108 |   null,
 109 |   null,
 110 |   null,
 111 |   null,
 112 |   null,
 113 |   null,
 114 |   null,
 115 |   null,
 116 |   null,
 117 |   null,
 118 |   null,
 119 |   null,
 120 |   null,
 121 |   null,
 122 |   null,
 123 |   null,
 124 |   null,
 125 |   null,
 126 |   null,
 127 |   null,
 128 |   null,
 129 |   null,
 130 |   null,
 131 |   null,
 132 |   null,
 133 |   null,
 134 |   null,
 135 |   null,
 136 |   null,
 137 |   null,
 138 |   null,
 139 |   null,
 140 |   null,
 141 |   null,
 142 |   null,
 143 |   null,
 144 |   null,
 145 |   null,
 146 |   null,
 147 |   null,
 148 |   null,
 149 |   null,
 150 |   null,
 151 |   null,
 152 |   null,
 153 |   null,
 154 |   null,
 155 |   null,
 156 |   null,
 157 |   null,
 158 |   null,
 159 |   null,
 160 |   null,
 161 |   null,
 162 |   null,
 163 |   null,
 164 |   null,
 165 |   null,
 166 |   null,
 167 |   null,
 168 |   null,
 169 |   null,
 170 |   null,
 171 |   null,
 172 |   null,
 173 |   null,
 174 |   null,
 175 |   null,
 176 |   null,
 177 |   null,
 178 |   null,
 179 |   null,
 180 |   null,
 181 |   null,
 182 |   null,
 183 |   null,
 184 |   null,
 185 |   null,
 186 |   null,
 187 |   null,
 188 |   null,
 189 |   null,
 190 |   null,
 191 |   null,
 192 |   null,
 193 |   null,
 194 |   null,
 195 |   null,
 196 |   null,
 197 |   null,
 198 |   null,
 199 |   null,
 200 |   null,
 201 |   null,
 202 |   null,
 203 |   null,
 204 |   null,
 205 |   null,
 206 |   null,
 207 |   null,
 208 |   null,
 209 |   null,
 210 |   null,
 211 |   null,
 212 |   null,
 213 |   null,
 214 |   null,
 215 |   null,
 216 |   null,
 217 |   null,
 218 |   null,
 219 |   null,
 220 |   null,
 221 |   null,
 222 |   null,
 223 |   null,
 224 |   null,
 225 |   null,
 226 |   null,
 227 |   null,
 228 |   null,
 229 |   null,
 230 |   null,
 231 |   null,
 232 |   null,
 233 |   null,
 234 |   null,
 235 |   null,
 236 |   null,
 237 |   null,
 238 |   null,
 239 |   null,
 240 |   null,
 241 |   null,
 242 |   null,
 243 |   null,
 244 |   null,
 245 |   null,
 246 |   null,
 247 |   null,
 248 |   null,
 249 |   null,
 250 |   null,
 251 |   null,
 252 |   null,
 253 |   null,
 254 |   null,
 255 |   null,
 256 |   null,
 257 |   null,
 258 |   null,
 259 |   null,
 260 |   null,
 261 |   null,
 262 |   null,
 263 |   null,
 264 |   null,
 265 |   null,
 266 |   null,
 267 |   null,
 268 |   null,
 269 |   null,
 270 |   null,
 271 |   null,
 272 |   null,
 273 |   null,
 274 |   null,
 275 |   null,
 276 |   null,
 277 |   null,
 278 |   null,
 279 |   null,
 280 |   null,
 281 |   null,
 282 |   null,
 283 |   null,
 284 |   null,
 285 |   null,
 286 |   null,
 287 |   null,
 288 |   null,
 289 |   null,
 290 |   null,
 291 |   null,
 292 |   null,
 293 |   null,
 294 |   null,
 295 |   null,
 296 |   null,
 297 |   null,
 298 |   null,
 299 |   null,
 300 |   null,
 301 |   null,
 302 |   null,
 303 |   null,
 304 |   null,
 305 |   null,
 306 |   null,
 307 |   null,
 308 |   null,
 309 |   null,
 310 |   null,
 311 |   null,
 312 |   null,
 313 |   null,
 314 |   null,
 315 |   null,
 316 |   null,
 317 |   null,
 318 |   null,
 319 |   null,
 320 |   null,
 321 |   null,
 322 |   null,
 323 |   null,
 324 |   null,
 325 |   null,
 326 |   null,
 327 |   null,
 328 |   null,
 329 |   null,
 330 |   null,
 331 |   null,
 332 |   null,
 333 |   null,
 334 |   null,
 335 |   null,
 336 |   null,
 337 |   null,
 338 |   null,
 339 |   null,
 340 |   null,
 341 |   null,
 342 |   null,
 343 |   null,
 344 |   null,
 345 |   null,
 346 |   null,
 347 |   null,
 348 |   null,
 349 |   null,
 350 |   null,
 351 |   null,
 352 |   null,
 353 |   null,
 354 |   null,
 355 |   null,
 356 |   null,
 357 |   null,
 358 |   null,
 359 |   null,
 360 |   null,
 361 |   null,
 362 |   null,
 363 |   null,
 364 |   null,
 365 |   null,
 366 |   null,
 367 |   null,
 368 |   null,
 369 |   null,
 370 |   null,
 371 |   null,
 372 |   null,
 373 |   null,
 374 |   null,
 375 |   null,
 376 |   null,
 377 |   null,
 378 |   null,
 379 |   null,
 380 |   null,
 381 |   null,
 382 |   null,
 383 |   null,
 384 |   null,
 385 |   null,
 386 |   null,
 387 |   null,
 388 |   null,
 389 |   null,
 390 |   null,
 391 |   null,
 392 |   null,
 393 |   null,
 394 |   null,
 395 |   null,
 396 |   null,
 397 |   null,
 398 |   null,
 399 |   null,
 400 |   null,
 401 |   null,
 402 |   null,
 403 |   null,
 404 |   null,
 405 |   null,
 406 |   null,
 407 |   null,
 408 |   null,
 409 |   null,
 410 |   null,
 411 |   null,
 412 |   null,
 413 |   null,
 414 |   null,
 415 |   null,
 416 |   null,
 417 |   null,
 418 |   null,
 419 |   null,
 420 |   null,
 421 |   null,
 422 |   null,
 423 |   null,
 424 |   null,
 425 |   null,
 426 |   null,
 427 |   null,
 428 |   null,
 429 |   null,
 430 |   null,
 431 |   null,
 432 |   null,
 433 |   null,
 434 |   null,
 435 |   null,
 436 |   null,
 437 |   null,
 438 |   null,
 439 |   null,
 440 |   null,
 441 |   null,
 442 |   null,
 443 |   null,
 444 |   null,
 445 |   null,
 446 |   null,
 447 |   null,
 448 |   null,
 449 |   null,
 450 |   null,
 451 |   null,
 452 |   null,
 453 |   null,
 454 |   null,
 455 |   null,
 456 |   null,
 457 |   null,
 458 |   null,
 459 |   null,
 460 |   null,
 461 |   null,
 462 |   null,
 463 |   null,
 464 |   null,
 465 |   null,
 466 |   null,
 467 |   null,
 468 |   null,
 469 |   null,
 470 |   null,
 471 |   null,
 472 |   null,
 473 |   null,
 474 |   null,
 475 |   null,
 476 |   null,
 477 |   null,
 478 |   null,
 479 |   null,
 480 |   null,
 481 |   null,
 482 |   null,
 483 |   null,
 484 |   null,
 485 |   null,
 486 |   null,
 487 |   null,
 488 |   null,
 489 |   null,
 490 |   null,
 491 |   null,
 492 |   null,
 493 |   null,
 494 |   null,
 495 |   null,
 496 |   null,
 497 |   null,
 498 |   null,
 499 |   null,
 500 |   null,
 501 |   null,
 502 |   null,
 503 |   null,
 504 |   null,
 505 |   null,
 506 |   null,
 507 |   null,
 508 |   null,
 509 |   null,
 510 |   null,
 511 |   null,
 512 |   null,
 513 |   null,
 514 |   null,
 515 |   null,
 516 |   null,
 517 |   null,
 518 |   null,
 519 |   null,
 520 |   null,
 521 |   null,
 522 |   null,
 523 |   null,
 524 |   null,
 525 |   null,
 526 |   null,
 527 |   null,
 528 |   null,
 529 |   null,
 530 |   null,
 531 |   null,
 532 |   null,
 533 |   null,
 534 |   null,
 535 |   null,
 536 |   null,
 537 |   null,
 538 |   null,
 539 |   null,
 540 |   null,
 541 |   null,
 542 |   null,
 543 |   null,
 544 |   null,
 545 |   null,
 546 |   null,
 547 |   null,
 548 |   null,
 549 |   null,
 550 |   null,
 551 |   null,
 552 |   null,
 553 |   null,
 554 |   null,
 555 |   null,
 556 |   null,
 557 |   null,
 558 |   null,
 559 |   null,
 560 |   null,
 561 |   null,
 562 |   null,
 563 |   null,
 564 |   null,
 565 |   null,
 566 |   null,
 567 |   null,
 568 |   null,
 569 |   null,
 570 |   null,
 571 |   null,
 572 |   null,
 573 |   null,
 574 |   null,
 575 |   null,
 576 |   null,
 577 |   null,
 578 |   null,
 579 |   null,
 580 |   null,
 581 |   null,
 582 |   null,
 583 |   null,
 584 |   null,
 585 |   null,
 586 |   null,
 587 |   null,
 588 |   null,
 589 |   null,
 590 |   null,
 591 |   null,
 592 |   null,
 593 |   null,
 594 |   null,
 595 |   null,
 596 |   null,
 597 |   null,
 598 |   null,
 599 |   null,
 600 |   null,
 601 |   null,
 602 |   null,
 603 |   null,
 604 |   null,
 605 |   null,
 606 |   null,
 607 |   null,
 608 |   null,
 609 |   null,
 610 |   null,
 611 |   null,
 612 |   null,
 613 |   null,
 614 |   null,
 615 |   null,
 616 |   null,
 617 |   null,
 618 |   null,
 619 |   null,
 620 |   null,
 621 |   null,
 622 |   null,
 623 |   null,
 624 |   null,
 625 |   null,
 626 |   null,
 627 |   null,
 628 |   null,
 629 |   null,
 630 |   null,
 631 |   null,
 632 |   null,
 633 |   null,
 634 |   null,
 635 |   null,
 636 |   null,
 637 |   null,
 638 |   null,
 639 |   null,
 640 |   null,
 641 |   null,
 642 |   null,
 643 |   null,
 644 |   null,
 645 |   null,
 646 |   null,
 647 |   null,
 648 |   null,
 649 |   null,
 650 |   null,
 651 |   null,
 652 |   null,
 653 |   null,
 654 |   null,
 655 |   null,
 656 |   null,
 657 |   null,
 658 |   null,
 659 |   null,
 660 |   null,
 661 |   null,
 662 |   null,
 663 |   null,
 664 |   null,
 665 |   null,
 666 |   null,
 667 |   null,
 668 |   null,
 669 |   null,
 670 |   null,
 671 |   null,
 672 |   null,
 673 |   null,
 674 |   null,
 675 |   null,
 676 |   null,
 677 |   null,
 678 |   null,
 679 |   null,
 680 |   null,
 681 |   null,
 682 |   null,
 683 |   null,
 684 |   null,
 685 |   null,
 686 |   null,
 687 |   null,
 688 |   null,
 689 |   null,
 690 |   null,
 691 |   null,
 692 |   null,
 693 |   null,
 694 |   null,
 695 |   null,
 696 |   null,
 697 |   null,
 698 |   null,
 699 |   null,
 700 |   null,
 701 |   null,
 702 |   null,
 703 |   null,
 704 |   null,
 705 |   null,
 706 |   null,
 707 |   null,
 708 |   null,
 709 |   null,
 710 |   null,
 711 |   null,
 712 |   null,
 713 |   null,
 714 |   null,
 715 |   null,
 716 |   null,
 717 |   null,
 718 |   null,
 719 |   null,
 720 |   null,
 721 |   null,
 722 |   null,
 723 |   null,
 724 |   null,
 725 |   null,
 726 |   null,
 727 |   null,
 728 |   null,
 729 |   null,
 730 |   null,
 731 |   null,
 732 |   null,
 733 |   null,
 734 |   null,
 735 |   null,
 736 |   null,
 737 |   null,
 738 |   null,
 739 |   null,
 740 |   null,
 741 |   null,
 742 |   null,
 743 |   null,
 744 |   null,
 745 |   null,
 746 |   null,
 747 |   null,
 748 |   null,
 749 |   null,
 750 |   null,
 751 |   null,
 752 |   null,
 753 |   null,
 754 |   null,
 755 |   null,
 756 |   null,
 757 |   null,
 758 |   null,
 759 |   null,
 760 |   null,
 761 |   null,
 762 |   null,
 763 |   null,
 764 |   null,
 765 |   null,
 766 |   null,
 767 |   null,
 768 |   null,
 769 |   null,
 770 |   null,
 771 |   null,
 772 |   null,
 773 |   null,
 774 |   null,
 775 |   null,
 776 |   null,
 777 |   null,
 778 |   null,
 779 |   null,
 780 |   null,
 781 |   null,
 782 |   null,
 783 |   null,
 784 |   null,
 785 |   null,
 786 |   null,
 787 |   null,
 788 |   null,
 789 |   null,
 790 |   null,
 791 |   null,
 792 |   null,
 793 |   null,
 794 |   null,
 795 |   null,
 796 |   null,
 797 |   null,
 798 |   null,
 799 |   null,
 800 |   null,
 801 |   null,
 802 |   null,
 803 |   null,
 804 |   null,
 805 |   null,
 806 |   null,
 807 |   null,
 808 |   null,
 809 |   null,
 810 |   null,
 811 |   null,
 812 |   null,
 813 |   null,
 814 |   null,
 815 |   null,
 816 |   null,
 817 |   null,
 818 |   null,
 819 |   null,
 820 |   null,
 821 |   null,
 822 |   null,
 823 |   null,
 824 |   null,
 825 |   null,
 826 |   null,
 827 |   null,
 828 |   null,
 829 |   null,
 830 |   null,
 831 |   null,
 832 |   null,
 833 |   null,
 834 |   null,
 835 |   null,
 836 |   null,
 837 |   null,
 838 |   null,
 839 |   null,
 840 |   null,
 841 |   null,
 842 |   null,
 843 |   null,
 844 |   null,
 845 |   null,
 846 |   null,
 847 |   null,
 848 |   null,
 849 |   null,
 850 |   null,
 851 |   null,
 852 |   null,
 853 |   null,
 854 |   null,
 855 |   null,
 856 |   null,
 857 |   null,
 858 |   null,
 859 |   null,
 860 |   null,
 861 |   null,
 862 |   null,
 863 |   null,
 864 |   null,
 865 |   null,
 866 |   null,
 867 |   null,
 868 |   null,
 869 |   null,
 870 |   null,
 871 |   null,
 872 |   null,
 873 |   null,
 874 |   null,
 875 |   null,
 876 |   null,
 877 |   null,
 878 |   null,
 879 |   null,
 880 |   null,
 881 |   null,
 882 |   null,
 883 |   null,
 884 |   null,
 885 |   null,
 886 |   null,
 887 |   null,
 888 |   null,
 889 |   null,
 890 |   null,
 891 |   null,
 892 |   null,
 893 |   null,
 894 |   null,
 895 |   null,
 896 |   null,
 897 |   null,
 898 |   null,
 899 |   null,
 900 |   null,
 901 |   null,
 902 |   null,
 903 |   null,
 904 |   null,
 905 |   null,
 906 |   null,
 907 |   null,
 908 |   null,
 909 |   null,
 910 |   null,
 911 |   null,
 912 |   null,
 913 |   null,
 914 |   null,
 915 |   null,
 916 |   null,
 917 |   null,
 918 |   null,
 919 |   null,
 920 |   null,
 921 |   null,
 922 |   null,
 923 |   null,
 924 |   null,
 925 |   null,
 926 |   null,
 927 |   null,
 928 |   null,
 929 |   null,
 930 |   null,
 931 |   null,
 932 |   null,
 933 |   null,
 934 |   null,
 935 |   null,
 936 |   null,
 937 |   null,
 938 |   null,
 939 |   null,
 940 |   null,
 941 |   null,
 942 |   null,
 943 |   null,
 944 |   null,
 945 |   null,
 946 |   null,
 947 |   null,
 948 |   null,
 949 |   null,
 950 |   null,
 951 |   null,
 952 |   null,
 953 |   null,
 954 |   null,
 955 |   null,
 956 |   null,
 957 |   null,
 958 |   null,
 959 |   null,
 960 |   null,
 961 |   null,
 962 |   null,
 963 |   null,
 964 |   null,
 965 |   null,
 966 |   null,
 967 |   null,
 968 |   null,
 969 |   null,
 970 |   null,
 971 |   null,
 972 |   null,
 973 |   null,
 974 |   null,
 975 |   null,
 976 |   null,
 977 |   null,
 978 |   null,
 979 |   null,
 980 |   null,
 981 |   null,
 982 |   null,
 983 |   null,
 984 |   null,
 985 |   null,
 986 |   null,
 987 |   null,
 988 |   null,
 989 |   null,
 990 |   null,
 991 |   null,
 992 |   null,
 993 |   null,
 994 |   null,
 995 |   null,
 996 |   null,
 997 |   null,
 998 |   null,
 999 |   null,
1000 |   null,
1001 |   null,
1002 |   null,
1003 |   null,
1004 |   null,
1005 |   null,
1006 |   null,
1007 |   null,
1008 |   null,
1009 |   null,
1010 |   null,
1011 |   null,
1012 |   null,
1013 |   null,
1014 |   null,
1015 |   null,
1016 |   null,
1017 |   null,
1018 |   null,
1019 |   null,
1020 |   null,
1021 |   null,
1022 |   null,
1023 |   null,
1024 |   null,
1025 |   null,
1026 |   null,
1027 |   null,
1028 |   null,
1029 |   null,
1030 |   null,
1031 |   null,
1032 |   null,
1033 |   null,
1034 |   null,
1035 |   null,
1036 |   null,
1037 |   null,
1038 |   null,
1039 |   null,
1040 |   null,
1041 |   null,
1042 |   null,
1043 |   null,
1044 |   null,
1045 |   null,
1046 |   null,
1047 |   null,
1048 |   null,
1049 |   null,
1050 |   null,
1051 |   null,
1052 |   null,
1053 |   null,
1054 |   null,
1055 |   null,
1056 |   null,
1057 |   null,
1058 |   null,
1059 |   null,
1060 |   null,
1061 |   null,
1062 |   null,
1063 |   null,
1064 |   null,
1065 |   null,
1066 |   null,
1067 |   null,
1068 |   null,
1069 |   null,
1070 |   null,
1071 |   null,
1072 |   null,
1073 |   null,
1074 |   null,
1075 |   null,
1076 |   null,
1077 |   null,
1078 |   null,
1079 |   null,
1080 |   null,
1081 |   null,
1082 |   null,
1083 |   null,
1084 |   null,
1085 |   null,
1086 |   null,
1087 |   null,
1088 |   null,
1089 |   null,
1090 |   null,
1091 |   null,
1092 |   null,
1093 |   null,
1094 |   null,
1095 |   null,
1096 |   null,
1097 |   null,
1098 |   null,
1099 |   null,
1100 |   null,
1101 |   null,
1102 |   null,
1103 |   null,
1104 |   null,
1105 |   null,
1106 |   null,
1107 |   null,
1108 |   null,
1109 |   null,
1110 |   null,
1111 |   null,
1112 |   null,
1113 |   null,
1114 |   null,
1115 |   null,
1116 |   null,
1117 |   null,
1118 |   null,
1119 |   null,
1120 |   null,
1121 |   null,
1122 |   null,
1123 |   null,
1124 |   null,
1125 |   null,
1126 |   null,
1127 |   null,
1128 |   null,
1129 |   null,
1130 |   null,
1131 |   null,
1132 |   null,
1133 |   null,
1134 |   null,
1135 |   null,
1136 |   null,
1137 |   null,
1138 |   null,
1139 |   null,
1140 |   null,
1141 |   null,
1142 |   null,
1143 |   null,
1144 |   null,
1145 |   null,
1146 |   null,
1147 |   null,
1148 |   null,
1149 |   null,
1150 |   null,
1151 |   null,
1152 |   null,
1153 |   null,
1154 |   null,
1155 |   null,
1156 |   null,
1157 |   null,
1158 |   null,
1159 |   null,
1160 |   null,
1161 |   null,
1162 |   null,
1163 |   null,
1164 |   null,
1165 |   null,
1166 |   null,
1167 |   null,
1168 |   null,
1169 |   null,
1170 |   null,
1171 |   null,
1172 |   null,
1173 |   null,
1174 |   null,
1175 |   null,
1176 |   null,
1177 |   null,
1178 |   null,
1179 |   null,
1180 |   null,
1181 |   null,
1182 |   null,
1183 |   null,
1184 |   null,
1185 |   null,
1186 |   null,
1187 |   null,
1188 |   null,
1189 |   null,
1190 |   null,
1191 |   null,
1192 |   null,
1193 |   null,
1194 |   null,
1195 |   null,
1196 |   null,
1197 |   null,
1198 |   null,
1199 |   null,
1200 |   null,
1201 |   null,
1202 |   null,
1203 |   null,
1204 |   null,
1205 |   null,
1206 |   null,
1207 |   null,
1208 |   null,
1209 |   null,
1210 |   null,
1211 |   null,
1212 |   null,
1213 |   null,
1214 |   null,
1215 |   null,
1216 |   null,
1217 |   null,
1218 |   null,
1219 |   null,
1220 |   null,
1221 |   null,
1222 |   null,
1223 |   null,
1224 |   null,
1225 |   null,
1226 |   null,
1227 |   null,
1228 |   null,
1229 |   null,
1230 |   null,
1231 |   null,
1232 |   null,
1233 |   null,
1234 |   null,
1235 |   null,
1236 |   null,
1237 |   null,
1238 |   null,
1239 |   null,
1240 |   null,
1241 |   null,
1242 |   null,
1243 |   null,
1244 |   null,
1245 |   null,
1246 |   null,
1247 |   null,
1248 |   null,
1249 |   null,
1250 |   null,
1251 |   null,
1252 |   null,
1253 |   null,
1254 |   null,
1255 |   null,
1256 |   null,
1257 |   null,
1258 |   null,
1259 |   null,
1260 |   null,
1261 |   null,
1262 |   null,
1263 |   null,
1264 |   null,
1265 |   null,
1266 |   null,
1267 |   null,
1268 |   null,
1269 |   null,
1270 |   null,
1271 |   null,
1272 |   null,
1273 |   null,
1274 |   null,
1275 |   null,
1276 |   null,
1277 |   null,
1278 |   null,
1279 |   null,
1280 |   null,
1281 |   null,
1282 |   null,
1283 |   null,
1284 |   null,
1285 |   null,
1286 |   null,
1287 |   null,
1288 |   null,
1289 |   null,
1290 |   null,
1291 |   null,
1292 |   null,
1293 |   null,
1294 |   null,
1295 |   null,
1296 |   null,
1297 |   null,
1298 |   null,
1299 |   null,
1300 |   null,
1301 |   null,
1302 |   null,
1303 |   null,
1304 |   null,
1305 |   null,
1306 |   null,
1307 |   null,
1308 |   null,
1309 |   null,
1310 |   null,
1311 |   null,
1312 |   null,
1313 |   null,
1314 |   null,
1315 |   null,
1316 |   null,
1317 |   null,
1318 |   null,
1319 |   null,
1320 |   null,
1321 |   null,
1322 |   null,
1323 |   null,
1324 |   null,
1325 |   null,
1326 |   null,
1327 |   null,
1328 |   null,
1329 |   null,
1330 |   null,
1331 |   null,
1332 |   null,
1333 |   null,
1334 |   null,
1335 |   null,
1336 |   null,
1337 |   null,
1338 |   null,
1339 |   null,
1340 |   null,
1341 |   null,
1342 |   null,
1343 |   null,
1344 |   null,
1345 |   null,
1346 |   null,
1347 |   null,
1348 |   null,
1349 |   null,
1350 |   null,
1351 |   null,
1352 |   null,
1353 |   null,
1354 |   null,
1355 |   null,
1356 |   null,
1357 |   null,
1358 |   null,
1359 |   null,
1360 |   null,
1361 |   null,
1362 |   null,
1363 |   null,
1364 |   null,
1365 |   null,
1366 |   null,
1367 |   null,
1368 |   null,
1369 |   null,
1370 |   null,
1371 |   null,
1372 |   null,
1373 |   null,
1374 |   null,
1375 |   null,
1376 |   null,
1377 |   null,
1378 |   null,
1379 |   null,
1380 |   null,
1381 |   null,
1382 |   null,
1383 |   null,
1384 |   null,
1385 |   null,
1386 |   null,
1387 |   null,
1388 |   null,
1389 |   null,
1390 |   null,
1391 |   null,
1392 |   null,
1393 |   null,
1394 |   null,
1395 |   null,
1396 |   null,
1397 |   null,
1398 |   null,
1399 |   null,
1400 |   null,
1401 |   null,
1402 |   null,
1403 |   null,
1404 |   null,
1405 |   null,
1406 |   null,
1407 |   null,
1408 |   null,
1409 |   null,
1410 |   null,
1411 |   null,
1412 |   null,
1413 |   null,
1414 |   null,
1415 |   null,
1416 |   null,
1417 |   null,
1418 |   null,
1419 |   null,
1420 |   null,
1421 |   null,
1422 |   null,
1423 |   null,
1424 |   null,
1425 |   null,
1426 |   null,
1427 |   null,
1428 |   null,
1429 |   null,
1430 |   null,
1431 |   null,
1432 |   null,
1433 |   null,
1434 |   null,
1435 |   null,
1436 |   null,
1437 |   null,
1438 |   null,
1439 |   null,
1440 |   null,
1441 |   null,
1442 |   null,
1443 |   null,
1444 |   null,
1445 |   null,
1446 |   null,
1447 |   null,
1448 |   null,
1449 |   null,
1450 |   null,
1451 |   null,
1452 |   null,
1453 |   null,
1454 |   null,
1455 |   null,
1456 |   null,
1457 |   null,
1458 |   null,
1459 |   null,
1460 |   null,
1461 |   null,
1462 |   null,
1463 |   null,
1464 |   null,
1465 |   null,
1466 |   null,
1467 |   null,
1468 |   null,
1469 |   null,
1470 |   null,
1471 |   null,
1472 |   null,
1473 |   null,
1474 |   null,
1475 |   null,
1476 |   null,
1477 |   null,
1478 |   null,
1479 |   null,
1480 |   null,
1481 |   null,
1482 |   null,
1483 |   null,
1484 |   null,
1485 |   null,
1486 |   null,
1487 |   null,
1488 |   null,
1489 |   null,
1490 |   null,
1491 |   null,
1492 |   null,
1493 |   null,
1494 |   null,
1495 |   null,
1496 |   null,
1497 |   null,
1498 |   null,
1499 |   null,
1500 |   null,
1501 |   null,
1502 |   null,
1503 |   null,
1504 |   null,
1505 |   null,
1506 |   null,
1507 |   null,
1508 |   null,
1509 |   null,
1510 |   null,
1511 |   null,
1512 |   null,
1513 |   null,
1514 |   null,
1515 |   null,
1516 |   null,
1517 |   null,
1518 |   null,
1519 |   null,
1520 |   null,
1521 |   null,
1522 |   null,
1523 |   null,
1524 |   null,
1525 |   null,
1526 |   null,
1527 |   null,
1528 |   null,
1529 |   null,
1530 |   null,
1531 |   null,
1532 |   null,
1533 |   null,
1534 |   null,
1535 |   null,
1536 |   null,
1537 |   null,
1538 |   null,
1539 |   null,
1540 |   null,
1541 |   null,
1542 |   null,
1543 |   null,
1544 |   null,
1545 |   null,
1546 |   null,
1547 |   null,
1548 |   null,
1549 |   null,
1550 |   null,
1551 |   null,
1552 |   null,
1553 |   null,
1554 |   null,
1555 |   null,
1556 |   null,
1557 |   null,
1558 |   null,
1559 |   null,
1560 |   null,
1561 |   null,
1562 |   null,
1563 |   null,
1564 |   null,
1565 |   null,
1566 |   null,
1567 |   null,
1568 |   null,
1569 |   null,
1570 |   null,
1571 |   null,
1572 |   null,
1573 |   null,
1574 |   null,
1575 |   null,
1576 |   null,
1577 |   null,
1578 |   null,
1579 |   null,
1580 |   null,
1581 |   null,
1582 |   null,
1583 |   null,
1584 |   null,
1585 |   null,
1586 |   null,
1587 |   null,
1588 |   null,
1589 |   null,
1590 |   null,
1591 |   null,
1592 |   null,
1593 |   null,
1594 |   null,
1595 |   null,
1596 |   null,
1597 |   null,
1598 |   null,
1599 |   null,
1600 |   null,
1601 |   null,
1602 |   null,
1603 |   null,
1604 |   null,
1605 |   null,
1606 |   null,
1607 |   null,
1608 |   null,
1609 |   null,
1610 |   null,
1611 |   null,
1612 |   null,
1613 |   null,
1614 |   null,
1615 |   null,
1616 |   null,
1617 |   null,
1618 |   null,
1619 |   null,
1620 |   null,
1621 |   null,
1622 |   null,
1623 |   null,
1624 |   null,
1625 |   null,
1626 |   null,
1627 |   null,
1628 |   null,
1629 |   null,
1630 |   null,
1631 |   null,
1632 |   null,
1633 |   null,
1634 |   null,
1635 |   null,
1636 |   null,
1637 |   null,
1638 |   null,
1639 |   null,
1640 |   null,
1641 |   null,
1642 |   null,
1643 |   null,
1644 |   null,
1645 |   null,
1646 |   null,
1647 |   null,
1648 |   null,
1649 |   null,
1650 |   null,
1651 |   null,
1652 |   null,
1653 |   null,
1654 |   null,
1655 |   null,
1656 |   null,
1657 |   null,
1658 |   null,
1659 |   null,
1660 |   null,
1661 |   null,
1662 |   null,
1663 |   null,
1664 |   null,
1665 |   null,
1666 |   null,
1667 |   null,
1668 |   null,
1669 |   null,
1670 |   null,
1671 |   null,
1672 |   null,
1673 |   null,
1674 |   null,
1675 |   null,
1676 |   null,
1677 |   null,
1678 |   null,
1679 |   null,
1680 |   null,
1681 |   null,
1682 |   null,
1683 |   null,
1684 |   null,
1685 |   null,
1686 |   null,
1687 |   null,
1688 |   null,
1689 |   null,
1690 |   null,
1691 |   null,
1692 |   null,
1693 |   null,
1694 |   null,
1695 |   null,
1696 |   null,
1697 |   null,
1698 |   null,
1699 |   null,
1700 |   null,
1701 |   null,
1702 |   null,
1703 |   null,
1704 |   null,
1705 |   null,
1706 |   null,
1707 |   null,
1708 |   null,
1709 |   null,
1710 |   null,
1711 |   null,
1712 |   null,
1713 |   null,
1714 |   null,
1715 |   null,
1716 |   null,
1717 |   null,
1718 |   null,
1719 |   null,
1720 |   null,
1721 |   null,
1722 |   null,
1723 |   null,
1724 |   null,
1725 |   null,
1726 |   null,
1727 |   null,
1728 |   null,
1729 |   null,
1730 |   null,
1731 |   null,
1732 |   null,
1733 |   null,
1734 |   null,
1735 |   null,
1736 |   null,
1737 |   null,
1738 |   null,
1739 |   null,
1740 |   null,
1741 |   null,
1742 |   null,
1743 |   null,
1744 |   null,
1745 |   null,
1746 |   null,
1747 |   null,
1748 |   null,
1749 |   null,
1750 |   null,
1751 |   null,
1752 |   null,
1753 |   null,
1754 |   null,
1755 |   null,
1756 |   null,
1757 |   null,
1758 |   null,
1759 |   null,
1760 |   null,
1761 |   null,
1762 |   null,
1763 |   null,
1764 |   null,
1765 |   null,
1766 |   null,
1767 |   null,
1768 |   null,
1769 |   null,
1770 |   null,
1771 |   null,
1772 |   null,
1773 |   null,
1774 |   null,
1775 |   null,
1776 |   null,
1777 |   null,
1778 |   null,
1779 |   null,
1780 |   null,
1781 |   null,
1782 |   null,
1783 |   null,
1784 |   null,
1785 |   null,
1786 |   null,
1787 |   null,
1788 |   null,
1789 |   null,
1790 |   null,
1791 |   null,
1792 |   null,
1793 |   null,
1794 |   null,
1795 |   null,
1796 |   null,
1797 |   null,
1798 |   null,
1799 |   null,
1800 |   null,
1801 |   null,
1802 |   null,
1803 |   null,
1804 |   null,
1805 |   null,
1806 |   null,
1807 |   null,
1808 |   null,
1809 |   null,
1810 |   null,
1811 |   null,
1812 |   null,
1813 |   null,
1814 |   null,
1815 |   null,
1816 |   null,
1817 |   null,
1818 |   null,
1819 |   null,
1820 |   null,
1821 |   null,
1822 |   null,
1823 |   null,
1824 |   null,
1825 |   null,
1826 |   null,
1827 |   null,
1828 |   null,
1829 |   null,
1830 |   null,
1831 |   null,
1832 |   null,
1833 |   null,
1834 |   null,
1835 |   null,
1836 |   null,
1837 |   null,
1838 |   null,
1839 |   null,
1840 |   null,
1841 |   null,
1842 |   null,
1843 |   null,
1844 |   null,
1845 |   null,
1846 |   null,
1847 |   null,
1848 |   null,
1849 |   null,
1850 |   null,
1851 |   null,
1852 |   null,
1853 |   null,
1854 |   null,
1855 |   null,
1856 |   null,
1857 |   null,
1858 |   null,
1859 |   null,
1860 |   null,
1861 |   null,
1862 |   null,
1863 |   null,
1864 |   null,
1865 |   null,
1866 |   null,
1867 |   null,
1868 |   null,
1869 |   null,
1870 |   null,
1871 |   null,
1872 |   null,
1873 |   null,
1874 |   null,
1875 |   null,
1876 |   null,
1877 |   null,
1878 |   null,
1879 |   null,
1880 |   null,
1881 |   null,
1882 |   null,
1883 |   null,
1884 |   null,
1885 |   null,
1886 |   null,
1887 |   null,
1888 |   null,
1889 |   null,
1890 |   null,
1891 |   null,
1892 |   null,
1893 |   null,
1894 |   null,
1895 |   null,
1896 |   null,
1897 |   null,
1898 |   null,
1899 |   null,
1900 |   null,
1901 |   null,
1902 |   null,
1903 |   null,
1904 |   null,
1905 |   null,
1906 |   null,
1907 |   null,
1908 |   null,
1909 |   null,
1910 |   null,
1911 |   null,
1912 |   null,
1913 |   null,
1914 |   null,
1915 |   null,
1916 |   null,
1917 |   null,
1918 |   null,
1919 |   null,
1920 |   null,
1921 |   null,
1922 |   null,
1923 |   null,
1924 |   null,
1925 |   null,
1926 |   null,
1927 |   null,
1928 |   null,
1929 |   null,
1930 |   null,
1931 |   null,
1932 |   null,
1933 |   null,
1934 |   null,
1935 |   null,
1936 |   null,
1937 |   null,
1938 |   null,
1939 |   null,
1940 |   null,
1941 |   null,
1942 |   null,
1943 |   null,
1944 |   null,
1945 |   null,
1946 |   null,
1947 |   null,
1948 |   null,
1949 |   null,
1950 |   null,
1951 |   null,
1952 |   null,
1953 |   null,
1954 |   null,
1955 |   null,
1956 |   null,
1957 |   null,
1958 |   null,
1959 |   null,
1960 |   null,
1961 |   null,
1962 |   null,
1963 |   null,
1964 |   null,
1965 |   null,
1966 |   null,
1967 |   null,
1968 |   null,
1969 |   null,
1970 |   null,
1971 |   null,
1972 |   null,
1973 |   null,
1974 |   null,
1975 |   null,
1976 |   null,
1977 |   null,
1978 |   null,
1979 |   null,
1980 |   null,
1981 |   null,
1982 |   null,
1983 |   null,
1984 |   null,
1985 |   null,
1986 |   null,
1987 |   null,
1988 |   null,
1989 |   null,
1990 |   null,
1991 |   null,
1992 |   null,
1993 |   null,
1994 |   null,
1995 |   null,
1996 |   null,
1997 |   null,
1998 |   null,
1999 |   null,
2000 |   null,
2001 |   null,
2002 |   null,
2003 |   null,
2004 |   null,
2005 |   null,
2006 |   null,
2007 |   null,
2008 |   null,
2009 |   null,
2010 |   null,
2011 |   null,
2012 |   null,
2013 |   null,
2014 |   null,
2015 |   null,
2016 |   null,
2017 |   null,
2018 |   null,
2019 |   null,
2020 |   null,
2021 |   null,
2022 |   null,
2023 |   null,
2024 |   null,
2025 |   null,
2026 |   null,
2027 |   null,
2028 |   null,
2029 |   null,
2030 |   null,
2031 |   null,
2032 |   null,
2033 |   null,
2034 |   null,
2035 |   null,
2036 |   null,
2037 |   null,
2038 |   null,
2039 |   null,
2040 |   null,
2041 |   null,
2042 |   null,
2043 |   null,
2044 |   null,
2045 |   null,
2046 |   null,
2047 |   null,
2048 |   null,
2049 |   null
2050 | ]
2051 | 


--------------------------------------------------------------------------------
/test/performance-json/vector-of-booleans.json:
--------------------------------------------------------------------------------
   1 | [
   2 |   false,
   3 |   true,
   4 |   false,
   5 |   false,
   6 |   true,
   7 |   false,
   8 |   false,
   9 |   false,
  10 |   false,
  11 |   false,
  12 |   true,
  13 |   false,
  14 |   false,
  15 |   true,
  16 |   false,
  17 |   false,
  18 |   true,
  19 |   true,
  20 |   true,
  21 |   false,
  22 |   false,
  23 |   true,
  24 |   true,
  25 |   false,
  26 |   true,
  27 |   true,
  28 |   false,
  29 |   false,
  30 |   true,
  31 |   true,
  32 |   true,
  33 |   false,
  34 |   true,
  35 |   true,
  36 |   true,
  37 |   true,
  38 |   true,
  39 |   true,
  40 |   false,
  41 |   true,
  42 |   false,
  43 |   false,
  44 |   true,
  45 |   true,
  46 |   true,
  47 |   true,
  48 |   true,
  49 |   false,
  50 |   false,
  51 |   false,
  52 |   true,
  53 |   true,
  54 |   false,
  55 |   false,
  56 |   false,
  57 |   true,
  58 |   false,
  59 |   false,
  60 |   false,
  61 |   false,
  62 |   true,
  63 |   true,
  64 |   true,
  65 |   true,
  66 |   false,
  67 |   true,
  68 |   true,
  69 |   false,
  70 |   false,
  71 |   true,
  72 |   false,
  73 |   true,
  74 |   false,
  75 |   true,
  76 |   true,
  77 |   true,
  78 |   false,
  79 |   false,
  80 |   true,
  81 |   true,
  82 |   true,
  83 |   false,
  84 |   false,
  85 |   true,
  86 |   false,
  87 |   true,
  88 |   false,
  89 |   false,
  90 |   true,
  91 |   false,
  92 |   false,
  93 |   false,
  94 |   false,
  95 |   false,
  96 |   true,
  97 |   false,
  98 |   true,
  99 |   false,
 100 |   true,
 101 |   true,
 102 |   false,
 103 |   true,
 104 |   true,
 105 |   true,
 106 |   true,
 107 |   true,
 108 |   true,
 109 |   true,
 110 |   false,
 111 |   false,
 112 |   true,
 113 |   false,
 114 |   true,
 115 |   true,
 116 |   false,
 117 |   true,
 118 |   true,
 119 |   true,
 120 |   true,
 121 |   false,
 122 |   false,
 123 |   false,
 124 |   false,
 125 |   true,
 126 |   true,
 127 |   true,
 128 |   true,
 129 |   false,
 130 |   true,
 131 |   true,
 132 |   true,
 133 |   false,
 134 |   true,
 135 |   false,
 136 |   true,
 137 |   true,
 138 |   true,
 139 |   true,
 140 |   true,
 141 |   true,
 142 |   true,
 143 |   true,
 144 |   false,
 145 |   true,
 146 |   false,
 147 |   false,
 148 |   false,
 149 |   true,
 150 |   true,
 151 |   false,
 152 |   true,
 153 |   true,
 154 |   false,
 155 |   true,
 156 |   true,
 157 |   false,
 158 |   true,
 159 |   false,
 160 |   false,
 161 |   true,
 162 |   false,
 163 |   true,
 164 |   false,
 165 |   true,
 166 |   false,
 167 |   true,
 168 |   false,
 169 |   true,
 170 |   false,
 171 |   true,
 172 |   false,
 173 |   false,
 174 |   false,
 175 |   true,
 176 |   true,
 177 |   false,
 178 |   false,
 179 |   true,
 180 |   false,
 181 |   false,
 182 |   true,
 183 |   true,
 184 |   false,
 185 |   false,
 186 |   true,
 187 |   false,
 188 |   true,
 189 |   false,
 190 |   true,
 191 |   false,
 192 |   true,
 193 |   false,
 194 |   false,
 195 |   true,
 196 |   true,
 197 |   false,
 198 |   true,
 199 |   true,
 200 |   false,
 201 |   true,
 202 |   true,
 203 |   false,
 204 |   true,
 205 |   false,
 206 |   true,
 207 |   true,
 208 |   false,
 209 |   true,
 210 |   true,
 211 |   true,
 212 |   false,
 213 |   false,
 214 |   false,
 215 |   true,
 216 |   true,
 217 |   true,
 218 |   false,
 219 |   false,
 220 |   true,
 221 |   true,
 222 |   true,
 223 |   false,
 224 |   true,
 225 |   true,
 226 |   false,
 227 |   true,
 228 |   false,
 229 |   true,
 230 |   true,
 231 |   false,
 232 |   true,
 233 |   false,
 234 |   true,
 235 |   false,
 236 |   false,
 237 |   false,
 238 |   false,
 239 |   true,
 240 |   false,
 241 |   false,
 242 |   true,
 243 |   false,
 244 |   false,
 245 |   false,
 246 |   false,
 247 |   true,
 248 |   true,
 249 |   true,
 250 |   false,
 251 |   true,
 252 |   true,
 253 |   false,
 254 |   false,
 255 |   true,
 256 |   false,
 257 |   false,
 258 |   true,
 259 |   true,
 260 |   false,
 261 |   false,
 262 |   false,
 263 |   true,
 264 |   false,
 265 |   false,
 266 |   true,
 267 |   true,
 268 |   false,
 269 |   false,
 270 |   true,
 271 |   true,
 272 |   false,
 273 |   false,
 274 |   true,
 275 |   true,
 276 |   false,
 277 |   false,
 278 |   false,
 279 |   true,
 280 |   false,
 281 |   true,
 282 |   true,
 283 |   true,
 284 |   false,
 285 |   true,
 286 |   true,
 287 |   true,
 288 |   false,
 289 |   true,
 290 |   false,
 291 |   true,
 292 |   true,
 293 |   false,
 294 |   false,
 295 |   true,
 296 |   false,
 297 |   true,
 298 |   true,
 299 |   false,
 300 |   true,
 301 |   false,
 302 |   true,
 303 |   false,
 304 |   false,
 305 |   false,
 306 |   true,
 307 |   false,
 308 |   false,
 309 |   true,
 310 |   true,
 311 |   true,
 312 |   false,
 313 |   true,
 314 |   false,
 315 |   false,
 316 |   false,
 317 |   false,
 318 |   false,
 319 |   false,
 320 |   false,
 321 |   false,
 322 |   true,
 323 |   false,
 324 |   true,
 325 |   false,
 326 |   false,
 327 |   true,
 328 |   false,
 329 |   false,
 330 |   true,
 331 |   false,
 332 |   true,
 333 |   true,
 334 |   false,
 335 |   false,
 336 |   true,
 337 |   true,
 338 |   false,
 339 |   false,
 340 |   false,
 341 |   true,
 342 |   true,
 343 |   true,
 344 |   true,
 345 |   true,
 346 |   true,
 347 |   false,
 348 |   true,
 349 |   true,
 350 |   true,
 351 |   true,
 352 |   false,
 353 |   true,
 354 |   false,
 355 |   true,
 356 |   true,
 357 |   true,
 358 |   false,
 359 |   true,
 360 |   true,
 361 |   true,
 362 |   false,
 363 |   true,
 364 |   false,
 365 |   true,
 366 |   false,
 367 |   true,
 368 |   false,
 369 |   false,
 370 |   true,
 371 |   true,
 372 |   false,
 373 |   true,
 374 |   true,
 375 |   false,
 376 |   false,
 377 |   false,
 378 |   false,
 379 |   false,
 380 |   true,
 381 |   false,
 382 |   false,
 383 |   false,
 384 |   false,
 385 |   false,
 386 |   true,
 387 |   true,
 388 |   false,
 389 |   true,
 390 |   false,
 391 |   true,
 392 |   false,
 393 |   true,
 394 |   false,
 395 |   true,
 396 |   false,
 397 |   false,
 398 |   true,
 399 |   false,
 400 |   false,
 401 |   true,
 402 |   false,
 403 |   true,
 404 |   true,
 405 |   true,
 406 |   false,
 407 |   true,
 408 |   false,
 409 |   true,
 410 |   true,
 411 |   false,
 412 |   true,
 413 |   false,
 414 |   true,
 415 |   true,
 416 |   true,
 417 |   true,
 418 |   false,
 419 |   false,
 420 |   false,
 421 |   true,
 422 |   false,
 423 |   true,
 424 |   true,
 425 |   false,
 426 |   false,
 427 |   false,
 428 |   true,
 429 |   true,
 430 |   true,
 431 |   false,
 432 |   true,
 433 |   true,
 434 |   false,
 435 |   false,
 436 |   true,
 437 |   true,
 438 |   true,
 439 |   true,
 440 |   true,
 441 |   true,
 442 |   false,
 443 |   true,
 444 |   true,
 445 |   true,
 446 |   true,
 447 |   false,
 448 |   true,
 449 |   true,
 450 |   false,
 451 |   false,
 452 |   true,
 453 |   true,
 454 |   true,
 455 |   true,
 456 |   false,
 457 |   true,
 458 |   false,
 459 |   false,
 460 |   true,
 461 |   true,
 462 |   false,
 463 |   true,
 464 |   false,
 465 |   true,
 466 |   true,
 467 |   true,
 468 |   false,
 469 |   true,
 470 |   false,
 471 |   false,
 472 |   true,
 473 |   true,
 474 |   false,
 475 |   false,
 476 |   true,
 477 |   true,
 478 |   true,
 479 |   true,
 480 |   false,
 481 |   true,
 482 |   false,
 483 |   true,
 484 |   true,
 485 |   true,
 486 |   false,
 487 |   false,
 488 |   false,
 489 |   true,
 490 |   false,
 491 |   false,
 492 |   true,
 493 |   true,
 494 |   false,
 495 |   true,
 496 |   true,
 497 |   false,
 498 |   true,
 499 |   false,
 500 |   false,
 501 |   false,
 502 |   false,
 503 |   false,
 504 |   false,
 505 |   false,
 506 |   true,
 507 |   false,
 508 |   false,
 509 |   false,
 510 |   true,
 511 |   false,
 512 |   true,
 513 |   false,
 514 |   false,
 515 |   false,
 516 |   true,
 517 |   false,
 518 |   true,
 519 |   false,
 520 |   true,
 521 |   false,
 522 |   true,
 523 |   true,
 524 |   true,
 525 |   false,
 526 |   false,
 527 |   true,
 528 |   true,
 529 |   false,
 530 |   true,
 531 |   true,
 532 |   false,
 533 |   false,
 534 |   true,
 535 |   true,
 536 |   false,
 537 |   false,
 538 |   true,
 539 |   true,
 540 |   false,
 541 |   false,
 542 |   true,
 543 |   false,
 544 |   true,
 545 |   false,
 546 |   false,
 547 |   true,
 548 |   true,
 549 |   false,
 550 |   true,
 551 |   false,
 552 |   true,
 553 |   false,
 554 |   false,
 555 |   true,
 556 |   false,
 557 |   false,
 558 |   false,
 559 |   false,
 560 |   false,
 561 |   false,
 562 |   true,
 563 |   false,
 564 |   false,
 565 |   false,
 566 |   true,
 567 |   true,
 568 |   false,
 569 |   false,
 570 |   true,
 571 |   false,
 572 |   false,
 573 |   true,
 574 |   true,
 575 |   false,
 576 |   true,
 577 |   true,
 578 |   true,
 579 |   true,
 580 |   false,
 581 |   false,
 582 |   false,
 583 |   false,
 584 |   true,
 585 |   false,
 586 |   true,
 587 |   false,
 588 |   true,
 589 |   true,
 590 |   false,
 591 |   true,
 592 |   false,
 593 |   false,
 594 |   true,
 595 |   true,
 596 |   true,
 597 |   true,
 598 |   true,
 599 |   true,
 600 |   false,
 601 |   false,
 602 |   false,
 603 |   false,
 604 |   false,
 605 |   true,
 606 |   false,
 607 |   true,
 608 |   false,
 609 |   true,
 610 |   false,
 611 |   true,
 612 |   true,
 613 |   false,
 614 |   false,
 615 |   true,
 616 |   true,
 617 |   false,
 618 |   false,
 619 |   false,
 620 |   true,
 621 |   false,
 622 |   true,
 623 |   true,
 624 |   true,
 625 |   true,
 626 |   false,
 627 |   false,
 628 |   true,
 629 |   true,
 630 |   false,
 631 |   false,
 632 |   true,
 633 |   true,
 634 |   true,
 635 |   true,
 636 |   true,
 637 |   true,
 638 |   false,
 639 |   true,
 640 |   true,
 641 |   true,
 642 |   false,
 643 |   false,
 644 |   false,
 645 |   true,
 646 |   true,
 647 |   false,
 648 |   true,
 649 |   true,
 650 |   true,
 651 |   false,
 652 |   true,
 653 |   false,
 654 |   false,
 655 |   true,
 656 |   true,
 657 |   false,
 658 |   true,
 659 |   false,
 660 |   true,
 661 |   false,
 662 |   true,
 663 |   true,
 664 |   true,
 665 |   true,
 666 |   true,
 667 |   true,
 668 |   true,
 669 |   true,
 670 |   false,
 671 |   false,
 672 |   false,
 673 |   true,
 674 |   false,
 675 |   false,
 676 |   false,
 677 |   true,
 678 |   false,
 679 |   false,
 680 |   false,
 681 |   false,
 682 |   false,
 683 |   false,
 684 |   true,
 685 |   false,
 686 |   true,
 687 |   true,
 688 |   true,
 689 |   false,
 690 |   true,
 691 |   true,
 692 |   true,
 693 |   true,
 694 |   false,
 695 |   false,
 696 |   false,
 697 |   true,
 698 |   true,
 699 |   false,
 700 |   false,
 701 |   false,
 702 |   true,
 703 |   true,
 704 |   false,
 705 |   true,
 706 |   false,
 707 |   true,
 708 |   true,
 709 |   true,
 710 |   false,
 711 |   true,
 712 |   true,
 713 |   false,
 714 |   true,
 715 |   false,
 716 |   true,
 717 |   false,
 718 |   false,
 719 |   false,
 720 |   false,
 721 |   false,
 722 |   true,
 723 |   true,
 724 |   true,
 725 |   true,
 726 |   true,
 727 |   true,
 728 |   false,
 729 |   false,
 730 |   true,
 731 |   true,
 732 |   false,
 733 |   true,
 734 |   false,
 735 |   true,
 736 |   true,
 737 |   true,
 738 |   true,
 739 |   false,
 740 |   true,
 741 |   false,
 742 |   true,
 743 |   false,
 744 |   false,
 745 |   true,
 746 |   true,
 747 |   false,
 748 |   true,
 749 |   false,
 750 |   true,
 751 |   true,
 752 |   false,
 753 |   true,
 754 |   false,
 755 |   true,
 756 |   false,
 757 |   false,
 758 |   false,
 759 |   false,
 760 |   true,
 761 |   true,
 762 |   false,
 763 |   true,
 764 |   false,
 765 |   true,
 766 |   false,
 767 |   true,
 768 |   true,
 769 |   true,
 770 |   true,
 771 |   true,
 772 |   false,
 773 |   false,
 774 |   false,
 775 |   true,
 776 |   false,
 777 |   false,
 778 |   false,
 779 |   true,
 780 |   false,
 781 |   true,
 782 |   true,
 783 |   true,
 784 |   false,
 785 |   true,
 786 |   false,
 787 |   false,
 788 |   false,
 789 |   true,
 790 |   true,
 791 |   false,
 792 |   true,
 793 |   false,
 794 |   false,
 795 |   false,
 796 |   true,
 797 |   false,
 798 |   false,
 799 |   true,
 800 |   true,
 801 |   true,
 802 |   false,
 803 |   false,
 804 |   false,
 805 |   true,
 806 |   true,
 807 |   false,
 808 |   true,
 809 |   false,
 810 |   true,
 811 |   true,
 812 |   false,
 813 |   true,
 814 |   true,
 815 |   false,
 816 |   true,
 817 |   true,
 818 |   false,
 819 |   false,
 820 |   true,
 821 |   false,
 822 |   true,
 823 |   false,
 824 |   false,
 825 |   false,
 826 |   false,
 827 |   true,
 828 |   true,
 829 |   false,
 830 |   false,
 831 |   true,
 832 |   true,
 833 |   false,
 834 |   false,
 835 |   false,
 836 |   true,
 837 |   true,
 838 |   false,
 839 |   true,
 840 |   true,
 841 |   true,
 842 |   true,
 843 |   true,
 844 |   true,
 845 |   true,
 846 |   true,
 847 |   false,
 848 |   false,
 849 |   true,
 850 |   false,
 851 |   true,
 852 |   false,
 853 |   true,
 854 |   false,
 855 |   false,
 856 |   false,
 857 |   false,
 858 |   true,
 859 |   true,
 860 |   true,
 861 |   false,
 862 |   false,
 863 |   false,
 864 |   false,
 865 |   true,
 866 |   false,
 867 |   false,
 868 |   true,
 869 |   true,
 870 |   true,
 871 |   false,
 872 |   false,
 873 |   false,
 874 |   true,
 875 |   true,
 876 |   false,
 877 |   true,
 878 |   true,
 879 |   false,
 880 |   false,
 881 |   false,
 882 |   true,
 883 |   true,
 884 |   false,
 885 |   true,
 886 |   true,
 887 |   false,
 888 |   true,
 889 |   true,
 890 |   true,
 891 |   true,
 892 |   true,
 893 |   false,
 894 |   false,
 895 |   false,
 896 |   true,
 897 |   false,
 898 |   false,
 899 |   true,
 900 |   true,
 901 |   false,
 902 |   true,
 903 |   false,
 904 |   false,
 905 |   false,
 906 |   true,
 907 |   false,
 908 |   false,
 909 |   false,
 910 |   true,
 911 |   false,
 912 |   false,
 913 |   false,
 914 |   true,
 915 |   true,
 916 |   true,
 917 |   false,
 918 |   true,
 919 |   false,
 920 |   true,
 921 |   false,
 922 |   false,
 923 |   true,
 924 |   true,
 925 |   true,
 926 |   true,
 927 |   true,
 928 |   false,
 929 |   false,
 930 |   true,
 931 |   false,
 932 |   false,
 933 |   true,
 934 |   false,
 935 |   false,
 936 |   false,
 937 |   true,
 938 |   false,
 939 |   false,
 940 |   false,
 941 |   false,
 942 |   true,
 943 |   true,
 944 |   true,
 945 |   false,
 946 |   true,
 947 |   false,
 948 |   true,
 949 |   false,
 950 |   true,
 951 |   false,
 952 |   false,
 953 |   true,
 954 |   true,
 955 |   true,
 956 |   true,
 957 |   false,
 958 |   false,
 959 |   false,
 960 |   true,
 961 |   true,
 962 |   true,
 963 |   true,
 964 |   true,
 965 |   true,
 966 |   false,
 967 |   false,
 968 |   false,
 969 |   false,
 970 |   true,
 971 |   true,
 972 |   true,
 973 |   true,
 974 |   false,
 975 |   false,
 976 |   true,
 977 |   false,
 978 |   true,
 979 |   false,
 980 |   true,
 981 |   false,
 982 |   false,
 983 |   false,
 984 |   true,
 985 |   false,
 986 |   true,
 987 |   true,
 988 |   false,
 989 |   true,
 990 |   false,
 991 |   true,
 992 |   false,
 993 |   true,
 994 |   false,
 995 |   false,
 996 |   true,
 997 |   false,
 998 |   false,
 999 |   false,
1000 |   false,
1001 |   false,
1002 |   false,
1003 |   true,
1004 |   false,
1005 |   true,
1006 |   true,
1007 |   true,
1008 |   false,
1009 |   true,
1010 |   false,
1011 |   false,
1012 |   false,
1013 |   true,
1014 |   true,
1015 |   false,
1016 |   false,
1017 |   true,
1018 |   false,
1019 |   true,
1020 |   true,
1021 |   true,
1022 |   false,
1023 |   false,
1024 |   false,
1025 |   true,
1026 |   false,
1027 |   true,
1028 |   false,
1029 |   false,
1030 |   true,
1031 |   false,
1032 |   false,
1033 |   true,
1034 |   true,
1035 |   true,
1036 |   true,
1037 |   true,
1038 |   true,
1039 |   false,
1040 |   false,
1041 |   false,
1042 |   true,
1043 |   false,
1044 |   false,
1045 |   false,
1046 |   false,
1047 |   true,
1048 |   true,
1049 |   false,
1050 |   true,
1051 |   false,
1052 |   true,
1053 |   false,
1054 |   false,
1055 |   false,
1056 |   true,
1057 |   false,
1058 |   true,
1059 |   false,
1060 |   true,
1061 |   true,
1062 |   true,
1063 |   true,
1064 |   true,
1065 |   false,
1066 |   false,
1067 |   true,
1068 |   false,
1069 |   true,
1070 |   false,
1071 |   false,
1072 |   true,
1073 |   true,
1074 |   true,
1075 |   true,
1076 |   false,
1077 |   false,
1078 |   false,
1079 |   true,
1080 |   false,
1081 |   false,
1082 |   true,
1083 |   true,
1084 |   true,
1085 |   true,
1086 |   true,
1087 |   false,
1088 |   false,
1089 |   false,
1090 |   true,
1091 |   true,
1092 |   true,
1093 |   false,
1094 |   false,
1095 |   false,
1096 |   false,
1097 |   false,
1098 |   false,
1099 |   true,
1100 |   false,
1101 |   true,
1102 |   false,
1103 |   true,
1104 |   true,
1105 |   true,
1106 |   false,
1107 |   false,
1108 |   false,
1109 |   true,
1110 |   true,
1111 |   true,
1112 |   false,
1113 |   false,
1114 |   false,
1115 |   false,
1116 |   true,
1117 |   false,
1118 |   false,
1119 |   false,
1120 |   true,
1121 |   true,
1122 |   true,
1123 |   false,
1124 |   false,
1125 |   false,
1126 |   false,
1127 |   true,
1128 |   false,
1129 |   true,
1130 |   false,
1131 |   false,
1132 |   true,
1133 |   true,
1134 |   true,
1135 |   true,
1136 |   true,
1137 |   false,
1138 |   false,
1139 |   true,
1140 |   false,
1141 |   false,
1142 |   true,
1143 |   true,
1144 |   true,
1145 |   true,
1146 |   false,
1147 |   true,
1148 |   false,
1149 |   false,
1150 |   true,
1151 |   false,
1152 |   true,
1153 |   false,
1154 |   false,
1155 |   true,
1156 |   true,
1157 |   true,
1158 |   false,
1159 |   true,
1160 |   true,
1161 |   false,
1162 |   true,
1163 |   false,
1164 |   false,
1165 |   true,
1166 |   false,
1167 |   false,
1168 |   true,
1169 |   false,
1170 |   false,
1171 |   false,
1172 |   false,
1173 |   false,
1174 |   false,
1175 |   false,
1176 |   true,
1177 |   true,
1178 |   false,
1179 |   false,
1180 |   false,
1181 |   true,
1182 |   false,
1183 |   false,
1184 |   true,
1185 |   true,
1186 |   false,
1187 |   false,
1188 |   true,
1189 |   true,
1190 |   true,
1191 |   true,
1192 |   true,
1193 |   true,
1194 |   true,
1195 |   false,
1196 |   false,
1197 |   false,
1198 |   true,
1199 |   true,
1200 |   true,
1201 |   true,
1202 |   false,
1203 |   false,
1204 |   false,
1205 |   false,
1206 |   false,
1207 |   false,
1208 |   false,
1209 |   false,
1210 |   false,
1211 |   true,
1212 |   false,
1213 |   true,
1214 |   true,
1215 |   true,
1216 |   true,
1217 |   false,
1218 |   false,
1219 |   false,
1220 |   true,
1221 |   true,
1222 |   false,
1223 |   false,
1224 |   false,
1225 |   true,
1226 |   false,
1227 |   false,
1228 |   true,
1229 |   true,
1230 |   true,
1231 |   true,
1232 |   true,
1233 |   false,
1234 |   false,
1235 |   true,
1236 |   false,
1237 |   true,
1238 |   true,
1239 |   false,
1240 |   true,
1241 |   true,
1242 |   false,
1243 |   true,
1244 |   true,
1245 |   false,
1246 |   false,
1247 |   true,
1248 |   false,
1249 |   false,
1250 |   true,
1251 |   true,
1252 |   false,
1253 |   false,
1254 |   false,
1255 |   true,
1256 |   true,
1257 |   true,
1258 |   false,
1259 |   false,
1260 |   true,
1261 |   false,
1262 |   true,
1263 |   false,
1264 |   true,
1265 |   false,
1266 |   true,
1267 |   true,
1268 |   true,
1269 |   false,
1270 |   true,
1271 |   false,
1272 |   false,
1273 |   false,
1274 |   false,
1275 |   false,
1276 |   true,
1277 |   false,
1278 |   false,
1279 |   false,
1280 |   true,
1281 |   true,
1282 |   false,
1283 |   false,
1284 |   false,
1285 |   false,
1286 |   false,
1287 |   false,
1288 |   true,
1289 |   false,
1290 |   true,
1291 |   true,
1292 |   true,
1293 |   true,
1294 |   true,
1295 |   false,
1296 |   true,
1297 |   true,
1298 |   false,
1299 |   false,
1300 |   false,
1301 |   false,
1302 |   true,
1303 |   false,
1304 |   false,
1305 |   false,
1306 |   true,
1307 |   true,
1308 |   true,
1309 |   true,
1310 |   false,
1311 |   true,
1312 |   true,
1313 |   false,
1314 |   true,
1315 |   false,
1316 |   false,
1317 |   true,
1318 |   false,
1319 |   true,
1320 |   true,
1321 |   false,
1322 |   true,
1323 |   false,
1324 |   false,
1325 |   true,
1326 |   false,
1327 |   true,
1328 |   false,
1329 |   false,
1330 |   false,
1331 |   false,
1332 |   false,
1333 |   false,
1334 |   false,
1335 |   true,
1336 |   true,
1337 |   false,
1338 |   false,
1339 |   false,
1340 |   false,
1341 |   true,
1342 |   false,
1343 |   true,
1344 |   true,
1345 |   true,
1346 |   false,
1347 |   false,
1348 |   false,
1349 |   true,
1350 |   true,
1351 |   false,
1352 |   false,
1353 |   false,
1354 |   false,
1355 |   true,
1356 |   true,
1357 |   true,
1358 |   false,
1359 |   false,
1360 |   true,
1361 |   false,
1362 |   false,
1363 |   false,
1364 |   true,
1365 |   false,
1366 |   false,
1367 |   true,
1368 |   false,
1369 |   true,
1370 |   true,
1371 |   true,
1372 |   false,
1373 |   false,
1374 |   false,
1375 |   false,
1376 |   true,
1377 |   false,
1378 |   false,
1379 |   true,
1380 |   false,
1381 |   true,
1382 |   false,
1383 |   true,
1384 |   false,
1385 |   false,
1386 |   false,
1387 |   false,
1388 |   false,
1389 |   false,
1390 |   false,
1391 |   false,
1392 |   true,
1393 |   true,
1394 |   false,
1395 |   true,
1396 |   true,
1397 |   false,
1398 |   false,
1399 |   false,
1400 |   false,
1401 |   true,
1402 |   true,
1403 |   false,
1404 |   true,
1405 |   true,
1406 |   true,
1407 |   false,
1408 |   true,
1409 |   false,
1410 |   true,
1411 |   true,
1412 |   false,
1413 |   false,
1414 |   true,
1415 |   true,
1416 |   true,
1417 |   true,
1418 |   false,
1419 |   true,
1420 |   false,
1421 |   true,
1422 |   false,
1423 |   true,
1424 |   true,
1425 |   true,
1426 |   false,
1427 |   false,
1428 |   false,
1429 |   true,
1430 |   false,
1431 |   false,
1432 |   false,
1433 |   true,
1434 |   false,
1435 |   true,
1436 |   true,
1437 |   false,
1438 |   true,
1439 |   true,
1440 |   true,
1441 |   true,
1442 |   false,
1443 |   true,
1444 |   false,
1445 |   true,
1446 |   false,
1447 |   true,
1448 |   false,
1449 |   false,
1450 |   false,
1451 |   false,
1452 |   true,
1453 |   false,
1454 |   false,
1455 |   true,
1456 |   false,
1457 |   true,
1458 |   false,
1459 |   false,
1460 |   true,
1461 |   false,
1462 |   false,
1463 |   true,
1464 |   false,
1465 |   true,
1466 |   false,
1467 |   false,
1468 |   false,
1469 |   false,
1470 |   true,
1471 |   true,
1472 |   false,
1473 |   false,
1474 |   false,
1475 |   false,
1476 |   true,
1477 |   false,
1478 |   true,
1479 |   false,
1480 |   false,
1481 |   false,
1482 |   true,
1483 |   true,
1484 |   false,
1485 |   true,
1486 |   false,
1487 |   true,
1488 |   false,
1489 |   true,
1490 |   false,
1491 |   true,
1492 |   true,
1493 |   false,
1494 |   true,
1495 |   true,
1496 |   false,
1497 |   false,
1498 |   true,
1499 |   true,
1500 |   false,
1501 |   false,
1502 |   true,
1503 |   false,
1504 |   false,
1505 |   true,
1506 |   true,
1507 |   true,
1508 |   false,
1509 |   true,
1510 |   true,
1511 |   false,
1512 |   true,
1513 |   false,
1514 |   false,
1515 |   true,
1516 |   false,
1517 |   true,
1518 |   true,
1519 |   false,
1520 |   true,
1521 |   true,
1522 |   true,
1523 |   false,
1524 |   true,
1525 |   false,
1526 |   true,
1527 |   false,
1528 |   false,
1529 |   false,
1530 |   false,
1531 |   false,
1532 |   true,
1533 |   false,
1534 |   false,
1535 |   false,
1536 |   false,
1537 |   true,
1538 |   true,
1539 |   true,
1540 |   true,
1541 |   false,
1542 |   false,
1543 |   true,
1544 |   true,
1545 |   true,
1546 |   true,
1547 |   false,
1548 |   true,
1549 |   false,
1550 |   true,
1551 |   true,
1552 |   true,
1553 |   false,
1554 |   true,
1555 |   true,
1556 |   false,
1557 |   false,
1558 |   false,
1559 |   false,
1560 |   false,
1561 |   false,
1562 |   false,
1563 |   false,
1564 |   false,
1565 |   false,
1566 |   false,
1567 |   true,
1568 |   true,
1569 |   false,
1570 |   true,
1571 |   false,
1572 |   false,
1573 |   false,
1574 |   true,
1575 |   false,
1576 |   true,
1577 |   false,
1578 |   true,
1579 |   false,
1580 |   false,
1581 |   false,
1582 |   true,
1583 |   true,
1584 |   false,
1585 |   true,
1586 |   true,
1587 |   true,
1588 |   false,
1589 |   true,
1590 |   true,
1591 |   false,
1592 |   false,
1593 |   false,
1594 |   false,
1595 |   false,
1596 |   false,
1597 |   false,
1598 |   false,
1599 |   false,
1600 |   false,
1601 |   false,
1602 |   true,
1603 |   true,
1604 |   true,
1605 |   false,
1606 |   true,
1607 |   false,
1608 |   false,
1609 |   true,
1610 |   true,
1611 |   false,
1612 |   false,
1613 |   false,
1614 |   false,
1615 |   true,
1616 |   false,
1617 |   false,
1618 |   true,
1619 |   false,
1620 |   false,
1621 |   true,
1622 |   true,
1623 |   true,
1624 |   false,
1625 |   false,
1626 |   true,
1627 |   true,
1628 |   true,
1629 |   true,
1630 |   false,
1631 |   true,
1632 |   true,
1633 |   false,
1634 |   true,
1635 |   true,
1636 |   true,
1637 |   true,
1638 |   false,
1639 |   true,
1640 |   false,
1641 |   true,
1642 |   true,
1643 |   true,
1644 |   false,
1645 |   false,
1646 |   false,
1647 |   true,
1648 |   true,
1649 |   false,
1650 |   false,
1651 |   false,
1652 |   false,
1653 |   false,
1654 |   true,
1655 |   true,
1656 |   true,
1657 |   true,
1658 |   true,
1659 |   false,
1660 |   true,
1661 |   false,
1662 |   true,
1663 |   true,
1664 |   true,
1665 |   true,
1666 |   false,
1667 |   false,
1668 |   true,
1669 |   true,
1670 |   true,
1671 |   true,
1672 |   true,
1673 |   true,
1674 |   true,
1675 |   true,
1676 |   false,
1677 |   true,
1678 |   true,
1679 |   false,
1680 |   false,
1681 |   true,
1682 |   true,
1683 |   true,
1684 |   true,
1685 |   false,
1686 |   false,
1687 |   true,
1688 |   true,
1689 |   true,
1690 |   true,
1691 |   false,
1692 |   false,
1693 |   true,
1694 |   false,
1695 |   true,
1696 |   true,
1697 |   true,
1698 |   false,
1699 |   true,
1700 |   true,
1701 |   false,
1702 |   false,
1703 |   true,
1704 |   true,
1705 |   true,
1706 |   false,
1707 |   false,
1708 |   false,
1709 |   true,
1710 |   false,
1711 |   false,
1712 |   false,
1713 |   false,
1714 |   false,
1715 |   false,
1716 |   false,
1717 |   true,
1718 |   false,
1719 |   true,
1720 |   true,
1721 |   false,
1722 |   true,
1723 |   false,
1724 |   true,
1725 |   false,
1726 |   true,
1727 |   false,
1728 |   true,
1729 |   false,
1730 |   false,
1731 |   false,
1732 |   false,
1733 |   true,
1734 |   false,
1735 |   false,
1736 |   true,
1737 |   true,
1738 |   true,
1739 |   true,
1740 |   false,
1741 |   true,
1742 |   true,
1743 |   true,
1744 |   false,
1745 |   true,
1746 |   true,
1747 |   true,
1748 |   true,
1749 |   true,
1750 |   true,
1751 |   true,
1752 |   false,
1753 |   true,
1754 |   false,
1755 |   false,
1756 |   false,
1757 |   false,
1758 |   true,
1759 |   false,
1760 |   true,
1761 |   true,
1762 |   true,
1763 |   false,
1764 |   false,
1765 |   true,
1766 |   false,
1767 |   false,
1768 |   false,
1769 |   true,
1770 |   true,
1771 |   true,
1772 |   false,
1773 |   false,
1774 |   true,
1775 |   true,
1776 |   false,
1777 |   false,
1778 |   false,
1779 |   false,
1780 |   false,
1781 |   false,
1782 |   true,
1783 |   true,
1784 |   false,
1785 |   true,
1786 |   true,
1787 |   false,
1788 |   true,
1789 |   true,
1790 |   false,
1791 |   false,
1792 |   false,
1793 |   true,
1794 |   false,
1795 |   false,
1796 |   true,
1797 |   false,
1798 |   false,
1799 |   false,
1800 |   true,
1801 |   true,
1802 |   false,
1803 |   false,
1804 |   false,
1805 |   true,
1806 |   false,
1807 |   true,
1808 |   true,
1809 |   true,
1810 |   true,
1811 |   true,
1812 |   false,
1813 |   false,
1814 |   false,
1815 |   false,
1816 |   false,
1817 |   false,
1818 |   true,
1819 |   true,
1820 |   false,
1821 |   true,
1822 |   true,
1823 |   true,
1824 |   false,
1825 |   false,
1826 |   true,
1827 |   false,
1828 |   true,
1829 |   false,
1830 |   true,
1831 |   false,
1832 |   false,
1833 |   true,
1834 |   false,
1835 |   false,
1836 |   true,
1837 |   true,
1838 |   true,
1839 |   true,
1840 |   false,
1841 |   false,
1842 |   true,
1843 |   true,
1844 |   true,
1845 |   false,
1846 |   true,
1847 |   true,
1848 |   true,
1849 |   false,
1850 |   false,
1851 |   true,
1852 |   false,
1853 |   true,
1854 |   true,
1855 |   false,
1856 |   true,
1857 |   false,
1858 |   true,
1859 |   false,
1860 |   false,
1861 |   false,
1862 |   true,
1863 |   true,
1864 |   false,
1865 |   true,
1866 |   true,
1867 |   false,
1868 |   true,
1869 |   false,
1870 |   true,
1871 |   true,
1872 |   true,
1873 |   true,
1874 |   false,
1875 |   false,
1876 |   false,
1877 |   false,
1878 |   true,
1879 |   true,
1880 |   true,
1881 |   false,
1882 |   false,
1883 |   false,
1884 |   true,
1885 |   false,
1886 |   true,
1887 |   false,
1888 |   true,
1889 |   true,
1890 |   true,
1891 |   false,
1892 |   false,
1893 |   false,
1894 |   false,
1895 |   false,
1896 |   false,
1897 |   true,
1898 |   true,
1899 |   false,
1900 |   false,
1901 |   false,
1902 |   true,
1903 |   true,
1904 |   true,
1905 |   false,
1906 |   true,
1907 |   false,
1908 |   true,
1909 |   true,
1910 |   true,
1911 |   true,
1912 |   false,
1913 |   false,
1914 |   false,
1915 |   false,
1916 |   false,
1917 |   false,
1918 |   true,
1919 |   true,
1920 |   true,
1921 |   true,
1922 |   true,
1923 |   true,
1924 |   true,
1925 |   false,
1926 |   false,
1927 |   false,
1928 |   true,
1929 |   true,
1930 |   false,
1931 |   false,
1932 |   true,
1933 |   true,
1934 |   false,
1935 |   false,
1936 |   false,
1937 |   false,
1938 |   true,
1939 |   true,
1940 |   true,
1941 |   false,
1942 |   false,
1943 |   false,
1944 |   true,
1945 |   false,
1946 |   true,
1947 |   false,
1948 |   true,
1949 |   true,
1950 |   true,
1951 |   false,
1952 |   true,
1953 |   false,
1954 |   true,
1955 |   false,
1956 |   true,
1957 |   true,
1958 |   false,
1959 |   true,
1960 |   true,
1961 |   true,
1962 |   true,
1963 |   false,
1964 |   false,
1965 |   false,
1966 |   true,
1967 |   false,
1968 |   true,
1969 |   false,
1970 |   true,
1971 |   false,
1972 |   false,
1973 |   false,
1974 |   false,
1975 |   false,
1976 |   false,
1977 |   false,
1978 |   false,
1979 |   false,
1980 |   true,
1981 |   false,
1982 |   false,
1983 |   false,
1984 |   true,
1985 |   true,
1986 |   true,
1987 |   true,
1988 |   true,
1989 |   false,
1990 |   true,
1991 |   true,
1992 |   true,
1993 |   true,
1994 |   true,
1995 |   true,
1996 |   true,
1997 |   true,
1998 |   false,
1999 |   false,
2000 |   false,
2001 |   true,
2002 |   true,
2003 |   true,
2004 |   true,
2005 |   false,
2006 |   false,
2007 |   false,
2008 |   false,
2009 |   true,
2010 |   true,
2011 |   false,
2012 |   true,
2013 |   false,
2014 |   true,
2015 |   true,
2016 |   false,
2017 |   true,
2018 |   false,
2019 |   true,
2020 |   false,
2021 |   false,
2022 |   true,
2023 |   true,
2024 |   false,
2025 |   false,
2026 |   true,
2027 |   true,
2028 |   true,
2029 |   true,
2030 |   true,
2031 |   false,
2032 |   false,
2033 |   true,
2034 |   true,
2035 |   true,
2036 |   true,
2037 |   true,
2038 |   false,
2039 |   true,
2040 |   true,
2041 |   true,
2042 |   false,
2043 |   true,
2044 |   true,
2045 |   true,
2046 |   false,
2047 |   false,
2048 |   true,
2049 |   false
2050 | ]
2051 | 


--------------------------------------------------------------------------------
/test/performance-json/vector-of-chars.json:
--------------------------------------------------------------------------------
   1 | [
   2 |   "i",
   3 |   "!",
   4 |   "$",
   5 |   "\f",
   6 |   "Q",
   7 |   "g",
   8 |   "N",
   9 |   "Y",
  10 |   "S",
  11 |   "L",
  12 |   "m",
  13 |   "Y",
  14 |   "T",
  15 |   "0",
  16 |   "j",
  17 |   ";",
  18 |   "6",
  19 |   "A",
  20 |   "z",
  21 |   "&",
  22 |   "k",
  23 |   "^",
  24 |   "=",
  25 |   "v",
  26 |   "k",
  27 |   "@",
  28 |   "U",
  29 |   "W",
  30 |   "x",
  31 |   "X",
  32 |   "l",
  33 |   "Y",
  34 |   "5",
  35 |   "\t",
  36 |   "4",
  37 |   "t",
  38 |   "n",
  39 |   ":",
  40 |   "C",
  41 |   "2",
  42 |   "Q",
  43 |   "i",
  44 |   "$",
  45 |   "j",
  46 |   "q",
  47 |   "|",
  48 |   ")",
  49 |   "$",
  50 |   "f",
  51 |   "\f",
  52 |   "s",
  53 |   "A",
  54 |   "\"",
  55 |   "J",
  56 |   "F",
  57 |   "f",
  58 |   "D",
  59 |   "0",
  60 |   "M",
  61 |   "G",
  62 |   "\"",
  63 |   "r",
  64 |   "'",
  65 |   "K",
  66 |   "A",
  67 |   "[",
  68 |   ">",
  69 |   "n",
  70 |   "i",
  71 |   "'",
  72 |   "d",
  73 |   "!",
  74 |   "s",
  75 |   "]",
  76 |   "j",
  77 |   "=",
  78 |   "\"",
  79 |   "M",
  80 |   "J",
  81 |   "z",
  82 |   "L",
  83 |   "\f",
  84 |   "2",
  85 |   "F",
  86 |   "f",
  87 |   "m",
  88 |   "/",
  89 |   "D",
  90 |   "'",
  91 |   "r",
  92 |   "N",
  93 |   "b",
  94 |   "{",
  95 |   "Y",
  96 |   "F",
  97 |   "_",
  98 |   "g",
  99 |   "3",
 100 |   "b",
 101 |   ">",
 102 |   "x",
 103 |   "|",
 104 |   "%",
 105 |   "F",
 106 |   "<",
 107 |   "D",
 108 |   "N",
 109 |   "Y",
 110 |   "^",
 111 |   "&",
 112 |   "J",
 113 |   "Y",
 114 |   "(",
 115 |   "i",
 116 |   ",",
 117 |   "j",
 118 |   "/",
 119 |   "R",
 120 |   "_",
 121 |   "B",
 122 |   "\r",
 123 |   "h",
 124 |   "^",
 125 |   "N",
 126 |   "A",
 127 |   "D",
 128 |   "q",
 129 |   "=",
 130 |   "L",
 131 |   "v",
 132 |   "(",
 133 |   "8",
 134 |   "P",
 135 |   "K",
 136 |   "v",
 137 |   "Y",
 138 |   "(",
 139 |   "u",
 140 |   "T",
 141 |   "<",
 142 |   "6",
 143 |   "<",
 144 |   "z",
 145 |   ".",
 146 |   "-",
 147 |   "T",
 148 |   "o",
 149 |   "V",
 150 |   "\n",
 151 |   "$",
 152 |   "6",
 153 |   "m",
 154 |   "l",
 155 |   "Y",
 156 |   ";",
 157 |   "O",
 158 |   "c",
 159 |   "f",
 160 |   "6",
 161 |   "q",
 162 |   "\r",
 163 |   "z",
 164 |   "0",
 165 |   "^",
 166 |   "N",
 167 |   "o",
 168 |   "X",
 169 |   "u",
 170 |   ":",
 171 |   "U",
 172 |   "=",
 173 |   "K",
 174 |   "d",
 175 |   "%",
 176 |   "Y",
 177 |   "H",
 178 |   "Q",
 179 |   "\"",
 180 |   "V",
 181 |   ".",
 182 |   "1",
 183 |   "7",
 184 |   "%",
 185 |   "6",
 186 |   "D",
 187 |   "5",
 188 |   "R",
 189 |   "t",
 190 |   "5",
 191 |   "5",
 192 |   "~",
 193 |   ">",
 194 |   "s",
 195 |   "@",
 196 |   "]",
 197 |   "X",
 198 |   "~",
 199 |   "x",
 200 |   "c",
 201 |   "<",
 202 |   "\"",
 203 |   "i",
 204 |   "8",
 205 |   "o",
 206 |   ">",
 207 |   "M",
 208 |   "^",
 209 |   "]",
 210 |   "'",
 211 |   "s",
 212 |   "9",
 213 |   "6",
 214 |   "x",
 215 |   "3",
 216 |   "d",
 217 |   "x",
 218 |   ":",
 219 |   "=",
 220 |   "]",
 221 |   "M",
 222 |   ":",
 223 |   "(",
 224 |   "l",
 225 |   ":",
 226 |   "&",
 227 |   "S",
 228 |   "o",
 229 |   "r",
 230 |   "z",
 231 |   "z",
 232 |   "R",
 233 |   "N",
 234 |   "G",
 235 |   "b",
 236 |   "L",
 237 |   "h",
 238 |   "\t",
 239 |   "y",
 240 |   "R",
 241 |   ".",
 242 |   "X",
 243 |   "x",
 244 |   "Z",
 245 |   "[",
 246 |   "g",
 247 |   ",",
 248 |   "3",
 249 |   "K",
 250 |   "\n",
 251 |   "[",
 252 |   "O",
 253 |   "f",
 254 |   "L",
 255 |   "$",
 256 |   "`",
 257 |   "\n",
 258 |   "p",
 259 |   "s",
 260 |   "R",
 261 |   "/",
 262 |   "v",
 263 |   "$",
 264 |   "i",
 265 |   "J",
 266 |   "S",
 267 |   "W",
 268 |   " ",
 269 |   "'",
 270 |   "4",
 271 |   "Q",
 272 |   "h",
 273 |   ":",
 274 |   "<",
 275 |   "f",
 276 |   "T",
 277 |   "1",
 278 |   "h",
 279 |   "8",
 280 |   "&",
 281 |   "W",
 282 |   "5",
 283 |   "h",
 284 |   "=",
 285 |   "l",
 286 |   "-",
 287 |   "3",
 288 |   "L",
 289 |   "b",
 290 |   ":",
 291 |   "_",
 292 |   "z",
 293 |   "&",
 294 |   "l",
 295 |   "\r",
 296 |   "v",
 297 |   "#",
 298 |   "J",
 299 |   "G",
 300 |   "T",
 301 |   ":",
 302 |   "%",
 303 |   ")",
 304 |   "D",
 305 |   "h",
 306 |   "Q",
 307 |   "H",
 308 |   "b",
 309 |   "l",
 310 |   ";",
 311 |   "o",
 312 |   ",",
 313 |   "T",
 314 |   "H",
 315 |   "b",
 316 |   " ",
 317 |   "G",
 318 |   "|",
 319 |   "\\",
 320 |   "n",
 321 |   "2",
 322 |   "u",
 323 |   "h",
 324 |   "?",
 325 |   " ",
 326 |   "j",
 327 |   "g",
 328 |   "Q",
 329 |   "m",
 330 |   ";",
 331 |   "5",
 332 |   "]",
 333 |   "\f",
 334 |   ".",
 335 |   "|",
 336 |   "I",
 337 |   "~",
 338 |   "?",
 339 |   "`",
 340 |   "x",
 341 |   "]",
 342 |   "e",
 343 |   "b",
 344 |   "q",
 345 |   ")",
 346 |   "N",
 347 |   "6",
 348 |   "3",
 349 |   "T",
 350 |   "_",
 351 |   "K",
 352 |   "<",
 353 |   "4",
 354 |   "a",
 355 |   "3",
 356 |   "P",
 357 |   "Y",
 358 |   "V",
 359 |   "?",
 360 |   "G",
 361 |   "}",
 362 |   "6",
 363 |   "g",
 364 |   "U",
 365 |   "8",
 366 |   "F",
 367 |   "G",
 368 |   ";",
 369 |   "G",
 370 |   "=",
 371 |   "%",
 372 |   "(",
 373 |   "Z",
 374 |   "\\",
 375 |   "E",
 376 |   "W",
 377 |   "\"",
 378 |   "A",
 379 |   "e",
 380 |   "P",
 381 |   "y",
 382 |   "Y",
 383 |   "F",
 384 |   "B",
 385 |   "*",
 386 |   "\n",
 387 |   "|",
 388 |   "c",
 389 |   "@",
 390 |   "A",
 391 |   ")",
 392 |   "K",
 393 |   "P",
 394 |   "=",
 395 |   "j",
 396 |   "?",
 397 |   "^",
 398 |   "G",
 399 |   "4",
 400 |   "j",
 401 |   "y",
 402 |   ":",
 403 |   "]",
 404 |   "1",
 405 |   "]",
 406 |   "U",
 407 |   ">",
 408 |   "L",
 409 |   "M",
 410 |   "5",
 411 |   "(",
 412 |   "X",
 413 |   "h",
 414 |   "\"",
 415 |   "!",
 416 |   "U",
 417 |   "$",
 418 |   "6",
 419 |   "_",
 420 |   "h",
 421 |   "9",
 422 |   "n",
 423 |   "\t",
 424 |   "U",
 425 |   "X",
 426 |   "W",
 427 |   "1",
 428 |   "&",
 429 |   "k",
 430 |   "m",
 431 |   "[",
 432 |   "[",
 433 |   "?",
 434 |   ";",
 435 |   "\f",
 436 |   "t",
 437 |   "\r",
 438 |   "A",
 439 |   "L",
 440 |   "Z",
 441 |   "C",
 442 |   "S",
 443 |   "i",
 444 |   " ",
 445 |   ")",
 446 |   "1",
 447 |   "3",
 448 |   "@",
 449 |   "|",
 450 |   "u",
 451 |   "|",
 452 |   "_",
 453 |   "B",
 454 |   " ",
 455 |   "v",
 456 |   "`",
 457 |   "7",
 458 |   "P",
 459 |   "{",
 460 |   "\f",
 461 |   "Z",
 462 |   "=",
 463 |   "T",
 464 |   "$",
 465 |   "*",
 466 |   ")",
 467 |   "*",
 468 |   "(",
 469 |   "y",
 470 |   "[",
 471 |   "B",
 472 |   "1",
 473 |   "u",
 474 |   ";",
 475 |   "L",
 476 |   "3",
 477 |   "-",
 478 |   "o",
 479 |   "i",
 480 |   "\n",
 481 |   "1",
 482 |   ";",
 483 |   "F",
 484 |   "K",
 485 |   "H",
 486 |   "6",
 487 |   "H",
 488 |   "V",
 489 |   "w",
 490 |   "X",
 491 |   ".",
 492 |   "C",
 493 |   "t",
 494 |   "c",
 495 |   "*",
 496 |   "b",
 497 |   "k",
 498 |   "p",
 499 |   "d",
 500 |   "F",
 501 |   ">",
 502 |   "J",
 503 |   "w",
 504 |   "n",
 505 |   "E",
 506 |   "v",
 507 |   "4",
 508 |   "{",
 509 |   "3",
 510 |   "o",
 511 |   "J",
 512 |   "&",
 513 |   "R",
 514 |   "X",
 515 |   "w",
 516 |   "\r",
 517 |   "\n",
 518 |   "Y",
 519 |   "M",
 520 |   "]",
 521 |   "g",
 522 |   "6",
 523 |   "\n",
 524 |   "C",
 525 |   "U",
 526 |   "!",
 527 |   "5",
 528 |   "]",
 529 |   "q",
 530 |   "e",
 531 |   "t",
 532 |   "Q",
 533 |   "a",
 534 |   "Y",
 535 |   "P",
 536 |   "G",
 537 |   "p",
 538 |   "8",
 539 |   "U",
 540 |   "<",
 541 |   ",",
 542 |   "C",
 543 |   "o",
 544 |   "F",
 545 |   "m",
 546 |   "\f",
 547 |   "T",
 548 |   "\n",
 549 |   "E",
 550 |   "g",
 551 |   "h",
 552 |   "&",
 553 |   "J",
 554 |   "U",
 555 |   "9",
 556 |   "X",
 557 |   "u",
 558 |   "1",
 559 |   "o",
 560 |   "\r",
 561 |   "\f",
 562 |   ";",
 563 |   "(",
 564 |   "z",
 565 |   "I",
 566 |   "i",
 567 |   "n",
 568 |   "4",
 569 |   "L",
 570 |   "x",
 571 |   "?",
 572 |   "(",
 573 |   "U",
 574 |   "m",
 575 |   "h",
 576 |   "Z",
 577 |   "2",
 578 |   "r",
 579 |   "v",
 580 |   "f",
 581 |   "3",
 582 |   "s",
 583 |   "U",
 584 |   "S",
 585 |   "+",
 586 |   "=",
 587 |   "D",
 588 |   ",",
 589 |   ":",
 590 |   "~",
 591 |   "}",
 592 |   ":",
 593 |   "Q",
 594 |   "L",
 595 |   "{",
 596 |   "E",
 597 |   "_",
 598 |   "W",
 599 |   "s",
 600 |   "p",
 601 |   "\"",
 602 |   "5",
 603 |   "T",
 604 |   "\\",
 605 |   "~",
 606 |   "z",
 607 |   "\f",
 608 |   "-",
 609 |   "G",
 610 |   "-",
 611 |   "5",
 612 |   "2",
 613 |   "K",
 614 |   "t",
 615 |   "[",
 616 |   "Y",
 617 |   "J",
 618 |   ">",
 619 |   "-",
 620 |   "l",
 621 |   ">",
 622 |   ">",
 623 |   ",",
 624 |   "t",
 625 |   "&",
 626 |   "A",
 627 |   "[",
 628 |   "(",
 629 |   "^",
 630 |   "f",
 631 |   "P",
 632 |   "~",
 633 |   " ",
 634 |   "#",
 635 |   "w",
 636 |   "h",
 637 |   "@",
 638 |   "W",
 639 |   "~",
 640 |   "|",
 641 |   "y",
 642 |   "r",
 643 |   "~",
 644 |   "2",
 645 |   "x",
 646 |   "5",
 647 |   "j",
 648 |   "@",
 649 |   "N",
 650 |   "G",
 651 |   "$",
 652 |   "1",
 653 |   "F",
 654 |   "K",
 655 |   "4",
 656 |   "b",
 657 |   "N",
 658 |   "N",
 659 |   "o",
 660 |   "N",
 661 |   "N",
 662 |   "(",
 663 |   "g",
 664 |   "t",
 665 |   "s",
 666 |   "|",
 667 |   "G",
 668 |   "X",
 669 |   "_",
 670 |   "c",
 671 |   "7",
 672 |   ";",
 673 |   "W",
 674 |   "S",
 675 |   "n",
 676 |   "\\",
 677 |   "=",
 678 |   "P",
 679 |   "h",
 680 |   "V",
 681 |   "4",
 682 |   "z",
 683 |   "\f",
 684 |   "8",
 685 |   "=",
 686 |   "l",
 687 |   "D",
 688 |   "r",
 689 |   "|",
 690 |   "a",
 691 |   "s",
 692 |   "_",
 693 |   "f",
 694 |   "l",
 695 |   "E",
 696 |   "L",
 697 |   "p",
 698 |   "3",
 699 |   "8",
 700 |   "F",
 701 |   "?",
 702 |   "e",
 703 |   "I",
 704 |   "c",
 705 |   ">",
 706 |   "X",
 707 |   "O",
 708 |   "k",
 709 |   "r",
 710 |   "t",
 711 |   "~",
 712 |   "9",
 713 |   "A",
 714 |   "\n",
 715 |   "7",
 716 |   "5",
 717 |   "!",
 718 |   "i",
 719 |   "!",
 720 |   "Z",
 721 |   "9",
 722 |   ",",
 723 |   "W",
 724 |   "~",
 725 |   "'",
 726 |   "/",
 727 |   ".",
 728 |   "(",
 729 |   "B",
 730 |   "a",
 731 |   "[",
 732 |   "'",
 733 |   "t",
 734 |   "j",
 735 |   "!",
 736 |   "9",
 737 |   "^",
 738 |   "~",
 739 |   "_",
 740 |   "`",
 741 |   "(",
 742 |   "-",
 743 |   "*",
 744 |   ">",
 745 |   " ",
 746 |   "f",
 747 |   "W",
 748 |   "f",
 749 |   "7",
 750 |   "]",
 751 |   "p",
 752 |   "J",
 753 |   "h",
 754 |   "3",
 755 |   "e",
 756 |   "{",
 757 |   "%",
 758 |   "\"",
 759 |   "0",
 760 |   "F",
 761 |   "0",
 762 |   "Z",
 763 |   "\"",
 764 |   "V",
 765 |   "M",
 766 |   "+",
 767 |   "=",
 768 |   "I",
 769 |   "'",
 770 |   "?",
 771 |   "-",
 772 |   "V",
 773 |   "R",
 774 |   "m",
 775 |   "p",
 776 |   "%",
 777 |   "?",
 778 |   "`",
 779 |   "R",
 780 |   "8",
 781 |   "^",
 782 |   "4",
 783 |   "3",
 784 |   "b",
 785 |   "9",
 786 |   "q",
 787 |   "V",
 788 |   "M",
 789 |   "e",
 790 |   "N",
 791 |   "D",
 792 |   "G",
 793 |   "!",
 794 |   "&",
 795 |   "^",
 796 |   "z",
 797 |   "V",
 798 |   "J",
 799 |   "O",
 800 |   "M",
 801 |   "5",
 802 |   "L",
 803 |   "H",
 804 |   "+",
 805 |   ";",
 806 |   "_",
 807 |   "e",
 808 |   "X",
 809 |   "J",
 810 |   "W",
 811 |   "C",
 812 |   "L",
 813 |   "X",
 814 |   "3",
 815 |   "[",
 816 |   "a",
 817 |   "-",
 818 |   "3",
 819 |   "U",
 820 |   "t",
 821 |   "S",
 822 |   "v",
 823 |   "\\",
 824 |   "6",
 825 |   "J",
 826 |   "u",
 827 |   "D",
 828 |   "_",
 829 |   "I",
 830 |   "t",
 831 |   "E",
 832 |   "t",
 833 |   "V",
 834 |   "D",
 835 |   ",",
 836 |   "X",
 837 |   "7",
 838 |   "@",
 839 |   "l",
 840 |   "t",
 841 |   "I",
 842 |   "Q",
 843 |   "=",
 844 |   "z",
 845 |   "R",
 846 |   "+",
 847 |   "O",
 848 |   "9",
 849 |   "U",
 850 |   "N",
 851 |   "%",
 852 |   "m",
 853 |   "Z",
 854 |   "Z",
 855 |   "h",
 856 |   "e",
 857 |   "`",
 858 |   "|",
 859 |   " ",
 860 |   ",",
 861 |   "0",
 862 |   "0",
 863 |   "m",
 864 |   "$",
 865 |   "/",
 866 |   "X",
 867 |   "g",
 868 |   "<",
 869 |   "w",
 870 |   "a",
 871 |   "h",
 872 |   "=",
 873 |   "R",
 874 |   "y",
 875 |   "q",
 876 |   ";",
 877 |   "G",
 878 |   "H",
 879 |   "v",
 880 |   "`",
 881 |   "P",
 882 |   "W",
 883 |   "c",
 884 |   "X",
 885 |   "z",
 886 |   "Z",
 887 |   "6",
 888 |   "v",
 889 |   "u",
 890 |   "*",
 891 |   "i",
 892 |   "\\",
 893 |   "V",
 894 |   "{",
 895 |   "a",
 896 |   "W",
 897 |   "S",
 898 |   "}",
 899 |   "d",
 900 |   "\r",
 901 |   ";",
 902 |   "(",
 903 |   "b",
 904 |   "p",
 905 |   "q",
 906 |   "w",
 907 |   "%",
 908 |   "W",
 909 |   "T",
 910 |   "\f",
 911 |   "\\",
 912 |   "T",
 913 |   "Z",
 914 |   "@",
 915 |   "-",
 916 |   "-",
 917 |   "\"",
 918 |   "f",
 919 |   "b",
 920 |   "W",
 921 |   "s",
 922 |   "!",
 923 |   "9",
 924 |   "z",
 925 |   "^",
 926 |   "Z",
 927 |   "*",
 928 |   "f",
 929 |   "i",
 930 |   "P",
 931 |   "z",
 932 |   "}",
 933 |   "z",
 934 |   "k",
 935 |   "{",
 936 |   "*",
 937 |   "4",
 938 |   ">",
 939 |   "O",
 940 |   "=",
 941 |   "Z",
 942 |   "c",
 943 |   "8",
 944 |   "'",
 945 |   ">",
 946 |   "G",
 947 |   "%",
 948 |   "\f",
 949 |   "b",
 950 |   "R",
 951 |   "(",
 952 |   ":",
 953 |   "n",
 954 |   "Q",
 955 |   "~",
 956 |   "i",
 957 |   "P",
 958 |   "\t",
 959 |   "K",
 960 |   "x",
 961 |   "l",
 962 |   "/",
 963 |   "u",
 964 |   "h",
 965 |   "j",
 966 |   "8",
 967 |   "N",
 968 |   "p",
 969 |   "4",
 970 |   "^",
 971 |   "c",
 972 |   ":",
 973 |   "q",
 974 |   "\f",
 975 |   "]",
 976 |   "v",
 977 |   "o",
 978 |   ";",
 979 |   "@",
 980 |   "H",
 981 |   "n",
 982 |   "9",
 983 |   "R",
 984 |   "1",
 985 |   "A",
 986 |   "0",
 987 |   "^",
 988 |   "=",
 989 |   "c",
 990 |   "6",
 991 |   "Z",
 992 |   "k",
 993 |   ":",
 994 |   "1",
 995 |   "$",
 996 |   "j",
 997 |   "g",
 998 |   "G",
 999 |   "Y",
1000 |   "|",
1001 |   "l",
1002 |   "]",
1003 |   "~",
1004 |   "*",
1005 |   "g",
1006 |   "m",
1007 |   "-",
1008 |   "u",
1009 |   "L",
1010 |   "*",
1011 |   "N",
1012 |   "Y",
1013 |   "5",
1014 |   "_",
1015 |   "_",
1016 |   "L",
1017 |   "F",
1018 |   "|",
1019 |   "\"",
1020 |   "x",
1021 |   ";",
1022 |   "1",
1023 |   "n",
1024 |   "A",
1025 |   "w",
1026 |   "t",
1027 |   "S",
1028 |   "[",
1029 |   "k",
1030 |   "H",
1031 |   "\"",
1032 |   "$",
1033 |   "#",
1034 |   "f",
1035 |   "%",
1036 |   "3",
1037 |   "|",
1038 |   "m",
1039 |   "/",
1040 |   "!",
1041 |   "@",
1042 |   "}",
1043 |   "'",
1044 |   "h",
1045 |   "j",
1046 |   "M",
1047 |   "&",
1048 |   "e",
1049 |   "C",
1050 |   ".",
1051 |   "W",
1052 |   "&",
1053 |   "4",
1054 |   "{",
1055 |   "h",
1056 |   "{",
1057 |   "h",
1058 |   "8",
1059 |   " ",
1060 |   "v",
1061 |   "e",
1062 |   "I",
1063 |   "D",
1064 |   "z",
1065 |   ")",
1066 |   "T",
1067 |   "J",
1068 |   "R",
1069 |   "+",
1070 |   "J",
1071 |   "y",
1072 |   "|",
1073 |   "\\",
1074 |   "c",
1075 |   "c",
1076 |   "$",
1077 |   "G",
1078 |   "4",
1079 |   "#",
1080 |   "[",
1081 |   "\n",
1082 |   "`",
1083 |   "s",
1084 |   "u",
1085 |   "/",
1086 |   "\"",
1087 |   "-",
1088 |   "Y",
1089 |   "(",
1090 |   "M",
1091 |   "-",
1092 |   "i",
1093 |   "L",
1094 |   "I",
1095 |   "o",
1096 |   ".",
1097 |   "P",
1098 |   "O",
1099 |   "b",
1100 |   "}",
1101 |   "a",
1102 |   "1",
1103 |   "[",
1104 |   "x",
1105 |   "O",
1106 |   "0",
1107 |   "@",
1108 |   "S",
1109 |   "^",
1110 |   "3",
1111 |   "(",
1112 |   "'",
1113 |   "h",
1114 |   "J",
1115 |   "!",
1116 |   "#",
1117 |   "K",
1118 |   "O",
1119 |   "A",
1120 |   "~",
1121 |   "7",
1122 |   "$",
1123 |   ",",
1124 |   "O",
1125 |   "Z",
1126 |   "y",
1127 |   " ",
1128 |   "4",
1129 |   "{",
1130 |   "H",
1131 |   "r",
1132 |   "U",
1133 |   "[",
1134 |   "M",
1135 |   "@",
1136 |   "b",
1137 |   "H",
1138 |   "V",
1139 |   "e",
1140 |   "V",
1141 |   "4",
1142 |   "\f",
1143 |   "<",
1144 |   "a",
1145 |   "\r",
1146 |   "s",
1147 |   "y",
1148 |   "x",
1149 |   "w",
1150 |   "X",
1151 |   "Z",
1152 |   "8",
1153 |   "Y",
1154 |   "h",
1155 |   ")",
1156 |   "s",
1157 |   "`",
1158 |   "Z",
1159 |   "c",
1160 |   "b",
1161 |   ".",
1162 |   "+",
1163 |   "Q",
1164 |   ">",
1165 |   "\"",
1166 |   "Y",
1167 |   "/",
1168 |   "G",
1169 |   "]",
1170 |   "'",
1171 |   "5",
1172 |   "*",
1173 |   ":",
1174 |   "k",
1175 |   "1",
1176 |   "~",
1177 |   "N",
1178 |   "^",
1179 |   "?",
1180 |   "k",
1181 |   "j",
1182 |   "/",
1183 |   "W",
1184 |   "u",
1185 |   ":",
1186 |   "s",
1187 |   "\t",
1188 |   "\"",
1189 |   "|",
1190 |   "6",
1191 |   "a",
1192 |   "8",
1193 |   "#",
1194 |   "f",
1195 |   "F",
1196 |   "A",
1197 |   "w",
1198 |   "z",
1199 |   ".",
1200 |   "1",
1201 |   "[",
1202 |   "h",
1203 |   "g",
1204 |   "H",
1205 |   "A",
1206 |   "}",
1207 |   "v",
1208 |   "y",
1209 |   "z",
1210 |   "P",
1211 |   "%",
1212 |   "1",
1213 |   "^",
1214 |   "l",
1215 |   "$",
1216 |   "\n",
1217 |   "<",
1218 |   "f",
1219 |   "D",
1220 |   "A",
1221 |   "W",
1222 |   "h",
1223 |   "R",
1224 |   "P",
1225 |   "N",
1226 |   "'",
1227 |   "7",
1228 |   "m",
1229 |   "2",
1230 |   "z",
1231 |   "|",
1232 |   "V",
1233 |   "l",
1234 |   "r",
1235 |   "/",
1236 |   "B",
1237 |   "f",
1238 |   "e",
1239 |   "n",
1240 |   "S",
1241 |   "'",
1242 |   "_",
1243 |   "+",
1244 |   "E",
1245 |   "s",
1246 |   "v",
1247 |   ">",
1248 |   "<",
1249 |   "V",
1250 |   "-",
1251 |   "D",
1252 |   ":",
1253 |   "0",
1254 |   "j",
1255 |   "h",
1256 |   "}",
1257 |   "!",
1258 |   "E",
1259 |   "b",
1260 |   "a",
1261 |   "/",
1262 |   "?",
1263 |   "h",
1264 |   "#",
1265 |   "\t",
1266 |   "@",
1267 |   "m",
1268 |   "|",
1269 |   "T",
1270 |   "h",
1271 |   "L",
1272 |   "]",
1273 |   "7",
1274 |   "h",
1275 |   "g",
1276 |   "K",
1277 |   "&",
1278 |   "(",
1279 |   ";",
1280 |   "\f",
1281 |   "g",
1282 |   "k",
1283 |   "1",
1284 |   "x",
1285 |   "7",
1286 |   "<",
1287 |   "m",
1288 |   "b",
1289 |   "@",
1290 |   "L",
1291 |   "W",
1292 |   ">",
1293 |   "-",
1294 |   "&",
1295 |   "f",
1296 |   "z",
1297 |   "&",
1298 |   "\n",
1299 |   "\r",
1300 |   "O",
1301 |   "s",
1302 |   "z",
1303 |   " ",
1304 |   "3",
1305 |   "s",
1306 |   "@",
1307 |   "m",
1308 |   "*",
1309 |   "j",
1310 |   "S",
1311 |   "]",
1312 |   "D",
1313 |   "k",
1314 |   ")",
1315 |   "i",
1316 |   "V",
1317 |   "&",
1318 |   "#",
1319 |   ")",
1320 |   "v",
1321 |   "t",
1322 |   "$",
1323 |   "I",
1324 |   "L",
1325 |   "S",
1326 |   "N",
1327 |   "s",
1328 |   "u",
1329 |   "E",
1330 |   "s",
1331 |   "7",
1332 |   "f",
1333 |   "]",
1334 |   "h",
1335 |   "d",
1336 |   "f",
1337 |   "L",
1338 |   "f",
1339 |   "/",
1340 |   "S",
1341 |   "F",
1342 |   "'",
1343 |   "]",
1344 |   "}",
1345 |   "u",
1346 |   "\f",
1347 |   "S",
1348 |   "7",
1349 |   "b",
1350 |   "Q",
1351 |   "}",
1352 |   " ",
1353 |   "2",
1354 |   "7",
1355 |   "{",
1356 |   "^",
1357 |   ".",
1358 |   "J",
1359 |   "m",
1360 |   "G",
1361 |   "g",
1362 |   "x",
1363 |   ":",
1364 |   ",",
1365 |   "A",
1366 |   ")",
1367 |   ">",
1368 |   "v",
1369 |   "m",
1370 |   "!",
1371 |   "S",
1372 |   "\r",
1373 |   "K",
1374 |   "<",
1375 |   "Z",
1376 |   "%",
1377 |   "s",
1378 |   "b",
1379 |   "s",
1380 |   "k",
1381 |   "$",
1382 |   "2",
1383 |   "R",
1384 |   "$",
1385 |   "$",
1386 |   "]",
1387 |   "W",
1388 |   "E",
1389 |   "4",
1390 |   "$",
1391 |   "&",
1392 |   "i",
1393 |   ")",
1394 |   " ",
1395 |   "q",
1396 |   "1",
1397 |   "v",
1398 |   ".",
1399 |   "s",
1400 |   "m",
1401 |   "W",
1402 |   "G",
1403 |   "D",
1404 |   ".",
1405 |   "&",
1406 |   "5",
1407 |   "h",
1408 |   "V",
1409 |   "x",
1410 |   ";",
1411 |   "?",
1412 |   "'",
1413 |   "R",
1414 |   "-",
1415 |   "8",
1416 |   "s",
1417 |   "P",
1418 |   "\t",
1419 |   "^",
1420 |   "\f",
1421 |   "(",
1422 |   ")",
1423 |   "3",
1424 |   "m",
1425 |   "v",
1426 |   "~",
1427 |   "~",
1428 |   "j",
1429 |   "+",
1430 |   "D",
1431 |   "y",
1432 |   "a",
1433 |   "F",
1434 |   "T",
1435 |   "C",
1436 |   ".",
1437 |   "X",
1438 |   "L",
1439 |   "\n",
1440 |   "D",
1441 |   "4",
1442 |   ",",
1443 |   "j",
1444 |   "u",
1445 |   "N",
1446 |   "(",
1447 |   "R",
1448 |   "'",
1449 |   "k",
1450 |   "O",
1451 |   "\f",
1452 |   "s",
1453 |   "X",
1454 |   "s",
1455 |   "|",
1456 |   "F",
1457 |   ".",
1458 |   "e",
1459 |   "^",
1460 |   "!",
1461 |   "W",
1462 |   "a",
1463 |   "\n",
1464 |   "D",
1465 |   ";",
1466 |   "e",
1467 |   ":",
1468 |   "N",
1469 |   "1",
1470 |   "k",
1471 |   "f",
1472 |   "[",
1473 |   "H",
1474 |   "'",
1475 |   "X",
1476 |   "0",
1477 |   "Q",
1478 |   "\f",
1479 |   "m",
1480 |   "x",
1481 |   "]",
1482 |   "#",
1483 |   "j",
1484 |   "\f",
1485 |   "4",
1486 |   "@",
1487 |   "`",
1488 |   "J",
1489 |   "c",
1490 |   "\\",
1491 |   "|",
1492 |   "(",
1493 |   "\t",
1494 |   "E",
1495 |   "%",
1496 |   "%",
1497 |   "O",
1498 |   "D",
1499 |   "}",
1500 |   "e",
1501 |   "=",
1502 |   ")",
1503 |   ")",
1504 |   "s",
1505 |   "'",
1506 |   "L",
1507 |   "j",
1508 |   "F",
1509 |   ".",
1510 |   "r",
1511 |   "S",
1512 |   "6",
1513 |   "\f",
1514 |   "g",
1515 |   "l",
1516 |   "\"",
1517 |   "N",
1518 |   "6",
1519 |   "L",
1520 |   "S",
1521 |   "(",
1522 |   "]",
1523 |   ")",
1524 |   " ",
1525 |   "x",
1526 |   "Q",
1527 |   "1",
1528 |   "x",
1529 |   "A",
1530 |   "o",
1531 |   "O",
1532 |   "1",
1533 |   "G",
1534 |   "\r",
1535 |   "Q",
1536 |   "<",
1537 |   "U",
1538 |   "~",
1539 |   "h",
1540 |   "O",
1541 |   "V",
1542 |   "[",
1543 |   "\f",
1544 |   "F",
1545 |   "7",
1546 |   "z",
1547 |   "4",
1548 |   "X",
1549 |   "Q",
1550 |   "C",
1551 |   "&",
1552 |   "d",
1553 |   "e",
1554 |   "g",
1555 |   "\n",
1556 |   "Y",
1557 |   "\"",
1558 |   "q",
1559 |   "w",
1560 |   "\t",
1561 |   "h",
1562 |   "[",
1563 |   "T",
1564 |   "!",
1565 |   "z",
1566 |   "`",
1567 |   "Q",
1568 |   "M",
1569 |   "4",
1570 |   "4",
1571 |   "5",
1572 |   "w",
1573 |   "8",
1574 |   "[",
1575 |   "j",
1576 |   "s",
1577 |   "G",
1578 |   "?",
1579 |   "1",
1580 |   "j",
1581 |   "%",
1582 |   "3",
1583 |   "3",
1584 |   " ",
1585 |   "j",
1586 |   "r",
1587 |   "/",
1588 |   "n",
1589 |   "d",
1590 |   "V",
1591 |   "Z",
1592 |   "X",
1593 |   "%",
1594 |   "0",
1595 |   "v",
1596 |   ".",
1597 |   "K",
1598 |   "\"",
1599 |   "s",
1600 |   ">",
1601 |   "F",
1602 |   "g",
1603 |   "|",
1604 |   ";",
1605 |   "\t",
1606 |   "I",
1607 |   "+",
1608 |   "[",
1609 |   "?",
1610 |   "i",
1611 |   "H",
1612 |   "#",
1613 |   "9",
1614 |   "h",
1615 |   "O",
1616 |   "j",
1617 |   "H",
1618 |   "g",
1619 |   "\r",
1620 |   "=",
1621 |   "J",
1622 |   "u",
1623 |   "n",
1624 |   "8",
1625 |   "/",
1626 |   "%",
1627 |   "V",
1628 |   "a",
1629 |   ".",
1630 |   " ",
1631 |   "j",
1632 |   "t",
1633 |   "Z",
1634 |   "]",
1635 |   "+",
1636 |   "+",
1637 |   "r",
1638 |   "P",
1639 |   "^",
1640 |   "$",
1641 |   "e",
1642 |   "R",
1643 |   "d",
1644 |   "\r",
1645 |   "x",
1646 |   "(",
1647 |   "c",
1648 |   "+",
1649 |   "/",
1650 |   ";",
1651 |   "=",
1652 |   "h",
1653 |   "B",
1654 |   "J",
1655 |   "2",
1656 |   "A",
1657 |   "R",
1658 |   "@",
1659 |   "5",
1660 |   " ",
1661 |   "N",
1662 |   "I",
1663 |   "B",
1664 |   "q",
1665 |   "Q",
1666 |   "B",
1667 |   "N",
1668 |   "9",
1669 |   "l",
1670 |   "v",
1671 |   "X",
1672 |   "6",
1673 |   "p",
1674 |   "0",
1675 |   "]",
1676 |   "r",
1677 |   ",",
1678 |   "\\",
1679 |   "x",
1680 |   "q",
1681 |   "v",
1682 |   "o",
1683 |   "2",
1684 |   "s",
1685 |   "k",
1686 |   "e",
1687 |   ";",
1688 |   "Y",
1689 |   "x",
1690 |   "F",
1691 |   "Z",
1692 |   "u",
1693 |   "?",
1694 |   "d",
1695 |   "M",
1696 |   "\\",
1697 |   "Y",
1698 |   "2",
1699 |   "0",
1700 |   "u",
1701 |   "u",
1702 |   "O",
1703 |   "l",
1704 |   "P",
1705 |   "@",
1706 |   ".",
1707 |   "\n",
1708 |   "&",
1709 |   "m",
1710 |   "b",
1711 |   "/",
1712 |   "U",
1713 |   "A",
1714 |   "J",
1715 |   "X",
1716 |   "m",
1717 |   "]",
1718 |   "M",
1719 |   "k",
1720 |   "W",
1721 |   "]",
1722 |   "'",
1723 |   "A",
1724 |   "W",
1725 |   "b",
1726 |   "E",
1727 |   "m",
1728 |   ".",
1729 |   "=",
1730 |   "2",
1731 |   "o",
1732 |   "r",
1733 |   "J",
1734 |   "G",
1735 |   "{",
1736 |   "W",
1737 |   "D",
1738 |   "L",
1739 |   "y",
1740 |   "F",
1741 |   "Z",
1742 |   "V",
1743 |   ",",
1744 |   "u",
1745 |   "3",
1746 |   "[",
1747 |   "H",
1748 |   "6",
1749 |   "t",
1750 |   "|",
1751 |   "v",
1752 |   "Z",
1753 |   "#",
1754 |   ";",
1755 |   "1",
1756 |   "!",
1757 |   "7",
1758 |   "=",
1759 |   "O",
1760 |   "_",
1761 |   "}",
1762 |   "2",
1763 |   "H",
1764 |   "g",
1765 |   ")",
1766 |   "e",
1767 |   "*",
1768 |   "k",
1769 |   "r",
1770 |   "{",
1771 |   "3",
1772 |   "3",
1773 |   "\r",
1774 |   "N",
1775 |   "Y",
1776 |   "A",
1777 |   "\r",
1778 |   "s",
1779 |   "O",
1780 |   " ",
1781 |   "X",
1782 |   "I",
1783 |   "p",
1784 |   "a",
1785 |   "=",
1786 |   "4",
1787 |   "B",
1788 |   "\r",
1789 |   "N",
1790 |   ")",
1791 |   "f",
1792 |   "_",
1793 |   " ",
1794 |   "n",
1795 |   "z",
1796 |   "<",
1797 |   "E",
1798 |   "x",
1799 |   "-",
1800 |   "S",
1801 |   "b",
1802 |   "\n",
1803 |   "X",
1804 |   "X",
1805 |   "W",
1806 |   "e",
1807 |   "!",
1808 |   "@",
1809 |   "O",
1810 |   "K",
1811 |   "m",
1812 |   "=",
1813 |   ">",
1814 |   ">",
1815 |   "@",
1816 |   ";",
1817 |   "\r",
1818 |   "S",
1819 |   "\r",
1820 |   "<",
1821 |   "i",
1822 |   "%",
1823 |   "V",
1824 |   "c",
1825 |   "\"",
1826 |   ">",
1827 |   "y",
1828 |   "8",
1829 |   "w",
1830 |   "n",
1831 |   "l",
1832 |   ".",
1833 |   "6",
1834 |   "(",
1835 |   "\t",
1836 |   "|",
1837 |   ".",
1838 |   "j",
1839 |   "5",
1840 |   "2",
1841 |   "|",
1842 |   "0",
1843 |   "R",
1844 |   "h",
1845 |   "(",
1846 |   "!",
1847 |   "1",
1848 |   "s",
1849 |   "Y",
1850 |   "O",
1851 |   "=",
1852 |   "~",
1853 |   "|",
1854 |   "6",
1855 |   "@",
1856 |   "r",
1857 |   "I",
1858 |   "I",
1859 |   "u",
1860 |   "2",
1861 |   "V",
1862 |   "P",
1863 |   "y",
1864 |   "[",
1865 |   "(",
1866 |   "P",
1867 |   "3",
1868 |   "p",
1869 |   "`",
1870 |   "W",
1871 |   "\t",
1872 |   "=",
1873 |   "i",
1874 |   "/",
1875 |   "s",
1876 |   "k",
1877 |   "g",
1878 |   "l",
1879 |   "3",
1880 |   "y",
1881 |   "P",
1882 |   "t",
1883 |   "\f",
1884 |   "9",
1885 |   "d",
1886 |   "9",
1887 |   ":",
1888 |   "M",
1889 |   "c",
1890 |   "/",
1891 |   "/",
1892 |   "N",
1893 |   "e",
1894 |   "(",
1895 |   "n",
1896 |   "v",
1897 |   "l",
1898 |   "o",
1899 |   "<",
1900 |   "I",
1901 |   "^",
1902 |   "w",
1903 |   "^",
1904 |   "A",
1905 |   "=",
1906 |   "h",
1907 |   "\n",
1908 |   "I",
1909 |   "%",
1910 |   "q",
1911 |   "L",
1912 |   "/",
1913 |   ".",
1914 |   "@",
1915 |   "i",
1916 |   "p",
1917 |   "[",
1918 |   "G",
1919 |   "!",
1920 |   "\n",
1921 |   ">",
1922 |   "A",
1923 |   "B",
1924 |   "m",
1925 |   "C",
1926 |   "V",
1927 |   ")",
1928 |   "(",
1929 |   "i",
1930 |   "\r",
1931 |   "S",
1932 |   "e",
1933 |   "R",
1934 |   "#",
1935 |   "\r",
1936 |   "S",
1937 |   "P",
1938 |   "\\",
1939 |   "?",
1940 |   "8",
1941 |   "p",
1942 |   "/",
1943 |   "2",
1944 |   "@",
1945 |   "y",
1946 |   "n",
1947 |   "P",
1948 |   "n",
1949 |   " ",
1950 |   "*",
1951 |   "!",
1952 |   "8",
1953 |   "\r",
1954 |   "h",
1955 |   "E",
1956 |   "y",
1957 |   ".",
1958 |   ";",
1959 |   "'",
1960 |   "O",
1961 |   "f",
1962 |   "X",
1963 |   " ",
1964 |   "\"",
1965 |   "q",
1966 |   "M",
1967 |   "#",
1968 |   "R",
1969 |   "C",
1970 |   "l",
1971 |   "V",
1972 |   "r",
1973 |   "S",
1974 |   "_",
1975 |   "Z",
1976 |   ">",
1977 |   "3",
1978 |   "X",
1979 |   "\"",
1980 |   "n",
1981 |   "3",
1982 |   "H",
1983 |   "9",
1984 |   "2",
1985 |   "W",
1986 |   "=",
1987 |   "'",
1988 |   "w",
1989 |   "\t",
1990 |   "$",
1991 |   "A",
1992 |   "P",
1993 |   "V",
1994 |   "h",
1995 |   "E",
1996 |   "Y",
1997 |   "i",
1998 |   "Y",
1999 |   "D",
2000 |   "b",
2001 |   "F",
2002 |   "-",
2003 |   "H",
2004 |   "z",
2005 |   "Z",
2006 |   "A",
2007 |   ".",
2008 |   "k",
2009 |   "\n",
2010 |   "5",
2011 |   "[",
2012 |   ")",
2013 |   "\t",
2014 |   "L",
2015 |   "n",
2016 |   "4",
2017 |   ";",
2018 |   ",",
2019 |   "U",
2020 |   "b",
2021 |   "n",
2022 |   "p",
2023 |   "n",
2024 |   "&",
2025 |   "K",
2026 |   "3",
2027 |   ".",
2028 |   "r",
2029 |   "b",
2030 |   "*",
2031 |   "t",
2032 |   "y",
2033 |   ")",
2034 |   "\"",
2035 |   "H",
2036 |   "8",
2037 |   "<",
2038 |   "P",
2039 |   "k",
2040 |   "r",
2041 |   "9",
2042 |   "'",
2043 |   "'",
2044 |   "E",
2045 |   "h",
2046 |   "h",
2047 |   "%",
2048 |   "9",
2049 |   "}"
2050 | ]
2051 | 


--------------------------------------------------------------------------------
/test/performance-json/vector-of-nil.json:
--------------------------------------------------------------------------------
   1 | [
   2 |   null,
   3 |   null,
   4 |   null,
   5 |   null,
   6 |   null,
   7 |   null,
   8 |   null,
   9 |   null,
  10 |   null,
  11 |   null,
  12 |   null,
  13 |   null,
  14 |   null,
  15 |   null,
  16 |   null,
  17 |   null,
  18 |   null,
  19 |   null,
  20 |   null,
  21 |   null,
  22 |   null,
  23 |   null,
  24 |   null,
  25 |   null,
  26 |   null,
  27 |   null,
  28 |   null,
  29 |   null,
  30 |   null,
  31 |   null,
  32 |   null,
  33 |   null,
  34 |   null,
  35 |   null,
  36 |   null,
  37 |   null,
  38 |   null,
  39 |   null,
  40 |   null,
  41 |   null,
  42 |   null,
  43 |   null,
  44 |   null,
  45 |   null,
  46 |   null,
  47 |   null,
  48 |   null,
  49 |   null,
  50 |   null,
  51 |   null,
  52 |   null,
  53 |   null,
  54 |   null,
  55 |   null,
  56 |   null,
  57 |   null,
  58 |   null,
  59 |   null,
  60 |   null,
  61 |   null,
  62 |   null,
  63 |   null,
  64 |   null,
  65 |   null,
  66 |   null,
  67 |   null,
  68 |   null,
  69 |   null,
  70 |   null,
  71 |   null,
  72 |   null,
  73 |   null,
  74 |   null,
  75 |   null,
  76 |   null,
  77 |   null,
  78 |   null,
  79 |   null,
  80 |   null,
  81 |   null,
  82 |   null,
  83 |   null,
  84 |   null,
  85 |   null,
  86 |   null,
  87 |   null,
  88 |   null,
  89 |   null,
  90 |   null,
  91 |   null,
  92 |   null,
  93 |   null,
  94 |   null,
  95 |   null,
  96 |   null,
  97 |   null,
  98 |   null,
  99 |   null,
 100 |   null,
 101 |   null,
 102 |   null,
 103 |   null,
 104 |   null,
 105 |   null,
 106 |   null,
 107 |   null,
 108 |   null,
 109 |   null,
 110 |   null,
 111 |   null,
 112 |   null,
 113 |   null,
 114 |   null,
 115 |   null,
 116 |   null,
 117 |   null,
 118 |   null,
 119 |   null,
 120 |   null,
 121 |   null,
 122 |   null,
 123 |   null,
 124 |   null,
 125 |   null,
 126 |   null,
 127 |   null,
 128 |   null,
 129 |   null,
 130 |   null,
 131 |   null,
 132 |   null,
 133 |   null,
 134 |   null,
 135 |   null,
 136 |   null,
 137 |   null,
 138 |   null,
 139 |   null,
 140 |   null,
 141 |   null,
 142 |   null,
 143 |   null,
 144 |   null,
 145 |   null,
 146 |   null,
 147 |   null,
 148 |   null,
 149 |   null,
 150 |   null,
 151 |   null,
 152 |   null,
 153 |   null,
 154 |   null,
 155 |   null,
 156 |   null,
 157 |   null,
 158 |   null,
 159 |   null,
 160 |   null,
 161 |   null,
 162 |   null,
 163 |   null,
 164 |   null,
 165 |   null,
 166 |   null,
 167 |   null,
 168 |   null,
 169 |   null,
 170 |   null,
 171 |   null,
 172 |   null,
 173 |   null,
 174 |   null,
 175 |   null,
 176 |   null,
 177 |   null,
 178 |   null,
 179 |   null,
 180 |   null,
 181 |   null,
 182 |   null,
 183 |   null,
 184 |   null,
 185 |   null,
 186 |   null,
 187 |   null,
 188 |   null,
 189 |   null,
 190 |   null,
 191 |   null,
 192 |   null,
 193 |   null,
 194 |   null,
 195 |   null,
 196 |   null,
 197 |   null,
 198 |   null,
 199 |   null,
 200 |   null,
 201 |   null,
 202 |   null,
 203 |   null,
 204 |   null,
 205 |   null,
 206 |   null,
 207 |   null,
 208 |   null,
 209 |   null,
 210 |   null,
 211 |   null,
 212 |   null,
 213 |   null,
 214 |   null,
 215 |   null,
 216 |   null,
 217 |   null,
 218 |   null,
 219 |   null,
 220 |   null,
 221 |   null,
 222 |   null,
 223 |   null,
 224 |   null,
 225 |   null,
 226 |   null,
 227 |   null,
 228 |   null,
 229 |   null,
 230 |   null,
 231 |   null,
 232 |   null,
 233 |   null,
 234 |   null,
 235 |   null,
 236 |   null,
 237 |   null,
 238 |   null,
 239 |   null,
 240 |   null,
 241 |   null,
 242 |   null,
 243 |   null,
 244 |   null,
 245 |   null,
 246 |   null,
 247 |   null,
 248 |   null,
 249 |   null,
 250 |   null,
 251 |   null,
 252 |   null,
 253 |   null,
 254 |   null,
 255 |   null,
 256 |   null,
 257 |   null,
 258 |   null,
 259 |   null,
 260 |   null,
 261 |   null,
 262 |   null,
 263 |   null,
 264 |   null,
 265 |   null,
 266 |   null,
 267 |   null,
 268 |   null,
 269 |   null,
 270 |   null,
 271 |   null,
 272 |   null,
 273 |   null,
 274 |   null,
 275 |   null,
 276 |   null,
 277 |   null,
 278 |   null,
 279 |   null,
 280 |   null,
 281 |   null,
 282 |   null,
 283 |   null,
 284 |   null,
 285 |   null,
 286 |   null,
 287 |   null,
 288 |   null,
 289 |   null,
 290 |   null,
 291 |   null,
 292 |   null,
 293 |   null,
 294 |   null,
 295 |   null,
 296 |   null,
 297 |   null,
 298 |   null,
 299 |   null,
 300 |   null,
 301 |   null,
 302 |   null,
 303 |   null,
 304 |   null,
 305 |   null,
 306 |   null,
 307 |   null,
 308 |   null,
 309 |   null,
 310 |   null,
 311 |   null,
 312 |   null,
 313 |   null,
 314 |   null,
 315 |   null,
 316 |   null,
 317 |   null,
 318 |   null,
 319 |   null,
 320 |   null,
 321 |   null,
 322 |   null,
 323 |   null,
 324 |   null,
 325 |   null,
 326 |   null,
 327 |   null,
 328 |   null,
 329 |   null,
 330 |   null,
 331 |   null,
 332 |   null,
 333 |   null,
 334 |   null,
 335 |   null,
 336 |   null,
 337 |   null,
 338 |   null,
 339 |   null,
 340 |   null,
 341 |   null,
 342 |   null,
 343 |   null,
 344 |   null,
 345 |   null,
 346 |   null,
 347 |   null,
 348 |   null,
 349 |   null,
 350 |   null,
 351 |   null,
 352 |   null,
 353 |   null,
 354 |   null,
 355 |   null,
 356 |   null,
 357 |   null,
 358 |   null,
 359 |   null,
 360 |   null,
 361 |   null,
 362 |   null,
 363 |   null,
 364 |   null,
 365 |   null,
 366 |   null,
 367 |   null,
 368 |   null,
 369 |   null,
 370 |   null,
 371 |   null,
 372 |   null,
 373 |   null,
 374 |   null,
 375 |   null,
 376 |   null,
 377 |   null,
 378 |   null,
 379 |   null,
 380 |   null,
 381 |   null,
 382 |   null,
 383 |   null,
 384 |   null,
 385 |   null,
 386 |   null,
 387 |   null,
 388 |   null,
 389 |   null,
 390 |   null,
 391 |   null,
 392 |   null,
 393 |   null,
 394 |   null,
 395 |   null,
 396 |   null,
 397 |   null,
 398 |   null,
 399 |   null,
 400 |   null,
 401 |   null,
 402 |   null,
 403 |   null,
 404 |   null,
 405 |   null,
 406 |   null,
 407 |   null,
 408 |   null,
 409 |   null,
 410 |   null,
 411 |   null,
 412 |   null,
 413 |   null,
 414 |   null,
 415 |   null,
 416 |   null,
 417 |   null,
 418 |   null,
 419 |   null,
 420 |   null,
 421 |   null,
 422 |   null,
 423 |   null,
 424 |   null,
 425 |   null,
 426 |   null,
 427 |   null,
 428 |   null,
 429 |   null,
 430 |   null,
 431 |   null,
 432 |   null,
 433 |   null,
 434 |   null,
 435 |   null,
 436 |   null,
 437 |   null,
 438 |   null,
 439 |   null,
 440 |   null,
 441 |   null,
 442 |   null,
 443 |   null,
 444 |   null,
 445 |   null,
 446 |   null,
 447 |   null,
 448 |   null,
 449 |   null,
 450 |   null,
 451 |   null,
 452 |   null,
 453 |   null,
 454 |   null,
 455 |   null,
 456 |   null,
 457 |   null,
 458 |   null,
 459 |   null,
 460 |   null,
 461 |   null,
 462 |   null,
 463 |   null,
 464 |   null,
 465 |   null,
 466 |   null,
 467 |   null,
 468 |   null,
 469 |   null,
 470 |   null,
 471 |   null,
 472 |   null,
 473 |   null,
 474 |   null,
 475 |   null,
 476 |   null,
 477 |   null,
 478 |   null,
 479 |   null,
 480 |   null,
 481 |   null,
 482 |   null,
 483 |   null,
 484 |   null,
 485 |   null,
 486 |   null,
 487 |   null,
 488 |   null,
 489 |   null,
 490 |   null,
 491 |   null,
 492 |   null,
 493 |   null,
 494 |   null,
 495 |   null,
 496 |   null,
 497 |   null,
 498 |   null,
 499 |   null,
 500 |   null,
 501 |   null,
 502 |   null,
 503 |   null,
 504 |   null,
 505 |   null,
 506 |   null,
 507 |   null,
 508 |   null,
 509 |   null,
 510 |   null,
 511 |   null,
 512 |   null,
 513 |   null,
 514 |   null,
 515 |   null,
 516 |   null,
 517 |   null,
 518 |   null,
 519 |   null,
 520 |   null,
 521 |   null,
 522 |   null,
 523 |   null,
 524 |   null,
 525 |   null,
 526 |   null,
 527 |   null,
 528 |   null,
 529 |   null,
 530 |   null,
 531 |   null,
 532 |   null,
 533 |   null,
 534 |   null,
 535 |   null,
 536 |   null,
 537 |   null,
 538 |   null,
 539 |   null,
 540 |   null,
 541 |   null,
 542 |   null,
 543 |   null,
 544 |   null,
 545 |   null,
 546 |   null,
 547 |   null,
 548 |   null,
 549 |   null,
 550 |   null,
 551 |   null,
 552 |   null,
 553 |   null,
 554 |   null,
 555 |   null,
 556 |   null,
 557 |   null,
 558 |   null,
 559 |   null,
 560 |   null,
 561 |   null,
 562 |   null,
 563 |   null,
 564 |   null,
 565 |   null,
 566 |   null,
 567 |   null,
 568 |   null,
 569 |   null,
 570 |   null,
 571 |   null,
 572 |   null,
 573 |   null,
 574 |   null,
 575 |   null,
 576 |   null,
 577 |   null,
 578 |   null,
 579 |   null,
 580 |   null,
 581 |   null,
 582 |   null,
 583 |   null,
 584 |   null,
 585 |   null,
 586 |   null,
 587 |   null,
 588 |   null,
 589 |   null,
 590 |   null,
 591 |   null,
 592 |   null,
 593 |   null,
 594 |   null,
 595 |   null,
 596 |   null,
 597 |   null,
 598 |   null,
 599 |   null,
 600 |   null,
 601 |   null,
 602 |   null,
 603 |   null,
 604 |   null,
 605 |   null,
 606 |   null,
 607 |   null,
 608 |   null,
 609 |   null,
 610 |   null,
 611 |   null,
 612 |   null,
 613 |   null,
 614 |   null,
 615 |   null,
 616 |   null,
 617 |   null,
 618 |   null,
 619 |   null,
 620 |   null,
 621 |   null,
 622 |   null,
 623 |   null,
 624 |   null,
 625 |   null,
 626 |   null,
 627 |   null,
 628 |   null,
 629 |   null,
 630 |   null,
 631 |   null,
 632 |   null,
 633 |   null,
 634 |   null,
 635 |   null,
 636 |   null,
 637 |   null,
 638 |   null,
 639 |   null,
 640 |   null,
 641 |   null,
 642 |   null,
 643 |   null,
 644 |   null,
 645 |   null,
 646 |   null,
 647 |   null,
 648 |   null,
 649 |   null,
 650 |   null,
 651 |   null,
 652 |   null,
 653 |   null,
 654 |   null,
 655 |   null,
 656 |   null,
 657 |   null,
 658 |   null,
 659 |   null,
 660 |   null,
 661 |   null,
 662 |   null,
 663 |   null,
 664 |   null,
 665 |   null,
 666 |   null,
 667 |   null,
 668 |   null,
 669 |   null,
 670 |   null,
 671 |   null,
 672 |   null,
 673 |   null,
 674 |   null,
 675 |   null,
 676 |   null,
 677 |   null,
 678 |   null,
 679 |   null,
 680 |   null,
 681 |   null,
 682 |   null,
 683 |   null,
 684 |   null,
 685 |   null,
 686 |   null,
 687 |   null,
 688 |   null,
 689 |   null,
 690 |   null,
 691 |   null,
 692 |   null,
 693 |   null,
 694 |   null,
 695 |   null,
 696 |   null,
 697 |   null,
 698 |   null,
 699 |   null,
 700 |   null,
 701 |   null,
 702 |   null,
 703 |   null,
 704 |   null,
 705 |   null,
 706 |   null,
 707 |   null,
 708 |   null,
 709 |   null,
 710 |   null,
 711 |   null,
 712 |   null,
 713 |   null,
 714 |   null,
 715 |   null,
 716 |   null,
 717 |   null,
 718 |   null,
 719 |   null,
 720 |   null,
 721 |   null,
 722 |   null,
 723 |   null,
 724 |   null,
 725 |   null,
 726 |   null,
 727 |   null,
 728 |   null,
 729 |   null,
 730 |   null,
 731 |   null,
 732 |   null,
 733 |   null,
 734 |   null,
 735 |   null,
 736 |   null,
 737 |   null,
 738 |   null,
 739 |   null,
 740 |   null,
 741 |   null,
 742 |   null,
 743 |   null,
 744 |   null,
 745 |   null,
 746 |   null,
 747 |   null,
 748 |   null,
 749 |   null,
 750 |   null,
 751 |   null,
 752 |   null,
 753 |   null,
 754 |   null,
 755 |   null,
 756 |   null,
 757 |   null,
 758 |   null,
 759 |   null,
 760 |   null,
 761 |   null,
 762 |   null,
 763 |   null,
 764 |   null,
 765 |   null,
 766 |   null,
 767 |   null,
 768 |   null,
 769 |   null,
 770 |   null,
 771 |   null,
 772 |   null,
 773 |   null,
 774 |   null,
 775 |   null,
 776 |   null,
 777 |   null,
 778 |   null,
 779 |   null,
 780 |   null,
 781 |   null,
 782 |   null,
 783 |   null,
 784 |   null,
 785 |   null,
 786 |   null,
 787 |   null,
 788 |   null,
 789 |   null,
 790 |   null,
 791 |   null,
 792 |   null,
 793 |   null,
 794 |   null,
 795 |   null,
 796 |   null,
 797 |   null,
 798 |   null,
 799 |   null,
 800 |   null,
 801 |   null,
 802 |   null,
 803 |   null,
 804 |   null,
 805 |   null,
 806 |   null,
 807 |   null,
 808 |   null,
 809 |   null,
 810 |   null,
 811 |   null,
 812 |   null,
 813 |   null,
 814 |   null,
 815 |   null,
 816 |   null,
 817 |   null,
 818 |   null,
 819 |   null,
 820 |   null,
 821 |   null,
 822 |   null,
 823 |   null,
 824 |   null,
 825 |   null,
 826 |   null,
 827 |   null,
 828 |   null,
 829 |   null,
 830 |   null,
 831 |   null,
 832 |   null,
 833 |   null,
 834 |   null,
 835 |   null,
 836 |   null,
 837 |   null,
 838 |   null,
 839 |   null,
 840 |   null,
 841 |   null,
 842 |   null,
 843 |   null,
 844 |   null,
 845 |   null,
 846 |   null,
 847 |   null,
 848 |   null,
 849 |   null,
 850 |   null,
 851 |   null,
 852 |   null,
 853 |   null,
 854 |   null,
 855 |   null,
 856 |   null,
 857 |   null,
 858 |   null,
 859 |   null,
 860 |   null,
 861 |   null,
 862 |   null,
 863 |   null,
 864 |   null,
 865 |   null,
 866 |   null,
 867 |   null,
 868 |   null,
 869 |   null,
 870 |   null,
 871 |   null,
 872 |   null,
 873 |   null,
 874 |   null,
 875 |   null,
 876 |   null,
 877 |   null,
 878 |   null,
 879 |   null,
 880 |   null,
 881 |   null,
 882 |   null,
 883 |   null,
 884 |   null,
 885 |   null,
 886 |   null,
 887 |   null,
 888 |   null,
 889 |   null,
 890 |   null,
 891 |   null,
 892 |   null,
 893 |   null,
 894 |   null,
 895 |   null,
 896 |   null,
 897 |   null,
 898 |   null,
 899 |   null,
 900 |   null,
 901 |   null,
 902 |   null,
 903 |   null,
 904 |   null,
 905 |   null,
 906 |   null,
 907 |   null,
 908 |   null,
 909 |   null,
 910 |   null,
 911 |   null,
 912 |   null,
 913 |   null,
 914 |   null,
 915 |   null,
 916 |   null,
 917 |   null,
 918 |   null,
 919 |   null,
 920 |   null,
 921 |   null,
 922 |   null,
 923 |   null,
 924 |   null,
 925 |   null,
 926 |   null,
 927 |   null,
 928 |   null,
 929 |   null,
 930 |   null,
 931 |   null,
 932 |   null,
 933 |   null,
 934 |   null,
 935 |   null,
 936 |   null,
 937 |   null,
 938 |   null,
 939 |   null,
 940 |   null,
 941 |   null,
 942 |   null,
 943 |   null,
 944 |   null,
 945 |   null,
 946 |   null,
 947 |   null,
 948 |   null,
 949 |   null,
 950 |   null,
 951 |   null,
 952 |   null,
 953 |   null,
 954 |   null,
 955 |   null,
 956 |   null,
 957 |   null,
 958 |   null,
 959 |   null,
 960 |   null,
 961 |   null,
 962 |   null,
 963 |   null,
 964 |   null,
 965 |   null,
 966 |   null,
 967 |   null,
 968 |   null,
 969 |   null,
 970 |   null,
 971 |   null,
 972 |   null,
 973 |   null,
 974 |   null,
 975 |   null,
 976 |   null,
 977 |   null,
 978 |   null,
 979 |   null,
 980 |   null,
 981 |   null,
 982 |   null,
 983 |   null,
 984 |   null,
 985 |   null,
 986 |   null,
 987 |   null,
 988 |   null,
 989 |   null,
 990 |   null,
 991 |   null,
 992 |   null,
 993 |   null,
 994 |   null,
 995 |   null,
 996 |   null,
 997 |   null,
 998 |   null,
 999 |   null,
1000 |   null,
1001 |   null,
1002 |   null,
1003 |   null,
1004 |   null,
1005 |   null,
1006 |   null,
1007 |   null,
1008 |   null,
1009 |   null,
1010 |   null,
1011 |   null,
1012 |   null,
1013 |   null,
1014 |   null,
1015 |   null,
1016 |   null,
1017 |   null,
1018 |   null,
1019 |   null,
1020 |   null,
1021 |   null,
1022 |   null,
1023 |   null,
1024 |   null,
1025 |   null,
1026 |   null,
1027 |   null,
1028 |   null,
1029 |   null,
1030 |   null,
1031 |   null,
1032 |   null,
1033 |   null,
1034 |   null,
1035 |   null,
1036 |   null,
1037 |   null,
1038 |   null,
1039 |   null,
1040 |   null,
1041 |   null,
1042 |   null,
1043 |   null,
1044 |   null,
1045 |   null,
1046 |   null,
1047 |   null,
1048 |   null,
1049 |   null,
1050 |   null,
1051 |   null,
1052 |   null,
1053 |   null,
1054 |   null,
1055 |   null,
1056 |   null,
1057 |   null,
1058 |   null,
1059 |   null,
1060 |   null,
1061 |   null,
1062 |   null,
1063 |   null,
1064 |   null,
1065 |   null,
1066 |   null,
1067 |   null,
1068 |   null,
1069 |   null,
1070 |   null,
1071 |   null,
1072 |   null,
1073 |   null,
1074 |   null,
1075 |   null,
1076 |   null,
1077 |   null,
1078 |   null,
1079 |   null,
1080 |   null,
1081 |   null,
1082 |   null,
1083 |   null,
1084 |   null,
1085 |   null,
1086 |   null,
1087 |   null,
1088 |   null,
1089 |   null,
1090 |   null,
1091 |   null,
1092 |   null,
1093 |   null,
1094 |   null,
1095 |   null,
1096 |   null,
1097 |   null,
1098 |   null,
1099 |   null,
1100 |   null,
1101 |   null,
1102 |   null,
1103 |   null,
1104 |   null,
1105 |   null,
1106 |   null,
1107 |   null,
1108 |   null,
1109 |   null,
1110 |   null,
1111 |   null,
1112 |   null,
1113 |   null,
1114 |   null,
1115 |   null,
1116 |   null,
1117 |   null,
1118 |   null,
1119 |   null,
1120 |   null,
1121 |   null,
1122 |   null,
1123 |   null,
1124 |   null,
1125 |   null,
1126 |   null,
1127 |   null,
1128 |   null,
1129 |   null,
1130 |   null,
1131 |   null,
1132 |   null,
1133 |   null,
1134 |   null,
1135 |   null,
1136 |   null,
1137 |   null,
1138 |   null,
1139 |   null,
1140 |   null,
1141 |   null,
1142 |   null,
1143 |   null,
1144 |   null,
1145 |   null,
1146 |   null,
1147 |   null,
1148 |   null,
1149 |   null,
1150 |   null,
1151 |   null,
1152 |   null,
1153 |   null,
1154 |   null,
1155 |   null,
1156 |   null,
1157 |   null,
1158 |   null,
1159 |   null,
1160 |   null,
1161 |   null,
1162 |   null,
1163 |   null,
1164 |   null,
1165 |   null,
1166 |   null,
1167 |   null,
1168 |   null,
1169 |   null,
1170 |   null,
1171 |   null,
1172 |   null,
1173 |   null,
1174 |   null,
1175 |   null,
1176 |   null,
1177 |   null,
1178 |   null,
1179 |   null,
1180 |   null,
1181 |   null,
1182 |   null,
1183 |   null,
1184 |   null,
1185 |   null,
1186 |   null,
1187 |   null,
1188 |   null,
1189 |   null,
1190 |   null,
1191 |   null,
1192 |   null,
1193 |   null,
1194 |   null,
1195 |   null,
1196 |   null,
1197 |   null,
1198 |   null,
1199 |   null,
1200 |   null,
1201 |   null,
1202 |   null,
1203 |   null,
1204 |   null,
1205 |   null,
1206 |   null,
1207 |   null,
1208 |   null,
1209 |   null,
1210 |   null,
1211 |   null,
1212 |   null,
1213 |   null,
1214 |   null,
1215 |   null,
1216 |   null,
1217 |   null,
1218 |   null,
1219 |   null,
1220 |   null,
1221 |   null,
1222 |   null,
1223 |   null,
1224 |   null,
1225 |   null,
1226 |   null,
1227 |   null,
1228 |   null,
1229 |   null,
1230 |   null,
1231 |   null,
1232 |   null,
1233 |   null,
1234 |   null,
1235 |   null,
1236 |   null,
1237 |   null,
1238 |   null,
1239 |   null,
1240 |   null,
1241 |   null,
1242 |   null,
1243 |   null,
1244 |   null,
1245 |   null,
1246 |   null,
1247 |   null,
1248 |   null,
1249 |   null,
1250 |   null,
1251 |   null,
1252 |   null,
1253 |   null,
1254 |   null,
1255 |   null,
1256 |   null,
1257 |   null,
1258 |   null,
1259 |   null,
1260 |   null,
1261 |   null,
1262 |   null,
1263 |   null,
1264 |   null,
1265 |   null,
1266 |   null,
1267 |   null,
1268 |   null,
1269 |   null,
1270 |   null,
1271 |   null,
1272 |   null,
1273 |   null,
1274 |   null,
1275 |   null,
1276 |   null,
1277 |   null,
1278 |   null,
1279 |   null,
1280 |   null,
1281 |   null,
1282 |   null,
1283 |   null,
1284 |   null,
1285 |   null,
1286 |   null,
1287 |   null,
1288 |   null,
1289 |   null,
1290 |   null,
1291 |   null,
1292 |   null,
1293 |   null,
1294 |   null,
1295 |   null,
1296 |   null,
1297 |   null,
1298 |   null,
1299 |   null,
1300 |   null,
1301 |   null,
1302 |   null,
1303 |   null,
1304 |   null,
1305 |   null,
1306 |   null,
1307 |   null,
1308 |   null,
1309 |   null,
1310 |   null,
1311 |   null,
1312 |   null,
1313 |   null,
1314 |   null,
1315 |   null,
1316 |   null,
1317 |   null,
1318 |   null,
1319 |   null,
1320 |   null,
1321 |   null,
1322 |   null,
1323 |   null,
1324 |   null,
1325 |   null,
1326 |   null,
1327 |   null,
1328 |   null,
1329 |   null,
1330 |   null,
1331 |   null,
1332 |   null,
1333 |   null,
1334 |   null,
1335 |   null,
1336 |   null,
1337 |   null,
1338 |   null,
1339 |   null,
1340 |   null,
1341 |   null,
1342 |   null,
1343 |   null,
1344 |   null,
1345 |   null,
1346 |   null,
1347 |   null,
1348 |   null,
1349 |   null,
1350 |   null,
1351 |   null,
1352 |   null,
1353 |   null,
1354 |   null,
1355 |   null,
1356 |   null,
1357 |   null,
1358 |   null,
1359 |   null,
1360 |   null,
1361 |   null,
1362 |   null,
1363 |   null,
1364 |   null,
1365 |   null,
1366 |   null,
1367 |   null,
1368 |   null,
1369 |   null,
1370 |   null,
1371 |   null,
1372 |   null,
1373 |   null,
1374 |   null,
1375 |   null,
1376 |   null,
1377 |   null,
1378 |   null,
1379 |   null,
1380 |   null,
1381 |   null,
1382 |   null,
1383 |   null,
1384 |   null,
1385 |   null,
1386 |   null,
1387 |   null,
1388 |   null,
1389 |   null,
1390 |   null,
1391 |   null,
1392 |   null,
1393 |   null,
1394 |   null,
1395 |   null,
1396 |   null,
1397 |   null,
1398 |   null,
1399 |   null,
1400 |   null,
1401 |   null,
1402 |   null,
1403 |   null,
1404 |   null,
1405 |   null,
1406 |   null,
1407 |   null,
1408 |   null,
1409 |   null,
1410 |   null,
1411 |   null,
1412 |   null,
1413 |   null,
1414 |   null,
1415 |   null,
1416 |   null,
1417 |   null,
1418 |   null,
1419 |   null,
1420 |   null,
1421 |   null,
1422 |   null,
1423 |   null,
1424 |   null,
1425 |   null,
1426 |   null,
1427 |   null,
1428 |   null,
1429 |   null,
1430 |   null,
1431 |   null,
1432 |   null,
1433 |   null,
1434 |   null,
1435 |   null,
1436 |   null,
1437 |   null,
1438 |   null,
1439 |   null,
1440 |   null,
1441 |   null,
1442 |   null,
1443 |   null,
1444 |   null,
1445 |   null,
1446 |   null,
1447 |   null,
1448 |   null,
1449 |   null,
1450 |   null,
1451 |   null,
1452 |   null,
1453 |   null,
1454 |   null,
1455 |   null,
1456 |   null,
1457 |   null,
1458 |   null,
1459 |   null,
1460 |   null,
1461 |   null,
1462 |   null,
1463 |   null,
1464 |   null,
1465 |   null,
1466 |   null,
1467 |   null,
1468 |   null,
1469 |   null,
1470 |   null,
1471 |   null,
1472 |   null,
1473 |   null,
1474 |   null,
1475 |   null,
1476 |   null,
1477 |   null,
1478 |   null,
1479 |   null,
1480 |   null,
1481 |   null,
1482 |   null,
1483 |   null,
1484 |   null,
1485 |   null,
1486 |   null,
1487 |   null,
1488 |   null,
1489 |   null,
1490 |   null,
1491 |   null,
1492 |   null,
1493 |   null,
1494 |   null,
1495 |   null,
1496 |   null,
1497 |   null,
1498 |   null,
1499 |   null,
1500 |   null,
1501 |   null,
1502 |   null,
1503 |   null,
1504 |   null,
1505 |   null,
1506 |   null,
1507 |   null,
1508 |   null,
1509 |   null,
1510 |   null,
1511 |   null,
1512 |   null,
1513 |   null,
1514 |   null,
1515 |   null,
1516 |   null,
1517 |   null,
1518 |   null,
1519 |   null,
1520 |   null,
1521 |   null,
1522 |   null,
1523 |   null,
1524 |   null,
1525 |   null,
1526 |   null,
1527 |   null,
1528 |   null,
1529 |   null,
1530 |   null,
1531 |   null,
1532 |   null,
1533 |   null,
1534 |   null,
1535 |   null,
1536 |   null,
1537 |   null,
1538 |   null,
1539 |   null,
1540 |   null,
1541 |   null,
1542 |   null,
1543 |   null,
1544 |   null,
1545 |   null,
1546 |   null,
1547 |   null,
1548 |   null,
1549 |   null,
1550 |   null,
1551 |   null,
1552 |   null,
1553 |   null,
1554 |   null,
1555 |   null,
1556 |   null,
1557 |   null,
1558 |   null,
1559 |   null,
1560 |   null,
1561 |   null,
1562 |   null,
1563 |   null,
1564 |   null,
1565 |   null,
1566 |   null,
1567 |   null,
1568 |   null,
1569 |   null,
1570 |   null,
1571 |   null,
1572 |   null,
1573 |   null,
1574 |   null,
1575 |   null,
1576 |   null,
1577 |   null,
1578 |   null,
1579 |   null,
1580 |   null,
1581 |   null,
1582 |   null,
1583 |   null,
1584 |   null,
1585 |   null,
1586 |   null,
1587 |   null,
1588 |   null,
1589 |   null,
1590 |   null,
1591 |   null,
1592 |   null,
1593 |   null,
1594 |   null,
1595 |   null,
1596 |   null,
1597 |   null,
1598 |   null,
1599 |   null,
1600 |   null,
1601 |   null,
1602 |   null,
1603 |   null,
1604 |   null,
1605 |   null,
1606 |   null,
1607 |   null,
1608 |   null,
1609 |   null,
1610 |   null,
1611 |   null,
1612 |   null,
1613 |   null,
1614 |   null,
1615 |   null,
1616 |   null,
1617 |   null,
1618 |   null,
1619 |   null,
1620 |   null,
1621 |   null,
1622 |   null,
1623 |   null,
1624 |   null,
1625 |   null,
1626 |   null,
1627 |   null,
1628 |   null,
1629 |   null,
1630 |   null,
1631 |   null,
1632 |   null,
1633 |   null,
1634 |   null,
1635 |   null,
1636 |   null,
1637 |   null,
1638 |   null,
1639 |   null,
1640 |   null,
1641 |   null,
1642 |   null,
1643 |   null,
1644 |   null,
1645 |   null,
1646 |   null,
1647 |   null,
1648 |   null,
1649 |   null,
1650 |   null,
1651 |   null,
1652 |   null,
1653 |   null,
1654 |   null,
1655 |   null,
1656 |   null,
1657 |   null,
1658 |   null,
1659 |   null,
1660 |   null,
1661 |   null,
1662 |   null,
1663 |   null,
1664 |   null,
1665 |   null,
1666 |   null,
1667 |   null,
1668 |   null,
1669 |   null,
1670 |   null,
1671 |   null,
1672 |   null,
1673 |   null,
1674 |   null,
1675 |   null,
1676 |   null,
1677 |   null,
1678 |   null,
1679 |   null,
1680 |   null,
1681 |   null,
1682 |   null,
1683 |   null,
1684 |   null,
1685 |   null,
1686 |   null,
1687 |   null,
1688 |   null,
1689 |   null,
1690 |   null,
1691 |   null,
1692 |   null,
1693 |   null,
1694 |   null,
1695 |   null,
1696 |   null,
1697 |   null,
1698 |   null,
1699 |   null,
1700 |   null,
1701 |   null,
1702 |   null,
1703 |   null,
1704 |   null,
1705 |   null,
1706 |   null,
1707 |   null,
1708 |   null,
1709 |   null,
1710 |   null,
1711 |   null,
1712 |   null,
1713 |   null,
1714 |   null,
1715 |   null,
1716 |   null,
1717 |   null,
1718 |   null,
1719 |   null,
1720 |   null,
1721 |   null,
1722 |   null,
1723 |   null,
1724 |   null,
1725 |   null,
1726 |   null,
1727 |   null,
1728 |   null,
1729 |   null,
1730 |   null,
1731 |   null,
1732 |   null,
1733 |   null,
1734 |   null,
1735 |   null,
1736 |   null,
1737 |   null,
1738 |   null,
1739 |   null,
1740 |   null,
1741 |   null,
1742 |   null,
1743 |   null,
1744 |   null,
1745 |   null,
1746 |   null,
1747 |   null,
1748 |   null,
1749 |   null,
1750 |   null,
1751 |   null,
1752 |   null,
1753 |   null,
1754 |   null,
1755 |   null,
1756 |   null,
1757 |   null,
1758 |   null,
1759 |   null,
1760 |   null,
1761 |   null,
1762 |   null,
1763 |   null,
1764 |   null,
1765 |   null,
1766 |   null,
1767 |   null,
1768 |   null,
1769 |   null,
1770 |   null,
1771 |   null,
1772 |   null,
1773 |   null,
1774 |   null,
1775 |   null,
1776 |   null,
1777 |   null,
1778 |   null,
1779 |   null,
1780 |   null,
1781 |   null,
1782 |   null,
1783 |   null,
1784 |   null,
1785 |   null,
1786 |   null,
1787 |   null,
1788 |   null,
1789 |   null,
1790 |   null,
1791 |   null,
1792 |   null,
1793 |   null,
1794 |   null,
1795 |   null,
1796 |   null,
1797 |   null,
1798 |   null,
1799 |   null,
1800 |   null,
1801 |   null,
1802 |   null,
1803 |   null,
1804 |   null,
1805 |   null,
1806 |   null,
1807 |   null,
1808 |   null,
1809 |   null,
1810 |   null,
1811 |   null,
1812 |   null,
1813 |   null,
1814 |   null,
1815 |   null,
1816 |   null,
1817 |   null,
1818 |   null,
1819 |   null,
1820 |   null,
1821 |   null,
1822 |   null,
1823 |   null,
1824 |   null,
1825 |   null,
1826 |   null,
1827 |   null,
1828 |   null,
1829 |   null,
1830 |   null,
1831 |   null,
1832 |   null,
1833 |   null,
1834 |   null,
1835 |   null,
1836 |   null,
1837 |   null,
1838 |   null,
1839 |   null,
1840 |   null,
1841 |   null,
1842 |   null,
1843 |   null,
1844 |   null,
1845 |   null,
1846 |   null,
1847 |   null,
1848 |   null,
1849 |   null,
1850 |   null,
1851 |   null,
1852 |   null,
1853 |   null,
1854 |   null,
1855 |   null,
1856 |   null,
1857 |   null,
1858 |   null,
1859 |   null,
1860 |   null,
1861 |   null,
1862 |   null,
1863 |   null,
1864 |   null,
1865 |   null,
1866 |   null,
1867 |   null,
1868 |   null,
1869 |   null,
1870 |   null,
1871 |   null,
1872 |   null,
1873 |   null,
1874 |   null,
1875 |   null,
1876 |   null,
1877 |   null,
1878 |   null,
1879 |   null,
1880 |   null,
1881 |   null,
1882 |   null,
1883 |   null,
1884 |   null,
1885 |   null,
1886 |   null,
1887 |   null,
1888 |   null,
1889 |   null,
1890 |   null,
1891 |   null,
1892 |   null,
1893 |   null,
1894 |   null,
1895 |   null,
1896 |   null,
1897 |   null,
1898 |   null,
1899 |   null,
1900 |   null,
1901 |   null,
1902 |   null,
1903 |   null,
1904 |   null,
1905 |   null,
1906 |   null,
1907 |   null,
1908 |   null,
1909 |   null,
1910 |   null,
1911 |   null,
1912 |   null,
1913 |   null,
1914 |   null,
1915 |   null,
1916 |   null,
1917 |   null,
1918 |   null,
1919 |   null,
1920 |   null,
1921 |   null,
1922 |   null,
1923 |   null,
1924 |   null,
1925 |   null,
1926 |   null,
1927 |   null,
1928 |   null,
1929 |   null,
1930 |   null,
1931 |   null,
1932 |   null,
1933 |   null,
1934 |   null,
1935 |   null,
1936 |   null,
1937 |   null,
1938 |   null,
1939 |   null,
1940 |   null,
1941 |   null,
1942 |   null,
1943 |   null,
1944 |   null,
1945 |   null,
1946 |   null,
1947 |   null,
1948 |   null,
1949 |   null,
1950 |   null,
1951 |   null,
1952 |   null,
1953 |   null,
1954 |   null,
1955 |   null,
1956 |   null,
1957 |   null,
1958 |   null,
1959 |   null,
1960 |   null,
1961 |   null,
1962 |   null,
1963 |   null,
1964 |   null,
1965 |   null,
1966 |   null,
1967 |   null,
1968 |   null,
1969 |   null,
1970 |   null,
1971 |   null,
1972 |   null,
1973 |   null,
1974 |   null,
1975 |   null,
1976 |   null,
1977 |   null,
1978 |   null,
1979 |   null,
1980 |   null,
1981 |   null,
1982 |   null,
1983 |   null,
1984 |   null,
1985 |   null,
1986 |   null,
1987 |   null,
1988 |   null,
1989 |   null,
1990 |   null,
1991 |   null,
1992 |   null,
1993 |   null,
1994 |   null,
1995 |   null,
1996 |   null,
1997 |   null,
1998 |   null,
1999 |   null,
2000 |   null,
2001 |   null,
2002 |   null,
2003 |   null,
2004 |   null,
2005 |   null,
2006 |   null,
2007 |   null,
2008 |   null,
2009 |   null,
2010 |   null,
2011 |   null,
2012 |   null,
2013 |   null,
2014 |   null,
2015 |   null,
2016 |   null,
2017 |   null,
2018 |   null,
2019 |   null,
2020 |   null,
2021 |   null,
2022 |   null,
2023 |   null,
2024 |   null,
2025 |   null,
2026 |   null,
2027 |   null,
2028 |   null,
2029 |   null,
2030 |   null,
2031 |   null,
2032 |   null,
2033 |   null,
2034 |   null,
2035 |   null,
2036 |   null,
2037 |   null,
2038 |   null,
2039 |   null,
2040 |   null,
2041 |   null,
2042 |   null,
2043 |   null,
2044 |   null,
2045 |   null,
2046 |   null,
2047 |   null,
2048 |   null,
2049 |   null
2050 | ]
2051 | 


--------------------------------------------------------------------------------
/test/performance-tests.coffee:
--------------------------------------------------------------------------------
 1 | assertion = require "./assertion"
 2 | fs = require "fs"
 3 | equals = require "equals"
 4 | edn = require "../src/reader"
 5 | 
 6 | testDir = "./test/edn-tests/performance"
 7 | 
 8 | files = fs.readdirSync testDir
 9 | files.forEach (file) -> 
10 | 	validEdn = fs.readFileSync "#{testDir}/#{file}", "utf-8"
11 | 	console.log "Reading #{file}"
12 | 	start = new Date
13 | 	try
14 | 		edn.parse validEdn
15 | 		stop = new Date
16 | 		console.log "Elapsed: #{stop.getTime() - start.getTime()}"
17 | 	catch e
18 | 		console.log "Error reading #{file}", e
19 | 


--------------------------------------------------------------------------------
/test/primitives.coffee:
--------------------------------------------------------------------------------
  1 | edn = require "../src/reader"
  2 | us = require "underscore"
  3 | 
  4 | {isVal, isNotVal, assert, assertParse, assertNotParse, assertEncode, logTotals} = require "./assertion"
  5 | 
  6 | #nil
  7 | # nil represents nil, null or nothing. It should be read as an object with similar meaning on the target platform.
  8 | 
  9 | assertParse "nil should be null",
 10 | 	"nil"
 11 | 	null
 12 | 
 13 | assertParse "nil should not match nilnil",
 14 | 	"nilnil"
 15 | 	isNotVal null
 16 | 
 17 | #booleans
 18 | # true and false should be mapped to booleans.
 19 | 
 20 | assertParse "true should be true",
 21 | 	"true"
 22 | 	true
 23 | 
 24 | assertParse "false should be false",
 25 | 	"false"
 26 | 	false
 27 | 
 28 | assertParse "truefalse should not be true",
 29 | 	"truefalse"
 30 | 	isNotVal true
 31 | 
 32 | assertParse "+ by itself is a valid symbol atom",
 33 | 	"+"
 34 | 	edn.sym "+"
 35 | 
 36 | #strings
 37 | # "double quotes". 
 38 | # May span multiple lines. 
 39 | # Standard C/Java escape characters \t \r \n are supported.
 40 | 
 41 | assertParse 'a "string like this" should be "string like this"',
 42 | 	'"a string like this"',
 43 | 	"a string like this"
 44 | 
 45 | assertParse 'a string "nil" should not be null',
 46 | 	'"nil"'
 47 | 	isNotVal null
 48 | 
 49 | 
 50 | assertParse 'a string should handle escaped quote chars',
 51 | 	'"this is a string \\"and this should be escaped\\" mid string"'
 52 | 	'this is a string \"and this should be escaped\" mid string'
 53 | 	
 54 | 
 55 | assertParse 'a string can contain escaped backslash itself',
 56 | 	'"this is a string with \\\\ a backslash escaped"'
 57 | 	'this is a string with \\ a backslash escaped'
 58 | 	
 59 | #characters
 60 | # \a \b \c ... \z. 
 61 | # \newline, \space and \tab yield the corresponding characters.
 62 | 
 63 | assertParse 'basic \\c characters should be string',
 64 | 	'\\c'
 65 | 	edn.char("c", "second arg")
 66 | 
 67 | assertParse '\\tab is a tab',
 68 | 	'\\tab'
 69 | 	edn.char "tab"
 70 | 
 71 | assertParse '\\newline is a newline',
 72 | 	'\\newline'
 73 | 	edn.char "newline"
 74 | 
 75 | assertParse '\\space is a space',
 76 | 	'\\space' 
 77 | 	edn.char "space"
 78 | 
 79 | assertParse "can read escaped paren",
 80 | 	"\\)"
 81 | 	edn.char ")"
 82 | 	
 83 | #symbols
 84 | # begin with a non-numeric character and can 
 85 | # contain alphanumeric characters and . * + ! - _ ?. 
 86 | # If - or . are the first character, the second character must be non-numeric. 
 87 | # Additionally, : # are allowed as constituent characters in symbols but not as the first character.
 88 | 
 89 | assertNotParse "do not allow symbols to start with ~",
 90 | 	"~cat"
 91 | 
 92 | assertNotParse "do not allow symbols to start with @",
 93 | 	"@cat"
 94 | 
 95 | assertNotParse "do not allow non-numeric starting character",
 96 | 	"0xy" 
 97 | 
 98 | assertParse "basic symbol 'cat' should be 'cat'",
 99 | 	'cat'
100 | 	edn.sym 'cat'
101 | 
102 | assertParse "symbol with special characters 'cat*rat-bat'",
103 | 	'cat*rat-bat'
104 | 	edn.sym 'cat*rat-bat'
105 | 
106 | assertParse "symbol with colon and hash in middle 'cat:rat#bat'",
107 | 	'cat:rat#bat'
108 | 	edn.sym 'cat:rat#bat'
109 | 
110 | assertParse "symbol can start with ?",
111 | 	"?x"
112 | 	edn.sym "?x"
113 | 
114 | #keywords
115 | # :fred or :my/fred
116 | assertParse "keyword starts with colon :fred is edn.Keyword :fred",
117 | 	':fred'
118 | 	edn.kw ':fred'
119 | 
120 | assertParse "keyword can have slash :community/name", 
121 | 	':community/name'
122 | 	edn.kw ':community/name'
123 | 
124 | #integers
125 | # 0 - 9, optionally prefixed by - to indicate a negative number.
126 | # the suffix N to indicate that arbitrary precision is desired.
127 | assertParse "0 is 0",
128 | 	'0'
129 | 	0
130 | 
131 | assertParse "-0 is 0",
132 | 	"-0"
133 | 	0
134 | 	
135 | assertParse "9923 is 9923",
136 | 	'9923'
137 | 	9923
138 | 
139 | assertParse "-9923 is -9923",
140 | 	'-9923'
141 | 	-9923
142 | 
143 | assertParse "+9923 is 9923", 
144 | 	'+9923'
145 | 	9923 
146 | 
147 | assertParse "N for aritrary precision",
148 | 	"432N"
149 | 	432
150 | 
151 | assertParse "Very big ints remain as strings which user can deal with how they please",
152 | 	"191561942608236107294793378084303638130997321548169216"
153 | 	edn.bigInt "191561942608236107294793378084303638130997321548169216"
154 | 
155 | #floating point numbers
156 | # integers with frac e.g. 12.32
157 | assertParse "12.32 is 12.32",
158 | 	'12.32'
159 | 	12.32
160 | 
161 | assertParse "-12.32 is -12.32",
162 | 	'-12.32'
163 | 	-12.32
164 | 
165 | assertParse "+9923.23 is 9923.23",
166 | 	"+9923.23"
167 | 	9923.23
168 | 	
169 | assertParse "M suffix on float",
170 | 	"223.230M"
171 | 	223.230
172 | 
173 | assertParse "E+ supported for float",
174 | 	"45.4E+43M"
175 | 	4.54e+44
176 | 	
177 | assertParse "e+ supported for float",
178 | 	"45.4e+43M"
179 | 	4.54e+44
180 | 	
181 | assertParse "e+ supported for float no decimal",
182 | 	"45e+43"
183 | 	4.5e44
184 | 	
185 | #lists
186 | # (a b 42)
187 | assertParse "basic list (a b 42) works",
188 | 	'(a b 42)'
189 | 	new edn.List [(edn.sym 'a'), (edn.sym 'b'), 42]
190 | 
191 | assertParse "nested list (a (b 42 (c d)))",
192 | 	'(a (b 42 (c d)))'
193 | 	new edn.List [(edn.sym 'a'), new edn.List [(edn.sym 'b'), 42, new edn.List [(edn.sym 'c'), (edn.sym 'd')]]]
194 | 
195 | #vectors
196 | # [a b 42]
197 | assertParse "vector works [a b c]",
198 | 	'[a b c]'
199 | 	new edn.Vector [(edn.sym 'a'), (edn.sym 'b'), (edn.sym 'c')]
200 | 
201 | #maps
202 | # {:a 1, "foo" :bar, [1 2 3] four}
203 | assertParse "kv pairs in map work {:a 1 :b 2}",
204 | 	'{:a 1 :b 2}'
205 | 	new edn.Map [(edn.kw ":a"), 1, (edn.kw ":b"), 2] 
206 | 
207 | assertParse "anything can be a key",
208 | 	'{[1 2 3] "some numbers"}'
209 | 	new edn.Map [(new edn.Vector [1, 2, 3]), "some numbers"]
210 | 
211 | assertParse "even a map can be a key",
212 | 	'{{:name "blue" :type "color"} [ocean sky moon]}'
213 | 	new edn.Map [(new edn.Map [(edn.kw ":name"), "blue", (edn.kw ":type"), "color"]), new edn.Vector [(edn.sym "ocean"), (edn.sym "sky"), (edn.sym "moon")]]
214 | 
215 | #sets
216 | # #{a b [1 2 3]}
217 | assertParse "basic set \#{1 2 3}",
218 | 	'\#{1 2 3}'
219 | 	new edn.Set [1, 2, 3]
220 | 
221 | assertParse "a set is distinct",
222 | 	'\#{1 1 2 3}'
223 | 	'set not distinct'
224 | 
225 | #tagged elements
226 | # #myapp/Person {:first "Fred" :last "Mertz"}
227 | # #inst "1985-04-12T23:20:50.52Z"
228 | assertParse "inst is handled by default",
229 | 	'#inst "1985-04-12T23:20:50.52Z"'
230 | 	new Date Date.parse "1985-04-12T23:20:50.52Z"
231 | 
232 | # #uuid "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
233 | assertParse 'basic tags work #myapp/Person {:first "Fred" :last "Mertz"}',
234 | 	'#myapp/Person {:first "Fred" :last "Mertz"}'
235 | 	new edn.Tagged (new edn.Tag "myapp", "Person"), new edn.Map [(edn.kw ":first"), "Fred", (edn.kw ":last"), "Mertz"]
236 | 
237 | assertParse "unhandled tagged pair works",
238 | 	'#some/inst "1985-04-12T23:20:50.52Z"'
239 | 	new edn.Tagged (new edn.Tag "some", "inst"), "1985-04-12T23:20:50.52Z"
240 | 
241 | assertParse "tagged elements in a vector",
242 | 	"[a b #animal/cat rodger c d]"
243 | 	new edn.Vector [(edn.sym "a"), (edn.sym "b"), (new edn.Tagged (new edn.Tag "animal", "cat"), (edn.sym "rodger")), (edn.sym "c"), (edn.sym "d")]
244 | 
245 | edn.setTagAction new edn.Tag("myApp", "Person"), (obj) -> 
246 | 	obj.set (edn.kw ":age"), obj.at(edn.kw ":age") + 100
247 | 
248 | assertParse "tag actions are recognized", 
249 | 	"#myApp/Person {:name :walter :age 500}"
250 | 	new edn.Map [(edn.kw ":name"), (edn.kw ":walter"), (edn.kw ":age"), 600]
251 | 
252 | #Comments
253 | #If a ; character is encountered outside of a string, that character 
254 | #and all subsequent characters to the next newline should be ignored.
255 | assertParse "there can be comments in a vector",
256 | 	"[valid vector\n;;comment in vector\nmore vector items]"
257 | 	new edn.Vector [(edn.sym "valid"), (edn.sym "vector"), (edn.sym "more"), (edn.sym "vector"), (edn.sym "items")]
258 | 
259 | assertParse "there can be inline comments",
260 | 	"[valid ;comment\n more items]"
261 | 	new edn.Vector [(edn.sym "valid"), (edn.sym "more"), (edn.sym "items")]
262 | 
263 | assertParse "whitespace does not affect comments",
264 | 	"[valid;touching trailing comment\nmore items]"
265 | 	new edn.Vector [(edn.sym "valid"), (edn.sym "more"), (edn.sym "items")]
266 | 	
267 | #Discard
268 | #If the sequence #_ is encountered outside of a string, symbol or keyword, 
269 | #the next element should be read and discarded. Note that the next element 
270 | #must still be a readable element. A reader should not call user-supplied 
271 | #tag handlers during the processing of the element to be discarded.
272 | assertParse "discarding item in vector",
273 | 	"[a b #_ c d]"
274 | 	new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "d")]
275 | 
276 | assertParse "discard an item outside of form",
277 | 	"#_ a"
278 | 	""
279 | 	
280 | assertParse "discard touches an item",
281 | 	"[a b #_c d]"
282 | 	new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "d")]
283 | 
284 | assertParse "discard an entire form",
285 | 	"[a b #_ [a b] c d]"
286 | 	new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "c"), (edn.sym "d")]
287 | 
288 | assertParse "discard with a comment",
289 | 	"[a #_ ;we are discarding what comes next\n c d]"
290 | 	new edn.Vector [(edn.sym "a"), (edn.sym "d")]
291 | 
292 | #Whitespace
293 | #commas are whitespace 
294 | assertParse "no one cares about commas",
295 | 	"[a ,,,,,, b,,,,,c ,d]"
296 | 	new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "c"), (edn.sym "d")]
297 | 
298 | #Map Instances
299 | assertParse "can lookup key",
300 | 	"{:a 1 :b 2}"
301 | 	(m) -> m.at(edn.kw ':a') is 1
302 | 
303 | assertParse "can lookup by other object",
304 | 	'{[1 2] "rabbit moon"}'
305 | 	(m) -> m.at(new edn.Vector [1, 2]) is "rabbit moon"
306 | 	
307 | #encoding
308 | assertEncode "can encode basic map",
309 | 	{a: 1, b: 2}
310 | 	"{\"a\" 1 \"b\" 2}"
311 | 
312 | ###
313 | This can not work from a js obj a keys are coerced to strings regardless of your intention
314 | If a user wants numeric keys they need to use an edn.Map directly. 
315 | assertEncode "can encode map with numeric keys",
316 | 	{1: 1, 200: 2}
317 | 	"{1 1 200 2}"
318 | ###
319 | 
320 | assertEncode "can encode a list",
321 | 	[1, 2, 3]
322 | 	"[1 2 3]"
323 | 	
324 | assertEncode "can encode single element list",
325 | 	[1]
326 | 	"[1]"
327 | 
328 | assertEncode "Can encode nil in hash map", 
329 | 	new edn.Map [edn.kw(":x"), 1, edn.kw(":y"), null]
330 | 	"{:x 1 :y nil}"
331 | 	
332 | assertEncode "can encode a nested list",
333 | 	[1, 2, 3, [4, 5, 6, [7, 8, 9, [10]]]]
334 | 	"[1 2 3 [4 5 6 [7 8 9 [10]]]]"
335 | 	
336 | assertEncode "can encode list of strings",
337 | 	["a", "b", "c", "words that are strings"]
338 | 	"[\"a\" \"b\" \"c\" \"words that are strings\"]"
339 | 	
340 | assertEncode "can encode list of maps",
341 | 	[{name: "walter", age: 30}, {name: "tony", age: 50, kids: ["a", "b", "c"]}]
342 | 	"[{\"name\" \"walter\" \"age\" 30} {\"name\" \"tony\" \"age\" 50 \"kids\" [\"a\" \"b\" \"c\"]}]"
343 | 
344 | assertEncode "can encode tagged items",
345 | 	new edn.Tagged(new edn.Tag('myApp', 'Person'), {name: "walter", age: 30})
346 | 	"#myApp/Person {\"name\" \"walter\" \"age\" 30}"
347 | 
348 | assertEncode "can handle string that start with colon",
349 | 	new edn.Vector [':a', 'b']
350 | 	"[\":a\" \"b\"]"
351 | 
352 | assertParse "can parse and look up nested item",
353 | 	"{:cat [{:hair :orange}]}"
354 | 	(r) -> edn.atPath(r, ":cat 0 :hair") is (edn.kw ":orange")
355 | 	
356 | 
357 | assertParse "can handle vector of symbols starting with ?",
358 | 	"[?x ?y ?z]"
359 | 	new edn.Vector [edn.sym("?x"), edn.sym("?y"), edn.sym("?z")]
360 | 
361 | assertEncode "can handle question marks for keywords",
362 | 	[(edn.kw ":find"), (edn.sym "?m"), (edn.kw ":where"), [(edn.sym "?m"), (edn.kw ":movie/title")]]
363 | 	"[:find ?m :where [?m :movie/title]]"
364 | 
365 | 
366 | assertEncode "can handle bare _ as symbol",
367 | 	[(edn.sym "_"), (edn.kw ":likes"), (edn.sym "?x")]
368 | 	"[_ :likes ?x]"
369 | 
370 | assertEncode "can handle null",
371 | 	null
372 | 	"nil"
373 | 
374 | assertParse "reading files works as expected",
375 | 	edn.encode edn.readFileSync "#{__dirname}/test.edn" 
376 | 	new edn.Map [(edn.kw ":key"), "val", (edn.kw ":key2"), new edn.Vector [1, 2, 3]]
377 | 
378 | assertEncode "do not coerce numeric strings into numbers",
379 | 	{a: "1"}
380 | 	"{\"a\" \"1\"}"
381 | 
382 | assertEncode "encoding stringified json string handles quoting correctly",
383 | 	edn.encode JSON.stringify a: "1"
384 | 	'"\\"{\\\\\\"a\\\\\\":\\\\\\"1\\\\\\"}\\""'
385 | 
386 | assert "json decoding an encoded json stringifed object...",
387 | 	(JSON.parse edn.parse edn.encode JSON.stringify a: "1")
388 | 	a: "1"
389 | 
390 | assert "two keywords are eqaul",
391 | 	(edn.kw ":cat") is (edn.kw ":cat")
392 | 	true
393 | 
394 | assert "toJS works with nil as null",
395 | 	edn.toJS edn.parse "nil"
396 | 	null
397 | 
398 | assert "vector should handle nil",
399 | 	edn.toJS edn.parse "[nil nil nil]"
400 | 	[null, null, null]
401 | 
402 | assert "map should handle nil values",
403 | 	edn.toJS edn.parse "{x nil nil nil}"
404 | 	do -> x = x: null; x[null] = null; x
405 | 
406 | 
407 | logTotals()
408 | 


--------------------------------------------------------------------------------
/test/test.edn:
--------------------------------------------------------------------------------
1 | {
2 | 	:key "val"
3 | 	:key2 [1 2 3]
4 | }
5 | 


--------------------------------------------------------------------------------
/test/unify.coffee:
--------------------------------------------------------------------------------
 1 | edn = require "../src/reader"
 2 | 
 3 | {assert, logTotals} = require "./assertion"
 4 | 
 5 | assert "make sure unification works",
 6 | 	edn.unify "[?x ?y ?x {?z ?x ?x {?x ?x}}]", x: 1, y: 2, z: 3
 7 | 	edn.parse "[1 2 1 {3 1 1 {1 1}}]"
 8 | 
 9 | assert "make sure keys and values can both be unified", 
10 | 	edn.unify "{?key [?val ?val]}", key: edn.kw(":name"), val: edn.sym("tofu")
11 | 	edn.parse "{:name [tofu tofu]}"
12 | 
13 | assert "unify accepts a Map object for data", 
14 | 	edn.unify (new edn.Map [edn.sym("?key"), edn.sym("?val")]), key: edn.kw(":lunch-food"), val: "carrot"
15 | 	edn.parse "{:lunch-food \"carrot\"}"
16 | 
17 | assert "unify accepts a Map object for values",
18 | 	edn.unify "{?key [?val ?val]}", edn.parse "{\"key\" :lunch-food \"val\" \"carrot\"}"
19 | 	edn.parse "{:lunch-food [\"carrot\" \"carrot\"]}"
20 | 
21 | assert "unify accepts string for data which gets encoded",
22 | 	edn.unify "{?key ?val}", "{\"key\" x \"val\" y}"
23 | 	edn.parse "{x y}"
24 | 	
25 | assert "unify will lookup symbol and keyword if using Map for data",
26 | 	edn.unify "{?key [?val {?val ?key}]}", "{key :lunch-food :val [:carrot :tomato :lettuce]}"
27 | 	edn.parse "{:lunch-food [[:carrot :tomato :lettuce] {[:carrot :tomato :lettuce] :lunch-food}]}"
28 | 
29 | assert "unify can handle updating a vector inside of a tagged value", 
30 | 	edn.unify "{:db/id #db/id [:db.part/user ?id] :person/name ?name}", id: -1, name: "franklin"
31 | 	edn.parse "{:db/id #db/id [:db.part/user -1] :person/name \"franklin\"}"
32 |  
33 | logTotals()
34 | 


--------------------------------------------------------------------------------